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

11

Я использую 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-адрес, возвращаемый функцией, кажется правильно сформированным, но файл не был создан.

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

Есть идеи?

Барт
источник

Ответы:

22

От: 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);
Матье Гадрат
источник
2
Не должно ли быть в конце? т.е.: if ($ success) {$ new_image_url = file_create_url ($ производная_ури); }
stefgosselin
3
Небольшое обновление для image_style_create_derivativeв $styleпеременной должен быть массив$style = image_style_load('my_style');
Виктор Lazov
Я отредактировал ответ, чтобы пройти, $styleхотя, image_style_load()прежде чем переходить image_style_create_derivative()в соответствии с документами .
Феликс Ив
Все работало в этом, кроме этого file_create_url ($ производная_ури); не работал для меня. Что сработало, так это заменив (в последней строке) на image_style_url ($ style, $ image_uri);
Марк
Этот метод file_create_url не применяет стиль изображения. Я нашел решение, которое применяет другой стиль изображения. Действительно странно
Генри
7

Одна распространенная ошибка заключается в том, что 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, как указано выше, и генерирует стилизованное изображение, если его не существует.

timofey.com
источник
1

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

Барт
источник
1

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

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

Вместо того, чтобы возвращать URL, он вернет HTML для IMG.

rparker
источник
1
$fid = file_load($field_yuorfield_fid);          
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');

здесь можно использовать URL для создания HTML

Бэзил
источник
0

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

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

Санг Ле Тхань
источник
Стиль существует, имя папки совпадает с именем стиля в моем случае.
Барт
Если вы получили ошибку 404, это означает, что меню не существует. Я думаю, что все ваши стили изображений имеют эту проблему. Можете ли вы подробнее рассказать о своей версии и информации о Drupal: - Какой веб-сервер вы используете? - Правильно ли настроен чистый URL-адрес?
Санг Ле Тхан,
Я не знаю, если меню не существует, но файл, конечно, нет. Возвращенный URL-адрес кажется правильным, но если я проверю свою папку на сервере, то изображения там не будет. Папка, созданная Drupal ('foo-thumb'), там есть. Запуск Apache 2.2 с чистыми URL-адресами и все работает нормально.
Барт
Я вижу, что ваше изображение создать ссылку не было найдено. Можете ли вы проверить файл .htaccess, чтобы проверить ErrorDocument 404 /index.php, работает ли Drupal поверх вашего домена? Другая попытка - установить инструментарий imagemagick, но я вижу, что ваша проблема не является проблемой при рендеринге изображений php.
Санг Ле Тхан
0

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


источник