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?

Bart
źródło

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);
Matthieu Gadrat
źródło
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.

timofey.com
źródło
1

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

Bart
źródło
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.

rparker
źródło
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

Bazylia
źródło
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 .

Śpiewał Le Thanh
źródło
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ą.


źródło