image_style_url không tạo hình ảnh [đã đóng]


11

Tôi đang sử dụng image_style_url để lấy hình thu nhỏ của ảnh tôi đã thêm thông qua giao diện quản trị viên.

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

API nói rằng hình ảnh sẽ được tạo khi URL được yêu cầu. Tuy nhiên, khi truy cập trang, hình ảnh không được hiển thị (404). URL được trả về từ chức năng dường như được hình thành tốt, nhưng tệp chưa được tạo.

Thư mục 'foo-thumb' nằm trong thư mục dữ liệu công khai và các quyền của tệp sẽ ổn. Tôi đã thử xóa bộ đệm hình ảnh (drupal image-flush foo-thumb) nhưng vẫn không có kết quả.

Có ý kiến ​​gì không?

Câu trả lời:


22

Từ: https://drupal.org/drupal-7.20-release-notes

Ngoài ra, bất kỳ mã nào lập trình tạo liên kết đến đạo hàm hình ảnh mà không sử dụng hàm API image_style_url () tiêu chuẩn sẽ không còn hoạt động chính xác nếu hình ảnh không tồn tại trong hệ thống tệp, vì mã thông báo cần thiết sẽ không xuất hiện trong URL.

Thay vào đó bạn có thể làm một cái gì đó như thế này;

$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
Shoud không có nếu cuối cùng? tức là: if ($ thành công) {$ new_image_url = file_create_url ($ derivative_uri); }
stefgosselin

3
Một bản cập nhật nhỏ cho image_style_create_derivativecác $stylebiến nên mảng$style = image_style_load('my_style');
Victor Lazov

Tôi đã chỉnh sửa câu trả lời để vượt qua $stylemặc dù image_style_load()trước khi chuyển đến image_style_create_derivative()theo tài liệu .
Đêm giao thừa

Mọi thứ đều hoạt động trong trường hợp này ngoại trừ file_create_url ($ derivative_uri); đã không làm việc cho tôi. Những gì đã làm là thay thế điều đó (trên dòng cuối cùng) bằng image_style_url ($ style, $ image_uri);
Đánh dấu

Phương thức này của file_create_url không áp dụng kiểu ảnh. Tôi tìm thấy một giải pháp áp dụng phong cách hình ảnh khác. Rất lạ.
Henry

7

Một lỗi phổ biến là URI không được định dạng đúng. Kiểm tra xem tham số URI của bạn có tiền tố hay không public://.

Thực hành xấu

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

Điều này xuất ra một URL tới hình ảnh được tạo kiểu (có mã thông báo hình ảnh), nhưng không tạo ra một hình ảnh được tạo kiểu khi nó chưa được tạo trước đó.


Thực hành tốt

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

Điều này xuất ra một URL được tạo kiểu, như ở trên và tạo ra một hình ảnh theo kiểu nếu không tồn tại.


1

Đường dẫn hệ thống tập tin công cộng đã sai.


1

Một lựa chọn khác là sử dụng chức năng chủ đề.

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

Thay vì trả lại URL, nó sẽ trả về html cho img.


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

Ở đây có thể sử dụng url để tạo html


0

Hãy chắc chắn rằng bạn có foo-thumbphong cách, bạn có thể kiểm tra tại admin/config/media/image-styles.

Các tham số đầu tiên của image_style_urltên kiểu , không phải tên thư mục .


Kiểu tồn tại, tên thư mục giống với tên kiểu trong trường hợp của tôi.
Bart

Nếu bạn gặp lỗi 404, điều đó có nghĩa là menu không tồn tại. Tôi nghĩ rằng tất cả các phong cách hình ảnh của bạn có vấn đề này. Bạn có thể giải thích thêm về bạn phiên bản và thông tin Drupal: - Bạn đang sử dụng máy chủ web nào? - Cài đặt url sạch có đúng không?
Sang Lê Thanh

Tôi không biết nếu menu không tồn tại, nhưng tập tin chắc chắn không. URL được trả về có vẻ đúng, nhưng nếu tôi kiểm tra thư mục của mình trên máy chủ thì hình ảnh không có ở đó. Mặc dù vậy, thư mục được tạo bởi Drupal ('foo-thumb'). Chạy Apache 2.2 với các URL sạch và tất cả dường như đang hoạt động tốt.
Bart

Tôi có thể thấy liên kết tạo hình ảnh của bạn không được tìm thấy. Bạn có thể kiểm tra tệp .htaccess để kiểm tra dòng không ErrorDocument 404 /index.php, bạn có đang chạy Drupal trên đầu tên miền của mình không? Thử khác là cài đặt bộ công cụ fantemagick nhưng tôi thấy vấn đề của bạn không phải là vấn đề bởi kết xuất hình ảnh của php.
Sang Lê Thanh

0

Nếu bạn nhận được 404 khi cố gắng xem hình ảnh, có khả năng là tên kiểu hình ảnh không chính xác. Trong trường hợp của tôi, tên kiểu xuất hiện trong Kiểu ảnh không phải là tên máy của tên kiểu. Khi di chuột qua kiểu, url sẽ hiển thị tên máy của tên kiểu. Thay đổi nó thành tên máy hoặc xóa hiện tại và tạo lại với tên cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.