ugrás a tartalomhoz

Kép átméretezése és továbbadása (headerrel?)

fabian.attila · 2013. Ápr. 9. (K), 12.47
Üdvözletem mindenkinek!
Azon töröm a fejem mostanság, hogy hogyan lehet egy PHP fájl meghívásával átméretezni egy képet és továbbadni azt, mintha egy a PHP fájl egy képfájl lenne.

Sokat Googleztam az ügy érdekében, de nem találtam egyszerű megoldást sajnos.

Tehát: Van egy index.html fájlunk, melyben hivatkozunk egy képre:

<img src="kep.php?kep=kep.jpg" />
A PHP programunk beolvassa a GET-tel kapott kép evet, megkeresi a szerveren, módosítja (mondjuk a méretet), majd úgy adja tovább, mintha ő maga lenne egy kép.

PHP.net-en láttam pár megoldási módot, de nekem azok nem működtek sajnos.

Valakinek van egyszerű ötlete erre a problémára?

Előre is köszönöm a válaszokat!
 
1

PHP

janoszen · 2013. Ápr. 9. (K), 13.09
PHP-val kiszolgalni egy kepet alapvetoen nem a jo teljesitmeny titka: baromi lassu lesz. Azt javasolnam, hogy amikor feltoltitek a kepet, akkor meretezzetek at es tegyetek le egy kulon konyvtarba az atmeretezett kepet.
2

Lassabb lesz, mintha egyből

fabian.attila · 2013. Ápr. 9. (K), 13.16
Lassabb lesz, mintha egyből könyvtárból hívná meg a képet, ezzel én is tisztában vagyok, csak mondjuk, ha 2000 kép helyezkedik el egy viszonylag pici tárhelyen, akkor a képek "duplikálása" nem a legjobb megoldást jelenti, sajnos...

A program nem lenne többször meghívba egy fájlban, az az egy feldolgozás pedig nem jelent sok veszteségi időt, csak annyit, amennyi a türelmi intervallumba belefér.
3

Idő

Poetro · 2013. Ápr. 9. (K), 13.29
Ahol pici tárhely van, ott szerinted nem lesz probléma a képek legenerálásának idejével? Itt egy elég erőteljes ellentmondást érzek. Tegyük fel, hogy egyszerre 100 látogatód látogat el az oldalra, ekkor ugye egyszerre 100-szor kell legenerálnod a képet. Tegyük fel, hogy egy kép legenerálása 2mp és egyszerre csak egyet tud generálni, mert ennyi számítási kapacitást adtak neked a tárhelyen. Namost ekkor az első felhasználó 2mp múlva kapja meg a képet, a második 4, a harmadik 6... a 100. 200mp alatt.
4

Valóban igazad van, erre nem

fabian.attila · 2013. Ápr. 9. (K), 13.46
Valóban igazad van, erre nem is gondoltam, köszönöm...

Akkor úgy tűnik nem maradt más, minthogy kis képekként elmentsem őket...

(Egyébként az ellentmondás nem valós, mert a szervergépek, amin a tárhely helyezkedik el bikaerősek, és elég durva optikás technikával vannak megcsinálva, csupán annyi az aggasztó, hogy mondjuk 2000 MB nem nyújt nagy teret például egy fotós weboldalnak főleg ha a képeket majdnemhogy duplikáljuk...)

Szerkesztés: az optikai hálózat szerepe mellékes a képek legenerálása folyamán, csupán megemlítettem, hogy a legenerálás után nem 100 mbps-en halad tovább egy UTP-n keresztül (tehát ha a generálás gyorsan zajlik, a továbbítással sem lesz gond).
5

Ahogyan Poetro is irta, nem

vrnagy · 2013. Ápr. 9. (K), 13.56
Ahogyan Poetro is irta, nem feltetlenul kapod meg a teljes szamitasi teljesitmenyt, hiaba eros a gep. Habar tenyleg a teljesitmeny ellen szol, lattam mar olyan megoldast, ahol a php legeneralta a kepet amikor szukseg volt ra (egy olyan hivasnal amit a peldaban irtal), es elmentette egy cache konyvtarba, a kovetkezo keresnel pedig onnan szolgalta ki, igy csak egyszer kell a teljes feldolgozasi idot kivarni.
7

A gyorsítótárazás jó lenne

fabian.attila · 2013. Ápr. 9. (K), 14.06
A gyorsítótárazás jó lenne (ha a szerver a tárhelyen kívül tartaná), én is gondoltam hasonlókra (temp fájlok, satöbbi), csak hát ugyanott vagyok, mintha készítenék egy kisebb képet és azt menteném el...
10

Ez a megoldas maximum akkor

