[PHP] Manipulacja grafiką

0

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...

0

Ad1)
http://pl2.php.net/manual/en/function.imagecreatefromstring.php

Ad2) User 10k bo plik ladowany jest po stronie serwera w skrypcie php, jednak lepiej zapisac miniaturki (dodatkowe pole w bazie)

Ad3) Aby dalo odczytac plik jako jpeg musi byc przemielony przez serwer, wiec raczej nie (adres lokalny moze jako localhost)

Ad4) mod_rewrite

0
reichel napisał(a)

Ad1)
http://pl2.php.net/manual/en/function.imagecreatefromstring.php

Ad2) User 10k bo plik ladowany jest po stronie serwera w skrypcie php,

Jesteś tego pewien?

jednak lepiej zapisac miniaturki (dodatkowe pole w bazie)

Mam limit na miejsce na dysku i limit na transfer. Limitu na moc obliczeniową nie mam, więc to nie mój problem ;).

Ad3) Aby dalo odczytac plik jako jpeg musi byc przemielony przez serwer, wiec raczej nie (adres lokalny moze jako localhost)

Ad4) mod_rewrite

Doczytam.

Dziękuję za odpowiedzi!

0
yakhub napisał(a)
reichel napisał(a)

Ad1)
http://pl2.php.net/manual/en/function.imagecreatefromstring.php

Ad2) User 10k bo plik ladowany jest po stronie serwera w skrypcie php,

Jesteś tego pewien?

no pomyśl ...
no chyba że będziesz pobierał w ten sposób:
imagecreatefromjpeg("http://adres-serwera.pl/foo1.php?parametr=x") //OK
wtedy to logiczne że będzie liczyło transfer

0

pytanie bylo o transfer dla usera. W podanym przykladzie bedzie

transfer dla pobierajacego 10k
transfer dla strony(serwera) 110k

0
reichel napisał(a)

pytanie bylo o transfer dla usera. W podanym przykladzie bedzie

transfer dla pobierajacego 10k
transfer dla strony(serwera) 110k

nie, pytanie było jaki transfer zostanie mu naliczony
odpowiedź: 110k
a kto chce oszczędzać transferu użytkownikowi ? :D każdy dba o siebie :P

solution: zamiast dawać adres do pliku na tym serwerze w formacie http://adres.pl/obrazek.php?dawaj=costam, to przerób skrypt obrazek.php tak aby zawierał funkcję przyjmującą parametr (tu "dawaj") a zwracającą ten obrazek
tak to sie robi na argentynie !

1 użytkowników online, w tym zalogowanych: 0, gości: 1