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' อยู่ในโฟลเดอร์ data สาธารณะและการอนุญาตให้ใช้ไฟล์ควรเป็น OK ฉันพยายามล้างแคชของภาพ (drupal image-flush foo-thumb) แต่ก็ยังไม่มีผลลัพธ์

ความคิดใด ๆ

คำตอบ:


22

จาก: https://drupal.org/drupal-7.20-release-notes

นอกจากนี้โค้ดใด ๆ ที่สร้างลิงก์ไปยังอนุพันธ์ภาพโดยทางโปรแกรมโดยไม่ต้องใช้ฟังก์ชั่น image_style_url () API มาตรฐานจะทำงานไม่ถูกต้องอีกต่อไปหากภาพไม่มีอยู่ในระบบไฟล์เนื่องจากโทเค็นที่จำเป็นจะไม่ปรากฏใน 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
ท้ายที่สุดแล้วจะไม่มีอะไรเหรอ? ie: if ($ success) {$ new_image_url = file_create_url ($ Deriv_uri); }
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 ($ Deriv_uri); ไม่ได้ผลสำหรับฉัน สิ่งที่ได้ผลคือการแทนที่ (ในบรรทัดสุดท้าย) ด้วย image_style_url ($ style, $ image_uri);
ทำเครื่องหมาย

วิธีการของ file_create_url นี้ไม่ได้ใช้รูปแบบภาพ ฉันพบวิธีแก้ไขปัญหาที่ใช้รูปแบบภาพอื่น แปลกจริงๆ
เฮนรี่

7

หนึ่งในข้อผิดพลาดทั่วไปคือรูปแบบ URIs ไม่ถูกต้อง ตรวจสอบว่าพารามิเตอร์ 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

อีกตัวเลือกหนึ่งคือการใช้ฟังก์ชั่นชุดรูปแบบ

$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 เมื่อพยายามดูภาพความเป็นไปได้คือชื่อสไตล์ภาพไม่ถูกต้อง ในกรณีของฉันชื่อสไตล์ที่ปรากฏใน Image Styles ไม่ใช่ชื่อเครื่องของชื่อสไตล์ เมื่อโฮเวอร์เหนือสไตล์ URL จะแสดงชื่อเครื่องของชื่อสไตล์ เปลี่ยนเป็นชื่อเครื่องหรือลบปัจจุบันและสร้างใหม่ด้วยชื่อที่ต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.