web-dev-qa-db-fra.com

image_style_url ne crée pas d'images

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?

11
Bart

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);
22
Matthieu Gadrat

Une erreur courante est que les URI ne sont pas correctement formatés. Vérifiez que votre paramètre URI est préfixé par 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.

7
timofey.com

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

1
Bart
$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

1
Basil

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.

1
rparker

Assurez-vous que vous avez foo-thumb style, vous pouvez vérifier à admin/config/media/image-styles.

Les premiers paramètres de image_style_url est un nom de style , pas un dossier nom.

0
Sang Le Thanh

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.

0
user28555