Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Zmiana wielkości plików graficznych - GD2 imagecopyresampled
Forum PHP.pl > Forum > Przedszkole
adif
Witam szanownych kolegów.

Czy spotkaliście się może z problemem (a sądzę że tak) podczas przesyłania zdjęć JPG i tworzenia miniaturek, aby zdjęcie o określonych rozmiarach (szerokości) np. ok 4500 px lub większe powodowało przerwanie skryptu i błąd.

Oto fragment kodu, który obrabia przesyłane zdjęcia:
  1. $foto = imagecreatetruecolor($szer_big, $wys_big);
  2. $source = imagecreatefromjpeg($lokalizacja);
  3. imagecopyresampled($big, $source, 0, 0, 0, 0, $szer_big, $wys_big, $wymiar[0], $wymiar[1]);
  4. imagejpeg($big, $lokalizacja, 90)


W czym rzecz.

Testowałem przesyłanie fotek o różnych wagach (1, 2, 5, a nawet 8MB) i ponieważ tak mam serwer ustawiony że mogę przesyłać dość duże pliki to i różne rozdzielczości mają prawo się pojawić. I tutaj zaczynają się schody. Pliki o szerokości do ok. 4200px niezależnie od wagi przesyłają się ładnie, miniaturki tworzone są poprawnie. Dopiero przy próbie wysłania zdjęcia powyżej tych rozmiarów skrypt się wysypuje i co najlepsze nawet nie dostaję żadnego komunikatu błędu a jedynie białe tło przeglądarki.

W czym rzecz? Czy GD2 ma jakieś ograniczenia co do szerokości obrabianych plików czy może moim skryptom czegoś brakuje?

Jeśli problem się już pojawił na forum, a mi nie udało się znaleźć konkretnego postu proszę odeślijcie mnie do niego.

Z góry dzięki
kalmaceta
Cytat
PHP has a maximum per-request memory limit configurable in php.ini
tylko mi do głowy przychodzi
Mephistofeles
Zwiększ parametr memory_limit w php.ini.
thek
Tylko i wyłacznie memory limit. Duże zdjęcia są bowiem przetwarzane podczas createimagefrom* do formy własnego formatu biblioteki GD2, która to zawiera nieskompresowane RGBA + własne informacje. Same dane o kolorach to:
4B x 4500 x 3375 = 60750000B ~= 59326,17kB ~= 57,94MB
A gdzie jeszcze pamięć na resztę? Stąd posypie Ci przetwarzanie dużych obrazów wiele skryptów jeśli nie jesteś na to gotowy w konfiguracji.
cojack
Bo takiż rzeczy się nie robi w php, piszesz skrypt w bashu, i go wykonujesz z php, wykona się wiele wiele szybciej, ostatnio sprawdzałem to na imagemagick. Generowałem miniaturki pdfów.
adif
dziękuję za szybkie odpowiedzi. W poniedziałek będę testował, dam znać co i jak. pozdrawiam
Crozin
@cojack: Ale zdajesz sobie sprawę, że GD to program napisany w C (strona projektu), a rozszerzenie gd to jedynie interfejs? I narzut spowodowany tym interfejsem jest pewnie porównywalny do narzutu innych interfejsów jak chociażby tego do wywoływania poleceń w bashu? Innymi słowy: głupoty wypisujesz.
cojack
Crozin:

Cytat
ostatnio sprawdzałem to na imagemagick.


nie wiem o czym Ty do mnie piszesz.
adif
Witajcie.

Sprawdziłem na serwerze wartość memory_limit = wynosi ona 128M.

Niestety nie można zwiększyć już tej wartości (zasady bezpieczeństwa - tak tłumaczą się administratorzy), zatem pozostaje chyba tylko sprawdzać szerokość przesyłanego zdjęcia i blokować wykonywanie skryptu powyżej jakiejś wartości (w moim przypadku ok. 4200px).

Chyba że macie jakiejś jeszcze inne pomysły.

Dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.