smarcz
28.02.2007, 11:58:29
Czy ktoś może wie jakim algorytmem posługuje się biblioteka GD dla przetwarzania obrazka JPG, GIF, PNG itd...? Albo ile bajtów pamięci na pixel przypada w trakcie wczytywania do np: ImageCreateJPG lub ImageCreatePNG, ImageCreateGIF. Czy ma tu głównie znaczenie rozdzielczość czy wielkość pliku w [kb]?
kubarek
28.02.2007, 20:40:53
Cytat
Albo ile bajtów pamięci na pixel przypada
IMHO, to zależy nie od rozdzielczości, czy wielkości pliku, tylko od typu pliku ( np. GIF może mieć maks. 256 kolorów, czyli na jeden piksel przypada jeden bajt, etc. )
o rozmiarze plików decyduje też nagłówek pliku
smarcz
28.02.2007, 22:46:46
Tak, masz rację z tym co napisałeś. Moje pytanie nie było zbyt precyzyjne. Wyjaśniam - temat jest także związany z optymalizacją kodu tak aby nie przekroczyć dozwolonego bufora na operację po stronie serwera.
Załóżmy, że mamy obrazek który wysyłamy poprzez formularz za pomocą $_FILES, który waży 600 Kb i ma rozdzielczość 1200x1600 pixeli. Skrypt PHP zawarty na stronie ma za zadanie odczytac przesyłany plik i zmienić mu rozdzielczość do określonej (x).
Serwer ma ustawiony bufor na operację wynoszący 20 MB - nie mylić z maksymalną wielkością pliku. W trakcie obrubki naszego zdjęcia bufor stopniowo zostaje zapełniany. Jeżeli przekroczymy dozwoloną wartość 20 MB serwer zwraca nam fatal error i przerywa działanie skryptu w dosyć brutalny sposób.
Rodzi się pytanie - jak określić ile będziemy używać pamięci do przetworzenia obrazka w trakcie wykonywania operacji ImageCreateJPG, GIF, PNG ale przed jej wykonaniem, tak aby serwer nie zdążył przekazać nam informacji o fatal error i aby wcześniej zakończyć wykonywanie skryptu lub by przekierować użytkownika do ponownego dołączenia zdjęcia o mniejszych wymaganiach dla serwera.
Jest to dosyć poważny problem i nie wiem dlaczego dotąd jeszcze nie poruszany przez forumowiczów. Większość serwerów komercyjnych ma dosyć niewielkie BUFORY dla wykonywania operacji, a przesyłane zdjęcia mają coraz większą rozdzielczość. Większość aparatów cyfrowych wykonuje zdjęcia o rozdzielczości 1200x1600 standard.
Tak więc myślę, że problem będzie się pojawiał. Ja walcze z tym zagadnieniem i czekam na info.
Być może jest inny prostrzy sposób na zmianę rozdzielczości zdjęcia przesyłanego przez formularz tak, aby nie potrzebował aż tyle pamięci na operację?