Newsgroup: it.comp.java
Titolo: Unire immagini

Il mio problema:
ho varie immagini .gif da comporre a seconda dei casi ( si tratta di 
un contatore di accessi )... mi piacerebbe anzichè inviare una gif per 
ogni cifra inviare una unica immagine del numero.
Come faccio a creare una gif unendo altre gif ?
:O)
grazie.
 
--
Lof
Inviato da 
www.mynewsgate.net

 Come faccio a creare una gif unendo altre gif ?
Una soluzione è creare una nuova BufferedImage con altezza uguale a quella delle 
tue immagini e larghezza uguale alla somma della larghezza di tutte le immagini;
farsi poi dare il contesto grafico della BufferedImage con getGraphics() e fare 
un'iterazione per tutte le immagini, disegnandole nella nuova immagine con 
g.drawImage(incrementando ogni volta la coordinata orizzontale).
Marco
P.S. non so se mi spiego... ;)

Come faccio a creare una gif unendo altre gif ?
Il mio consiglio è di lasciare il tutto con le gif singole, in questo
modo il tuo contatore di accessi deve solo elaborare ed emettere i tag
<img...> che si riferiscano alle singole immagini, lasciando poi al
browser il compito di caricarle singolarmente. Supponiamo infatti di
avere l'accoppiata Apache+Tomcat: a Tomcat lasci il compito di
interpretare la pagina JSP che contiene il contatore, mentre Apache
(eseguibile nativo) si occupa di recuperare le singole gif da inviare
al browser dell'utente (sempre che tutto sia configurato
correttamente). Questo a mio parere consente di avere il massimo delle
prestazioni.
Con il metodo proposto da te rendi la vita più facile allo
sviluppatore della pagina web, perchè in questo caso il contatore può
essere incluso anche in una semplice pagina html (anche se è possibile
usare i custom tag in JSP per ottenere lo stesso risultato in modo
altrettanto semplice). In questo caso però devi sviluppare una servlet
che usi le API di Java2D (con tutta la sequenza di operazioni già
descritte da cthulhu). Questo metodo ha però i suoi svantaggi:
- grosse perdite di prestazioni: a ogni richiesta devi ricostruire
l'immagine all'interno della JVM
- alto consumo di memoria: se arrivano 10 richieste
contemporaneamente, dopo aver ottenuto i valori dei 10 contatori da
creare, durante l'invio ai client le immagini saranno residenti in
memoria fino ad invio completato
- copyright: se vuoi mandare al client una versione GIF dell'immagine,
tieni conto che tale formato (almeno nell'ultima versione) usa un
algoritmo di compressione brevettato da UniSys, e quindi tra le API
standard fornite dal JDK non c'è nulla che possa convertire un
BufferedImage in un immagine GIF (mentre è sempre possibile il
contrario)
Per i primi due problemi non c'è molto da fare. Elaborare grafica sul
server è quasi sempre dispendioso. Con questo non dico che non debba
essere fatto (ci sono siti che producono grafici in tempo reale sul
server), ma secondo me va fatto quando è realmente indispensabile e
non si trovano altre alternative.
Per il problema del copyright invece ci sono molte alternative: nelle
API standard del JDK (1.4.0 in avanti), nel package javax.imageio,
trovi dei metodi che trasformano la tua BufferedImage in JPG o PNG. I
browser sono sempre stati in grado di visualizzare il formato JPG, e
anche il PNG ha avuto un'altissima diffusione. Io consiglio sempre PNG
per queste cose perchè durante la compressione non toglie alla qualità
dell'immagine (a differenza di JPG). Se però vuoi assolutamente
produrre delle GIF puoi dare un'occhiata qui:
http://www.acme.com/java/software/
la documentazione è qui:
http://www.acme.com/java/software/packages.html
Guarda nel package Acme.JPM.Encoders . La classe GifEncoder implementa
un algoritmo di compressione precedente a LZW (quello brevettato da
UniSys), meno performante ma liberamente utilizzabile.
Se ho detto delle castronerie, avvertitemi ;)

 ha scritto:

--
Lof
Inviato da 
www.mynewsgate.net

 problemi che tu mi scrivi.
Bah. Se dai un'occhiata a 
www.bandasprecata.com/counter/enum
 c'č una prova
che ho fatto tempo fa. Ogni immagine viene generata in piů o meno due
millisecondi (utilizza il package Acme per l'encoding). Non č pochissimo
ma non č un tempo cosě esagerato. Nota che le immagini delle cifre si
sovrappongono pure... :P
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------