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 ($ derivative_uri); }
stefgosselin

3
Невелике оновлення для image_style_create_derivativeв $styleзмінної повинен бути масив$style = image_style_load('my_style');
Віктор Lazov

Я відредагував відповідь на передачу, $styleхоча image_style_load()перед тим, як перейти до image_style_create_derivative()згідно з документами .
Фелікс Єва

У цьому все працювало, крім файлу_create_url ($ derivative_uri); не працював для мене. Що працювало, замінюючи це (в останньому рядку) на 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-адресу, як описано вище, і генерує стильоване зображення, якщо такої немає.


1

Шлях публічної файлової системи був неправильним.


1

Інший варіант - використання функції теми.

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

Замість повернення URL він поверне HTML для img.


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-адреси правильна?
Sang Le Thanh

Я не знаю, якщо меню не існує, але файл точно не працює. Повернута URL-адреса здається правильною, але якщо я перевіряю свою папку на сервері, зображення не існує. Хоча папка, створена Drupal ("foo-thumb"), є. Запуск Apache 2.2 з чистими URL-адресами, і все, здається, працює нормально.
Барт

Я можу бачити, що посилання для створення зображення не знайдено. Чи можете ви перевірити файл .htaccess, щоб перевірити рядок ErrorDocument 404 /index.php, чи використовується у вас Drupal поверх вашого домену? Інша спроба - встановити інструментарій imagemagick, але я бачу, що ваша проблема не проблема в зображенні PHP.
Sang Le Thanh

0

Якщо ви отримуєте номер 404 при спробі перегляду зображення, існує ймовірність того, що назва стилю зображення невірна. У моєму випадку назва стилю, що з’явилася у стилях зображення, не була машинною назвою імені стилю. При наведенні курсору на стиль URL-адреса відображатиме назву машини назви стилю. Або змініть його на ім’я машини або видаліть поточний і відтворіть потрібне ім’я.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.