image_style_url no crea imágenes [cerrado]

11

Estoy usando image_style_url para obtener una miniatura de una imagen que agregué a través de la interfaz de administrador.

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

La API establece que la imagen se creará cuando se solicite la URL. Sin embargo, al visitar la página, la imagen no se muestra (404). La URL devuelta por la función parece estar bien formada, pero el archivo no se ha creado.

La carpeta 'foo-thumb' está en la carpeta de datos públicos y los permisos del archivo deberían estar bien. Traté de vaciar el caché de imágenes (drupal image-flush foo-thumb) pero aún no hay resultados.

¿Algunas ideas?

Bart
fuente

Respuestas:

22

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

Además, cualquier código que genere mediante programación un enlace a una derivada de imagen sin usar la función estándar API image_style_url () ya no funcionará correctamente si la imagen aún no existe en el sistema de archivos, ya que el token necesario no estará presente en el URL

En cambio, puedes hacer algo como esto;

$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
fuente
2
¿No debería haber un si al final? es decir: if ($ success) {$ new_image_url = file_create_url ($ derivative_uri); }
stefgosselin
3
Una pequeña actualización para el image_style_create_derivativede la $stylevariable debe ser gama$style = image_style_load('my_style');
Victor Lazov
Sin $styleembargo, he editado la respuesta para pasar image_style_load()antes de pasar image_style_create_derivative()según los documentos .
Felix Eve
Todo funcionó en esto excepto que file_create_url ($ derivative_uri); no funciono para mi Lo que funcionó fue sustituir eso (en la última línea) con image_style_url ($ style, $ image_uri);
Mark
Este método de file_create_url no aplica el estilo de imagen. Encontré una solución que aplica otro estilo de imagen. Muy extraño.
Henry
7

Un error común es que los URI no están formateados correctamente. Verifique que su parámetro URI tenga el prefijo public://.

Mala práctica

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

Esto genera una URL a la imagen con estilo (con token de imagen), pero no genera una imagen con estilo cuando no se ha generado previamente.


Buena práctica

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

Esto genera una URL con estilo, como la anterior, y genera una imagen con estilo si no existe ninguna.

timofey.com
fuente
1

La ruta del sistema de archivos públicos era incorrecta.

Bart
fuente
1

Otra opción es usar la función de tema.

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

En lugar de devolver la URL, devolverá el html para el img.

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

aquí puede usar url para crear html

Albahaca
fuente
0

Asegúrese de tener foo-thumbestilo, puede consultar en admin/config/media/image-styles.

Los primeros parámetros de image_style_url es un nombre de estilo , no un nombre de carpeta .

Sang Le Thanh
fuente
El estilo existe, el nombre de la carpeta es el mismo que el nombre del estilo en mi caso.
Bart
Si recibió el error 404, eso significa que el menú no existe. Creo que todos sus estilos de imagen tienen este problema. ¿Puede explicar más sobre su versión e información de Drupal: - ¿Qué servidor web está utilizando? - ¿La configuración de URL limpia es correcta?
Sang Le Thanh
No sé si el menú no existe, pero el archivo seguramente no. La URL devuelta parece correcta, pero si reviso mi carpeta en el servidor, la imagen no está allí. Sin embargo, la carpeta creada por Drupal ('foo-thumb') está allí. Ejecutando Apache 2.2 con URL limpias y todo parece estar funcionando bien.
Bart
Puedo ver que no se encontró el enlace para generar su imagen. ¿Puede verificar el archivo .htaccess para verificar la línea? ErrorDocument 404 /index.php¿Está ejecutando Drupal sobre su dominio? Otro intento es instalar el kit de herramientas imagemagick, pero veo que su problema no es problema por el renderizado de imagen de php.
Sang Le Thanh
0

Si recibe un 404 cuando intenta ver la imagen, es posible que el nombre del estilo de la imagen no sea correcto. En mi caso, el nombre del estilo que apareció en Image Styles no era el nombre de la máquina del nombre del estilo. Al pasar el cursor sobre el estilo, la url mostrará el nombre de la máquina del nombre del estilo. Cambie el nombre del equipo o elimine el actual y vuelva a crear con el nombre necesario.


fuente