vrnagy · 2013. Ápr. 9. (K), 14.37
Ez a megoldas maximum akkor segit, hogy ha nem minden kepbol kell kis meretu, es nem tudod elore, hogy kell-e, ha tudod akkor feltolteskor is lehet meretezni.
6

Pár dolog

Pepita · 2013. Ápr. 9. (K), 14.02
a szervergépek, amin a tárhely helyezkedik el bikaerősek
Ez igaz, de a te kis tárhelycsomagod / szálad ennek a bikaerőnek csak egy icipici százalékát kapja. Mind RAM, mind proci terén.
2000 MB nem nyújt nagy teret például egy fotós weboldalnak
Miért? Ott elérhetővé kell tenned az eredeti 8+ Mpixeles képeket? Ha csak weboldalon megjelenő galériát csinálsz, az oda megfelelő pixelméretű és minőségű jpeg képek darabja max 100 kB.
tehát ha a generálás gyorsan zajlik, a továbbítással sem lesz gond
Pont a generálással van a gond, a hálózatod ugyanaz, és a kliens sávszélessége az érdekes mindaddig, amíg a látogatók száma nem szökik az egekbe (lévén fotós oldal).

Te vagy a fotós, saját oldalad?
8

Valóban így van, egy részét

fabian.attila · 2013. Ápr. 9. (K), 14.13
Valóban így van, egy részét kapom meg a gép teljesítményének, ez szintén olyan dolog, amit nem vettem figyelembe...

A fotós oldalt példaként említettem, de a készülő oldalon pont olyan fontosak a képek (és olyan sok is lesz), mint egy fotós oldalon.

Természetesen nem kellenek óriásképek, hiszen senki sem fogja megvárni (egy már nem annyira hagyományos ADSL kapcsolattal például), hogy egy 2 MB méretű kép betöltsön.

Persze, amig az adott oldal nem növi ki a tárhelyét, addig nincs gond (meg ez nem is annyira valószínű), csupán elméleti kérdésként vetettem fel, mert ha esetleg másnak van jó ötlete, tapasztalata, abból sokat tudok tanulni...

Off: egyébként a hobbim a fotózás : )
9

Best of

Pepita · 2013. Ápr. 9. (K), 14.31
Ezekért érdemes már feltöltéskor méretezni, mint fentebb írták, én is így szoktam tenni. Mivel nem akarod a ~2MB-os képeket feltenni, érdemes olyan adminfelületet írnod (a feltöltéshez), ami át is méretezi. Csak nem egy, hanem kétféle méretre (két képet csinál).

Ha meg kinövöd a tárhelyet -> nagyobbra kell váltani. Egy normális szolgáltatónál erre van lehetőség, persze akkor kicsit többe is kerül.

off: nekem is :)
13

Privat

janoszen · 2013. Ápr. 9. (K), 17.48
Irtam neked privat uzenetet ezzel kapcsolatban, pontosan ezzel a kerdessel kuzdok en is, de nekem van vasam es elegendo tarhelyem jatszani a kerdessel.
14

Gondoltál már felhőre?

deejayy · 2013. Ápr. 9. (K), 19.55
Gondoltál már felhőre? Pontosabban CDN-re? Amazonnál láttam erre szolgáltatást, fillérekért adják a gigákat, csak a fájlnyilvántartást kell megoldanod.

Részleteket sajnos nem tudok, én is csak láttam, de mivel nem érdeklődök most ilyen után, nem ástam bele magam.
15

CloudFront

janoszen · 2013. Ápr. 9. (K), 22.35
Igen, a CloudFrontra tudsz pusholni tartalmat, de az eredeti fileokat ugyis meg kell tartania es ugyis az lesz a legtobb.
16

ahogy én csinálom

Poetro · 2013. Ápr. 10. (Sze), 06.36
Az eredeti képek a szerveren vannak. A generáltak S3-on. Onnan pedig Cloudfronton keresztül kapod te meg.
11

Hazabeszélés

vbence · 2013. Ápr. 9. (K), 15.04
Ha kép méretezéséről van szó PHPben, tudom ajánlani a saját produktumomat.
12

Kép átméretezésre mindig ezt

Kubi · 2013. Ápr. 9. (K), 17.23
Kép átméretezésre mindig ezt szoktam használni (mert átméretezésnél még ezt is értelmezi pl: 50% - 10)

http://wideimage.sourceforge.net/

Alapból lehet egyből kimenetre nyomni a képet

WideImage::load('pic.jpg')->crop('center', 'center', 90, 50)->output('png');
Érdemes cachelni az átméretezett képet, hogy ne kelljen minden lekérdezésnél újra meg újra ugyanazt a műveletet elvégezni, de kis site esetén mehet így egyből. Memória limitre figyelj, nagy kép = sok memória.