image_style_url tidak membuat gambar [ditutup]

11

Saya menggunakan image_style_url untuk mendapatkan thumbnail gambar yang saya tambahkan melalui antarmuka administrator.

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

API menyatakan bahwa gambar akan dibuat ketika URL diminta. Namun, ketika mengunjungi halaman gambar tidak ditampilkan (404). URL yang dikembalikan dari fungsi tampaknya terbentuk dengan baik, tetapi file belum dibuat.

Folder 'foo-thumb' ada di folder data publik dan izin file harus OK. Saya mencoba flushing cache gambar (drupal image-flush foo-thumb) tetapi masih belum ada hasilnya.

Ada ide?

Bart
sumber

Jawaban:

22

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

Selain itu, kode apa pun yang secara terprogram menghasilkan tautan ke turunan gambar tanpa menggunakan fungsi image_style_url () API standar tidak akan lagi berfungsi dengan benar jika gambar belum ada dalam sistem file, karena token yang diperlukan tidak akan ada dalam URL.

Sebaliknya Anda bisa melakukan sesuatu seperti ini;

$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
sumber
2
Haruskah tidak ada jika pada akhirnya? yaitu: if ($ success) {$ new_image_url = file_create_url ($ derivative_uri); }
stefgosselin
3
Pembaruan sedikit untuk image_style_create_derivativepara $stylevariabel harus Array$style = image_style_load('my_style');
Victor Lazov
Saya telah mengedit jawaban untuk lulus $stylemeskipun image_style_load()sebelum diteruskan ke image_style_create_derivative()sesuai docs .
Felix Eve
Semuanya berfungsi dalam hal ini kecuali file_create_url itu ($ derivative_uri); tidak bekerja untuk saya. Apa yang berhasil menggantikan itu (pada baris terakhir) dengan image_style_url ($ style, $ image_uri);
Tandai
Metode file_create_url ini tidak berlaku gaya gambar. Saya menemukan solusi yang menerapkan gaya gambar lain. Sangat aneh.
Henry
7

Satu kesalahan umum adalah bahwa URI tidak diformat dengan benar. Pastikan parameter URI Anda diawali dengan public://.

Praktek yang buruk

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

Ini menghasilkan URL ke gambar gaya (dengan token gambar), tetapi tidak menghasilkan gambar gaya ketika belum pernah dibuat sebelumnya.


Praktek yang Baik

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

Ini menghasilkan URL gaya, seperti di atas, dan menghasilkan gambar gaya jika tidak ada.

timofey.com
sumber
1

Jalur sistem file publik salah.

Bart
sumber
1

Pilihan lain adalah menggunakan fungsi tema.

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

Alih-alih mengembalikan URL, URL akan mengembalikan html untuk img.

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

di sini bisa menggunakan url untuk membuat html

Kemangi
sumber
0

Pastikan Anda memiliki foo-thumbgaya, Anda dapat memeriksa di admin/config/media/image-styles.

Parameter pertama image_style_url adalah nama gaya , bukan nama folder .

Sang Le Thanh
sumber
Gaya ada, nama folder sama dengan nama gaya dalam kasus saya.
Bart
Jika Anda mendapatkan kesalahan 404, itu berarti menu tidak ada. Saya pikir semua gaya gambar Anda memiliki masalah ini. Bisakah Anda menjelaskan lebih lanjut tentang versi dan informasi Drupal Anda: - Server web apa yang Anda gunakan? - Apakah pengaturan url bersih sudah benar?
Sang Le Thanh
Saya tidak tahu apakah menu itu tidak ada, tetapi file itu pasti tidak. URL yang dikembalikan sepertinya benar, tetapi jika saya memeriksa folder saya di server gambar tidak ada. Folder yang dibuat oleh Drupal ('foo-thumb') ada di sana. Menjalankan Apache 2.2 dengan URL bersih dan semuanya tampaknya berfungsi dengan baik.
Bart
Saya dapat melihat tautan penghasil gambar Anda tidak ditemukan. Bisakah Anda memeriksa file .htaccess untuk memeriksa baris ErrorDocument 404 /index.php, apakah Anda menjalankan Drupal di atas domain Anda? Coba lainnya adalah menginstal imagemagick toolkit tetapi saya melihat masalah Anda bukan masalah dengan render gambar php.
Sang Le Thanh
0

Jika Anda menerima 404 ketika mencoba untuk melihat gambar, kemungkinan adalah bahwa nama gaya gambar tidak benar. Dalam kasus saya, nama gaya yang muncul di Gaya Gambar bukan nama mesin dari nama gaya. Saat mengarahkan kursor ke gaya, url akan menampilkan nama mesin dari nama gaya. Ubah ke nama mesin atau hapus arus dan buat ulang dengan nama yang dibutuhkan.


sumber