URL-адрес стиля изображения не создает изображения [закрыто]


Я использую image_style_url, чтобы получить миниатюру изображение, которое я добавил через интерфейс администратора.

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

API указывает, что изображение будет создано при запросе URL-адреса. Однако при посещении страницы изображение не отображается (404). URL-адрес, возвращаемый функцией, кажется хорошо сформированным, но файл не был создан.

Папка "большой палец" находится в папке общедоступных данных, и права доступа к файлам должны быть в порядке. Я попытался очистить кэш изображений (drupal image-flush foo-thumb), но все еще нет результаты.

Есть идеи?

Author: Bart, 2011-09-19

7 answers

От: https://drupal.org/drupal-7.20-release-notes

Кроме того, любой код, который программно генерирует ссылку на производную изображения без использования стандартной функции API image_style_url() , больше не будет работать корректно, если изображение еще не существует в файловой системе, поскольку необходимый токен не будет присутствовать в URL.

Вместо этого вы можете сделать что-то вроде этого;

$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
Author: Matthieu Gadrat, 2020-08-11 09:12:51

Одной из распространенных ошибок является неправильный формат URI. Убедитесь, что ваш параметр URI имеет префикс public://.

Плохая практика

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

Это выводит URL-адрес стилизованного изображения (с маркером изображения), но не создает стилизованное изображение, если оно не было создано ранее.


Надлежащая практика

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

Это выводит стилизованный URL-адрес, подобный приведенному выше, и генерирует стилизованное изображение, если такового не существует.

 7
Author: timofey.com, 2015-06-22 16:27:52

Неверный путь к общедоступной файловой системе.

 1
Author: Bart, 2012-04-04 14:16:10

Другой вариант - использовать функцию темы.

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

Вместо того, чтобы возвращать URL-адрес, он вернет html-код для img.

 1
Author: rparker, 2014-03-14 18:29:00
$fid = file_load($field_yuorfield_fid);          
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');

Здесь можно использовать URL-адрес для создания html

 1
Author: Basil, 2015-01-27 14:32:13

Убедитесь, что у вас есть стиль foo-thumb, вы можете проверить на admin/config/media/image-styles.

Первые параметры image_style_url - это имя стиля , а не имя папки .

 0
Author: Sang Le Thanh, 2011-09-19 12:55:45

Если при попытке просмотра изображения вы получаете 404, возможно, имя стиля изображения неверно. В моем случае имя стиля, которое отображалось в стилях изображений, не было именем компьютера имени стиля. При наведении указателя мыши на стиль в URL-адресе будет отображаться имя компьютера с именем стиля. Либо измените его на имя машины, либо удалите текущее и создайте заново с нужным именем.

 0
Author: , 2015-08-06 15:19:59