image_style_url nie tworzy zdjęć [zamknięty]


11

Korzystam z image_style_url, aby uzyskać miniaturę zdjęcia dodanego przez interfejs administratora.

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

Interfejs API stwierdza, że ​​obraz zostanie utworzony, gdy zostanie zażądany adres URL. Jednak podczas odwiedzania strony obraz nie jest wyświetlany (404). Adres URL zwrócony z funkcji wydaje się być dobrze sformułowany, ale plik nie został utworzony.

Folder „foo-thumb” znajduje się w publicznym folderze danych, a uprawnienia do plików powinny być OK. Próbowałem opróżnić pamięć podręczną obrazu (drupal image-flush foo-thumb), ale nadal nie ma wyników.

Jakieś pomysły?

Odpowiedzi:


22

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

Ponadto każdy kod, który programowo generuje łącze do pochodnej obrazu bez użycia standardowej funkcji API image_style_url (), nie będzie już działał poprawnie, jeśli obraz nie istnieje jeszcze w systemie plików, ponieważ niezbędny token nie będzie obecny w URL.

Zamiast tego możesz zrobić coś takiego;

$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
Czy nie ma końca? tj .: if ($ success) {$ new_image_url = file_create_url ($ pochodna_uri); }
stefgosselin

3
Trochę aktualizacji dla image_style_create_derivativetej $stylezmiennej powinna być tablica$style = image_style_load('my_style');
Victor Lazov

Mam edytowany odpowiedź do przekazania $stylechoć image_style_load()przed przekazaniem do image_style_create_derivative()jak na docs .
Felix Eve

Wszystko działało w tym, z wyjątkiem tego file_create_url ($ pochodna_uri); nie działało dla mnie. To, co zadziałało, polegało na zastąpieniu tego (w ostatnim wierszu) image_style_url ($ style, $ image_uri);
Mark

Ta metoda file_create_url nie stosuje stylu obrazu. Znalazłem rozwiązanie, które stosuje inny styl obrazu. Naprawdę dziwne.
Henry

7

Częstym błędem jest to, że identyfikatory URI nie są poprawnie sformatowane. Sprawdź, czy parametr URI ma prefiks public://.

Zła praktyka

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

To generuje adres URL do stylizowanego obrazu (z tokenem graficznym), ale nie generuje stylizowanego obrazu, jeśli nie został wcześniej wygenerowany.


Dobra praktyka

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

Powoduje to wyświetlenie stylu adresu URL, takiego jak powyżej, i generuje stylizowany obraz, jeśli nie istnieje.


1

Ścieżka publicznego systemu plików była nieprawidłowa.


1

Inną opcją jest użycie funkcji motywu.

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

Zamiast zwracać adres URL, zwraca html dla img.


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

tutaj możesz użyć adresu URL do utworzenia HTML


0

Upewnij się, że masz foo-thumbstyl, możesz to sprawdzić na admin/config/media/image-styles.

Pierwszymi parametrami image_style_url jest nazwa stylu , a nie nazwa folderu .


Styl istnieje, nazwa folderu jest taka sama jak nazwa stylu w moim przypadku.
Bart

Jeśli wystąpił błąd 404, oznacza to, że menu nie istnieje. Myślę, że wszystkie twoje style obrazu mają ten problem. Czy możesz wyjaśnić więcej o Tobie Wersja Drupal i informacje: - Z jakiego serwera korzystasz? - Czy ustawienie czystego adresu URL jest prawidłowe?
Śpiewał Le Thanh

Nie wiem, czy menu nie istnieje, ale plik na pewno nie istnieje. Zwrócony adres URL wydaje się odpowiedni, ale jeśli sprawdzę mój folder na serwerze, obrazu tam nie ma. Folder stworzony przez Drupala („foo-thumb”) już tam jest. Uruchamianie Apache 2.2 z czystymi adresami URL i wszystko działa dobrze.
Bart

Widzę, że link do generowania obrazu nie został znaleziony. Czy możesz sprawdzić plik .htaccess, aby sprawdzić linię ErrorDocument 404 /index.php, czy korzystasz z Drupala na swojej domenie? Inną próbą jest instalacja pakietu narzędzi imagemagick, ale widzę, że twój problem nie jest związany z renderowaniem obrazu php.
Śpiewał Le Thanh

0

Jeśli otrzymujesz 404 podczas próby wyświetlenia obrazu, istnieje możliwość, że nazwa stylu obrazu jest nieprawidłowa. W moim przypadku nazwa stylu wyświetlana w Stylach obrazów nie była nazwą komputera nazwy stylu. Po najechaniu kursorem na styl adres URL wyświetli nazwę komputera o nazwie stylu. Zmień go na nazwę komputera lub usuń bieżącą i utwórz ponownie z potrzebną nazwą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.