Salvare de imagini din Flash?

Help, anyone?

De mult’shel ma chinui cu o problema: cum poti salva imagini din Flash? De incarcat o poza in Flash, online, e simplu: uploadezi poza online dupa care o incarci. Deci Flash ARE API pentru scris poze pe disc. Problema este ca, din cate stiu eu, nu poate salva decat pozele de gen “upload”.
O posibila problema ar fi incarcarea imaginii intr-un obiect de tip bitmap, apoi “descompunerea” bitmapului respectiv pixel cu pixel in valori RGB, urmata de trimiterea enormului string de date catre un script PHP care, cu ajutorul GD, sa recompuna imaginea si s-o salveze – ready for download.

Avantaje: doar unul – cu multa durere si chin pana la urma obtii ceea ce-ai vrut – sa salvezi imaginea facuta de tine in Flash, pentru ulterioare folosinte

Dezavantaje:
1. Timpul de upload enorm: chiar si cu mega-optimizari, stringul de variabile pentru o poza de 100x80px poate ajunge lejer la 7-800k – si creste exponential cu marimea imaginii. O poza de 800×640 ajunge la megi sau zeci de megi de “post data” de transmis – not feasible.
2. Puterea de calcul a Flashului. DA, exista algoritmi de compresie a textului pentru Flash, exista si algoritmi de decompresie a textului in PHP. Dar pentru o poza obisnuita (800×640) obtii o reducere a stringului de 60%, max 40%, ceea ce nu e mult deloc, si asta in conditiile in care ai rabdarea sa stai langa flashul respectiv cateva ore cat dureaza compresia respectiva (flashul sta TARE prost la handlingul de stringuri lungi)

Solutie alternativa?
Se pare ca exista: am vazut cu ochii mei, la fauxto, de care am dat prin gratiile celor doi grammos. Te inscrii frumushel acolo, iti uploadezi o poza, o modifici un pic (in Flash, cum altfel) dupa care o poti salva. Si dureaza 1-2 minute, nu 10-20 ore… Are idee cineva cum pisici au reusit sa faca asta baietii si fetitele de la fauxto?

Comments are closed.

Comments (9)

  1. Daca te uiti atent, inca de la preloader se vede ca aplicatia Fauxto este de fapt o aplicatie Flex2. ActionScript 3 vine cu ceva functii noi de prelucrare de poze. Nu m-am jucat cu AS3 dar e foarte posibil/probabil sa vina si cu niste metode de compresie built-in a pozelor.

  2. Poate se face totul server-side.
    Tu uploadezi (prolly jpg) in Flash –> Flash salveaza in memorie la ei pe server –> cgi-ul ti-o serveste inapoi.
    Sau poate flashul stie sa pompeze inapoi un jpg-stream.

    G.

  3. ok, m-am mai uitat, si aici spune exact ce spuneam mai sus: http://www.actionscript.org/forums/showthread.php3?t=106160

    Sau Flashu’ poate sa salveze fisieru’ swf (on the server) si apoi un cgi sa deschida acel fisier si sa ti-l trimita tie.

    G.

  4. Sorry pentru the multiples comments, i just woke-up.
    M-am uitat pe faux, si cred ca nu face editare acolo, ci trimite comenzile upstream, unde modifica imaginea pe care o s-o ti-o trimita tie cand save.

    Si gata, asta e ultima idee. 😀

    G.

  5. Virusescule: nu stiam (pana n-am vazut demo-urile) care e stilul grafic al Flex-ului… Intr-adevar, e Flex 2 – dar tot nu am inteles: Flex-ul are niste functii in plus, sau care e faza? Functii de compresie exista, pe algoritmul zlib, si merg inclusiv in mod ASCII daca le bibilesti cu atentie. Problema e ca, la cantitati mari de date, flashul se duce pe drumuri europene si acolo ramane cu orele 😀

    Geo: M-am confruntat cu problema asta acum un an si ceva, cand am incercat sa fac o aplicatie de “red-eye removal“. Pe-atunci ma gandisem asa: decat sa salvez TOATA poza prelucrata, mai bine trimit serverului doar bucatica de poza modificata coordonatele ei in contextul pozei mari, si las apoi GD-ul sa faca stitching… Din pacate proiectul pentru care am facut asta a picat, si a trebuit sa ma intorc la treburi mai serioase.

    BTW, dati si voi un ochi pe red-eye-ul ala… E facut 90% from scratch.

  6. Eu ma gandeam, fara sa fi studiat AS3 inca, recunosc, ca folosint Flex 2 deci AS3 poate au fost introduse ceva functii utilitare pentru asa ceva.
    De exemplu, am fost uimit ca Flash Player permite mod full screen in browser.
    Adica apesi o tasta si se face flashul pe tot ecranul facand practic overide la browser.
    Nu m-ar fi mirat sa adauge o functie gen encodeToJPEGString(); la BitmapData class.

    Pe de alta parte, tehnica de care zici tu si Geo mi se pare destul de buna. Flash 9, zicese, ca vine cu acel fantastic (de rapid) AVM2. Poate ca baietii de la fauxto au exploatat la maxim posibilitatea de compresie.

    M-am uitat prin help-ul AS3. Nu prea pare sa fie vreo umbra de jpeg encoding sau ceva similar.

  7. Eu cred ca pur si simplu trimite comenzile back to the server, unde modifica imaginea. Ceva in genul ” move eraser from x1,y1 to x2,y2″.

    G.

  8. Virusescu: Daca Flex-ul nu are functie dedicata pentru bitmap-saving, atunci singura explicatie pe care o gasesc ar fi ca oamenii si-au dezvoltat o functie de compresie suficient de desteapta incat sa nu blocheze procesorul si sa mearga si rapid.

    Mario Klingerman a venit cu asa ceva: cu ideea de a procesa imaginea pe bucati, combinand timpii mai mici de compresie a bucatilor cu timi de upload simultan catre server in timp ce comprima bucatica urmatoare de imagine… Pretty nice 🙂 Oricum, Mario e printre primii pe care i-am gasit sa se preocupe de asa ceva, acum 1-2 ani

    Geo: ce zici tu face mult sens d.p.d.v. al problemei mele, dar nu e cazul. Daca ar fi asa cum zici tu, atunci ar trebui ca fiecare modificare, fiecare filtru aplicat, ORICE REFRESH sa fie pe baza de imagini reincarcate din server… Ceea ce e KILLER pentru bandwidth… Ce zici tu merge mai degraba pentru aplicatii mai putin vizuale ca user interface.

  9. Geo: uite un site similar de “prelucrare online de imagini”, facut tot in flash, dar care merge exact pe principiul de care ziceai tu: http://www.imageeditor.net