Pytanie pierwsze:
Aby w ogóle zabrać się za obróbkę grafiki w PHP, najpierw muszę ją (tę grafikę) mieć w postaci zasobu Image. Czyli stworzyć ją funkcją imagecreateCOŚTAM. Wszystkie funkcje z tej grupy, na jakie się natknąłem, tworzą albo pusty obraz, albo tworzą go na podstawie pliku.
Tymczasem ja nie mam pliku z obrazem - mam jedynie zawartość tego pliku, w postaci stringu (obraz jest pobierany z BD). Mogę co prawda stworzyć sobie plik tymczasowy, zapisać ten string na dysku, a potem go otworzyć - ale... takie średnio mądre mi się to wydaje. Czy jest sposób na zaczytanie obrazu w takiej postaci?
Pytanie drugie:
Mam na serwerze plik .php (nazwijmy go foo1.php), który (po długich i ciężkich kombinacjach) generuje mi obraz i wysyła do przeglądarki (razem z nagłówkiem, że niby jest JPEG). Wygląda to w końcu tak, że wywołując adres w stylu
http://adres-serwera.pl/foo1.php?parametr=x
przeglądarka jest przekonana, że dany plik jest jpegiem. I dobrze.
Teraz - w pliku foo2.php, chciałbym dalej obrabiać obraz generowany przez foo1.php. Konkretnie - chcę wygenerować jego miniaturkę.
Funkcja imagecreatefromjpeg() pozwala mi podać albo adres do pliku .jpg albo... URL. Czyli w pliku foo2.php mam konstrukcję:
$image = imagecreatefromjpeg("http://adres-serwera.pl/foo1.php?parametr=x");
Bo ten adres, wbrew wszelkiej logice, zachowuje się jak prawdziwy jpeg. I działa to.
Załóżmy, że obraz wygenerowany przez plik foo1.php będzie miał 100kb, a jego miniaturka wygenerowana przez foo2.php będzie miała 10kb.
Pytanie brzmi:
Jaki transfer zostanie mi naliczony, gdy użytkownik wywoła plik foo2.php?
a. 10kb - bo ostatecznie, użytkownik otrzyma tyle danych
b. 110kb - 100kb za plik foo1.php (który przecież został uruchomiony, wygenerował tyle danych i je wysłał)+ 10kb za plik foo2.php ?
Jest to o tyle istotne, że całe to generowanie miniaturek robię tylko po to, żeby zaoszczędzić na transferze :).
Pytanie trzecie:
Jak już wcześniej pisałem, działa mi konstrukcja:
imagecreatefromjpeg("http://adres-serwera.pl/foo1.php?parametr=x") //OK
Nie działa jednak:
imagecreatefromjpeg("foo1.php?parametr=x") // otrzymuję komunikat, że nie ma takiego pliku
Co jest nawet logiczne, bo plik nie może się przecież nazywać foo1.php?parametr=x. Mimo wszystko jednak chciałbym użyć w tym miejscu adresów "lokalnych". Da się?
Pytanie czwarte:
Czy mogę coś zrobić, aby adres takiego zdjęcia bardziej przypominał adres zdjęcia?
Jeżeli nie wyraziłem się dość jasno - na chwilę obecną zdjęcie ma adres:
http://adres-serwera.pl/foo1.php?numer=15
Jest to plik PHP dynamicznie generujący obraz
Chciałbym, aby ten adres wyglądał na przykład tak:
http://adres-serwera.pl/foo1numer15.jpg
I - rzecz jasna - aby wciąż NIE był to plik .jpg, tylko dynamicznie wywoływany skrypt PHP...