image_style_url erstellt keine Bilder [geschlossen]

11

Ich verwende image_style_url , um eine Miniaturansicht eines Bildes zu erhalten, das ich über die Administratoroberfläche hinzugefügt habe.

// $foo->field_picture['und'][0]['uri'] has value public://foo.jpg
image_style_url('foo-thumb', $foo->field_picture['und'][0]['uri']);

Die API gibt an, dass das Bild erstellt wird, wenn die URL angefordert wird. Beim Besuch der Seite wird das Bild jedoch nicht angezeigt (404). Die von der Funktion zurückgegebene URL scheint gut geformt zu sein, aber die Datei wurde nicht erstellt.

Der Ordner 'foo-thumb' befindet sich im öffentlichen Datenordner und die Dateiberechtigungen sollten in Ordnung sein. Ich habe versucht, den Bildcache zu leeren (drupal image-flush foo-thumb), aber immer noch keine Ergebnisse.

Irgendwelche Ideen?

Bart
quelle

Antworten:

22

Von: https://drupal.org/drupal-7.20-release-notes

Darüber hinaus funktioniert jeder Code, der programmgesteuert einen Link zu einer Bildableitung ohne Verwendung der Standard-API-Funktion image_style_url () generiert, nicht mehr ordnungsgemäß, wenn das Bild noch nicht im Dateisystem vorhanden ist, da das erforderliche Token im nicht vorhanden ist URL.

Stattdessen können Sie so etwas tun.

$image_uri      = $node->field_image[LANGUAGE_NONE][0]['uri']; // or any public://my_image
$style          = 'my_style';
$derivative_uri = image_style_url ($style, $image_uri);
$success        = file_exists($derivative_uri) || image_style_create_derivative(image_style_load($style), $image_uri, $derivative_uri);

$new_image_url  = file_create_url($derivative_uri);
Matthieu Gadrat
quelle
2
Sollte es am Ende kein Wenn geben? dh: if ($ success) {$ new_image_url = file_create_url ($ derivative_uri); }
Stefgosselin
3
Ein kleines Update für die image_style_create_derivativedie $styleVariable sollte Array$style = image_style_load('my_style');
Victor Lazov
Ich habe die Antwort bearbeitet passieren , $styleobwohl image_style_load()vor dem Übergang image_style_create_derivative()nach dem docs .
Felix Eve
Alles hat dabei funktioniert, außer dass file_create_url ($ derivative_uri); hat bei mir nicht funktioniert. Was funktioniert hat, war das (in der letzten Zeile) durch image_style_url ($ style, $ image_uri) zu ersetzen;
Mark
Diese Methode von file_create_url wendet keinen Bildstil an. Ich habe eine Lösung gefunden, die einen anderen Bildstil anwendet. Wirklich seltsam.
Henry
7

Ein häufiger Fehler ist, dass URIs nicht richtig formatiert sind. Überprüfen Sie, ob Ihrem URI-Parameter das Präfix vorangestellt ist public://.

Schlechte Praxis

$imageUrl = image_style_url('style_name', 'myimage.jpg');
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['filename']);

Dadurch wird eine URL zum gestalteten Bild (mit Bildtoken) ausgegeben, es wird jedoch kein gestaltetes Bild generiert, wenn es noch nicht generiert wurde.


Gute Übung

$imageUrl = image_style_url('style_name', file_build_uri('myimage.jpg')); // changes to 'public://myimage.jpg'
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['uri']);

Dies gibt eine gestaltete URL wie oben aus und generiert ein gestaltetes Bild, falls keines vorhanden ist.

timofey.com
quelle
1

Der Pfad des öffentlichen Dateisystems war falsch.

Bart
quelle
1

Eine andere Möglichkeit ist die Verwendung der Themenfunktion.

$img = theme('image_style', array('style_name' => 'your_image_style_machine_name', 'path' => $node->field_image['und'][0]['uri']));

Anstatt die URL zurückzugeben, wird der HTML-Code für das IMG zurückgegeben.

rparker
quelle
1
$fid = file_load($field_yuorfield_fid);          
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');

Hier kann URL zum Erstellen von HTML verwendet werden

Basilikum
quelle
0

Stellen Sie sicher, dass Sie foo-thumbStil haben, den Sie unter überprüfen können admin/config/media/image-styles.

Die ersten Parameter von image_style_url ist ein Art - Name , kein Ordner - Namen.

Sang Le Thanh
quelle
Der Stil existiert, der Ordnername ist der gleiche wie der Stilname in meinem Fall.
Bart
Wenn Sie den Fehler 404 erhalten haben, bedeutet dies, dass das Menü nicht vorhanden ist. Ich denke, alle Ihre Bildstile haben dieses Problem. Können Sie mehr über Ihre Drupal-Version und Informationen erklären: - Welchen Webserver verwenden Sie? - Ist die saubere URL-Einstellung korrekt?
Sang Le Thanh
Ich weiß nicht, ob das Menü nicht existiert, aber die Datei sicherlich nicht. Die zurückgegebene URL scheint ungefähr richtig zu sein, aber wenn ich meinen Ordner auf dem Server überprüfe, ist das Bild nicht vorhanden. Der von Drupal erstellte Ordner ('foo-thumb') ist jedoch vorhanden. Wenn Sie Apache 2.2 mit sauberen URLs ausführen, scheinen alle einwandfrei zu funktionieren.
Bart
Ich kann sehen, dass Ihr Link zum Generieren von Bildern nicht gefunden wurde. Können Sie die .htaccess-Datei überprüfen, um die Zeile zu überprüfen ErrorDocument 404 /index.php? Führen Sie Drupal über Ihrer Domain aus? Ein anderer Versuch ist die Installation des Imagemagick- Toolkits, aber ich sehe, dass Ihr Problem kein Problem durch das Image-Rendering von PHP ist.
Sang Le Thanh
0

Wenn Sie beim Anzeigen des Bildes eine 404 erhalten, besteht die Möglichkeit, dass der Name des Bildstils nicht korrekt ist. In meinem Fall war der Stilname, der in Bildstilen angezeigt wurde, nicht der Computername des Stilnamens. Wenn Sie den Mauszeiger über den Stil bewegen, zeigt die URL den Computernamen des Stilnamens an. Ändern Sie ihn entweder in den Computernamen oder löschen Sie den aktuellen Namen und erstellen Sie ihn mit dem gewünschten Namen neu.


quelle