image_style_url non crea immagini [chiuso]


11

Sto usando image_style_url per ottenere una miniatura di un'immagine che ho aggiunto tramite l'interfaccia di amministratore.

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

L'API afferma che l'immagine verrà creata quando viene richiesto l'URL. Tuttavia, quando si visita la pagina l'immagine non viene visualizzata (404). L'URL restituito dalla funzione sembra essere ben formato, ma il file non è stato creato.

La cartella "foo-thumb" si trova nella cartella dei dati pubblici e le autorizzazioni dei file dovrebbero essere OK. Ho provato a svuotare la cache delle immagini (drupal image-flush foo-thumb) ma ancora nessun risultato.

Qualche idea?

Risposte:


22

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

Inoltre, qualsiasi codice che genera a livello di codice un collegamento a una derivata dell'immagine senza utilizzare la funzione API image_style_url () standard non funzionerà più correttamente se l'immagine non esiste già nel file system, poiché il token necessario non sarà presente nel URL.

Invece puoi fare qualcosa del genere;

$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
Non dovrebbe esserci un se alla fine? ovvero: if ($ success) {$ new_image_url = file_create_url ($ derivative_uri); }
stefgosselin,

3
Un piccolo aggiornamento per la image_style_create_derivativela $stylevariabile deve essere matrice$style = image_style_load('my_style');
Victor Lazov

Ho modificato la risposta per passare $stylecomunque image_style_load()prima di passare a image_style_create_derivative()come da documenti .
Felix Eve,

Tutto ha funzionato in questo tranne che file_create_url ($ derivative_uri); Non ha funzionato per me. Ciò che ha funzionato è stato quello di sostituirlo (sull'ultima riga) con image_style_url ($ style, $ image_uri);
Segna il

Questo metodo di file_create_url non applica lo stile dell'immagine. Ho trovato una soluzione che applica un altro stile di immagine. Veramente strano.
Henry,

7

Un errore comune è che gli URI non sono formattati correttamente. Verifica che il tuo parametro URI sia preceduto da public://.

Cattiva pratica

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

Ciò genera un URL all'immagine con stile (con token immagine), ma non genera un'immagine con stile quando non è stata precedentemente generata.


Buona pratica

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

Ciò genera un URL con stile, come sopra, e genera un'immagine con stile se non esiste.


1

Il percorso del file system pubblico era errato.


1

Un'altra opzione è quella di utilizzare la funzione tema.

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

Invece di restituire l'URL restituirà l'html per img.


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

qui puoi usare url per creare html


0

Assicurati di avere foo-thumbstile, puoi controllare a admin/config/media/image-styles.

I primi parametri di image_style_url sono un nome di stile , non un nome di cartella .


Lo stile esiste, il nome della cartella è lo stesso del nome dello stile nel mio caso.
Bart,

Se viene visualizzato l'errore 404, significa che il menu non esiste. Penso che tutti i tuoi stili di immagine abbiano questo problema. Puoi spiegarci di più sulla tua versione di Drupal e informazioni: - Quale server web stai usando? - L'impostazione dell'URL pulito è corretta?
Sang Le Thanh,

Non so se il menu non esiste, ma il file sicuramente no. L'URL restituito sembra corretto, ma se controllo la mia cartella sul server l'immagine non è lì. La cartella creata da Drupal ('foo-thumb') è lì però. Esecuzione di Apache 2.2 con URL puliti e tutto sembra funzionare correttamente.
Bart,

Vedo che il link per generare l'immagine non è stato trovato. Puoi controllare il file .htaccess per controllare la linea ErrorDocument 404 /index.php, stai eseguendo Drupal sul tuo dominio? Un altro tentativo è installare imagemagick toolkit ma vedo che il tuo problema non è un problema con il rendering dell'immagine di php.
Sang Le Thanh,

0

Se si riceve un 404 quando si tenta di visualizzare l'immagine, è possibile che il nome dello stile dell'immagine non sia corretto. Nel mio caso, il nome dello stile mostrato in Stili immagine non era il nome macchina del nome dello stile. Quando si passa con il mouse sopra lo stile, l'URL visualizzerà il nome della macchina del nome dello stile. O cambiarlo nel nome della macchina o eliminare quello corrente e ricrearlo con il nome necessario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.