image_style_url ne crée pas d'images [fermé]

11

J'utilise image_style_url pour obtenir une vignette d'une image que j'ai ajoutée via l'interface administrateur.

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

L'API indique que l'image sera créée lorsque l'URL sera demandée. Cependant, lorsque vous visitez la page, l'image ne s'affiche pas (404). L'URL renvoyée par la fonction semble être bien formée, mais le fichier n'a pas été créé.

Le dossier «foo-thumb» se trouve dans le dossier de données public et les autorisations de fichier doivent être OK. J'ai essayé de vider le cache d'image (drupal image-flush foo-thumb) mais toujours aucun résultat.

Des idées?

Bart
la source

Réponses:

22

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

De plus, tout code qui génère par programme un lien vers un dérivé d'image sans utiliser la fonction API image_style_url () standard ne fonctionnera plus correctement si l'image n'existe pas déjà dans le système de fichiers, car le jeton nécessaire ne sera pas présent dans le URL.

Au lieu de cela, vous pouvez faire quelque chose comme ça;

$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
la source
2
Ne devrait-il pas y avoir un si à la fin? c'est-à-dire: if ($ success) {$ new_image_url = file_create_url ($ dérivés_uri); }
stefgosselin
3
Une petite mise à jour pour image_style_create_derivativela $stylevariable doit être rangée$style = image_style_load('my_style');
Victor Lazov
J'ai édité la réponse à passer $stylebien image_style_load()avant de passer à image_style_create_derivative()selon les docs .
Felix Eve
Tout a fonctionné dans ce domaine, sauf que file_create_url ($ dérivé_uri); N'a pas travaillé pour moi. Ce qui a fonctionné, c'est de le remplacer (à la dernière ligne) par image_style_url ($ style, $ image_uri);
Mark
Cette méthode de file_create_url n'applique pas le style d'image. J'ai trouvé une solution en appliquant un autre style d'image. Vraiment étrange.
Henry
7

Une erreur courante est que les URI ne sont pas correctement formatés. Vérifiez que votre paramètre URI est préfixé public://.

Mauvaise pratique

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

Cela génère une URL vers l'image stylisée (avec un jeton d'image), mais ne génère pas une image stylisée lorsqu'elle n'a pas été précédemment générée.


Bonnes pratiques

$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']);

Cela génère une URL stylisée, comme ci-dessus, et génère une image stylisée s'il n'en existe pas.

timofey.com
la source
1

Le chemin du système de fichiers public était incorrect.

Bart
la source
1

Une autre option consiste à utiliser la fonction thème.

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

Plutôt que de renvoyer l'URL, il renverra le code HTML de l'img.

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

ici, vous pouvez utiliser l'URL pour créer du HTML

Basilic
la source
0

Assurez-vous d'avoir du foo-thumbstyle, vous pouvez vérifier sur admin/config/media/image-styles.

Le premier paramètre de image_style_url est un nom de style , pas un nom de dossier .

Sang Le Thanh
la source
Le style existe, le nom du dossier est le même que le nom du style dans mon cas.
Bart
Si vous obtenez l'erreur 404, cela signifie que le menu n'existe pas. Je pense que tous vos styles d'image ont ce problème. Pouvez-vous expliquer plus sur vous la version et les informations de Drupal: - Quel serveur Web vous utilisez? - Le paramètre d'url propre est-il correct?
Sang Le Thanh
Je ne sais pas si le menu n'existe pas, mais le fichier n'existe certainement pas. L'URL renvoyée semble à peu près correcte, mais si je vérifie mon dossier sur le serveur, l'image n'est pas là. Le dossier créé par Drupal ('foo-thumb') est cependant là. L'exécution d'Apache 2.2 avec des URL propres et tout semble bien fonctionner.
Bart
Je peux voir que votre lien de génération d'image est introuvable. Pouvez-vous vérifier le fichier .htaccess pour vérifier la ligne ErrorDocument 404 /index.php, exécutez-vous Drupal au-dessus de votre domaine? Un autre essai est d'installer la boîte à outils imagemagick mais je vois que votre problème n'est pas un problème par le rendu d'image de php.
Sang Le Thanh
0

Si vous recevez un 404 lorsque vous essayez d'afficher l'image, il est possible que le nom du style d'image ne soit pas correct. Dans mon cas, le nom de style affiché dans Styles d'image n'était pas le nom de machine du nom de style. Lorsque vous survolez le style, l'URL affiche le nom de la machine du nom du style. Modifiez-le par le nom de la machine ou supprimez le nom actuel et recréez-le avec le nom requis.


la source