Newsgroup: it.comp.java
Titolo: [HELP] Problemaccio.... caricare, scalare, salvare Immagini GIF

Ciao a tutti,
la missione apparentemente sembra semplice... caricare un'immagine GIF, fare
un resize e salvarla sul disco.
Ho provato parecchie strade... JIMI, JMagick, JAI, Graphics2d , GIFEncoder
(AMCE)  ma non ho ottenuto alcun risultato.
Per tutte le altre estensioni (JPG,TIFF,BMP,PCT,TGA,PNG)  no problem... per
il GIF nisba.
Qualche suggerimento??
Un grazie di cuore a tutti.
Fabrizio.

La ragione e' molto semplice,
GIF e' un formato proprietario, per scrivere una GIF devi avere una licenza
per farlo,
quindi JIMI sicuramente, gli altri immagino uguale, non ti permettono di
farlo.
Ciao


 Ciao
Ciao,
grazie per la risposta.
In effetti tempo fa avevo letto qualcosa a riguardo... se non erro dovrebbe
essere proprietà della Unisys.
Tengo a precisare che con il GIFEncoder della ACME riesco a salvare
perfettamente
l'immagine originaria ma non l'immagine scalata.
Mi spiego meglio.
Se leggo un'immagine GIF con JIMI e la salvo con il GIFEncoder della ACME va
tutto bene, il risultato è perfetto.
Se leggo un'immagine GIF con JIMI, la ridimensiono e cerco di salvarla con
il GIFEncoder della ACME ottengo l'errore "too many colors".
Negli archivi JAI-INTEREST una persona suggeriva di utilizzare un operatore
"OrderedDither" per ridurre i colori:
http://archives.java.sun.com/cgi-bin/wa?A2=ind0101&L=jai-interest&P=R7176
Non so... faccio altri esperimenti, nel frattempo eventuali dritte sono più
che benvenute!
Grazie.
Fabrizio

 il GIFEncoder della ACME ottengo l'errore "too many colors".
Come fai a scalarla?
java.awt.Image img=Jimi.getImage(...);
java.awt.Image imgScalata = img.getScaledInstance(...);
Se fai cosi' non capisco coma mai aumenti il numero di colori!
[CUT]

 Se fai cosi' non capisco coma mai aumenti il numero di colori!
Utilizzo diversi metodi però il risultato è sempre lo stesso, la Color Depth
passa da 8bit a 24bit (a seconda del metodo utilizzato anche a 32!!!!) e
questo
purtroppo falsa tutto.
Mi succede solo con immagini di estensione GIF.
---- Esempio con JAI (Java Advanced Imaging ) ----
String fileName = "prova.gif";
double scale=0.5;
RenderedOp srcImg = JAI.create("fileload", fileName);
System.out.println("SOURCE IMAGE COLOR DEPTH: " +
srcImg.getAsBufferedImage().getColorModel().getPixelSize());
AffineTransform transform = AffineTransform.getScaleInstance( scale, scale);
Interpolation interpolation =
Interpolation.getInstance(Interpolation.INTERP_BICUBIC);
PlanarImage scaledImg = (PlanarImage)JAI.create( "affine", srcImg,
transform, interpolation);
System.out.println("SCALED IMAGE COLOR DEPTH: " +
scaledImg.getAsBufferedImage().getColorModel().getPixelSize());
Questo è l'output ottenuto con l'immagine di prova che ho utilizzato:
SOURCE IMAGE COLOR DEPTH: 8
Could not load mediaLib accelerator wrapper classes. Continuing in pure Java
mode.
SCALED IMAGE COLOR DEPTH: 32
Idee???
Grazie.
Fabrizio


Anche usando oggetti java.awt.Image (senza fare conversioni a BufferedImage)
il discorso purtroppo non cambia....
------- Esempio (decode con Jimi, encode con GifEncoder della ACME) ------
String fileName = "prova.gif";
JimiReader jr = info.loadImage("gif", new FileInputStream(fileName));
Image img = jr.getImage();
jr.close();
Image scaledImage =img.getScaledInstance(100,100,Image.SCALE_SMOOTH);
FileOutputStream out = new FileOutputStream("scaled-image.gif");
GifEncoder encoder = new GifEncoder(scaledImage, out);
encoder.encode();
out.flush();
Questa l'eccezione:
ava.io.IOException: too many colors for a GIF
at webmgr.common.util.GifEncoder.encodeDone(GifEncoder.java:145)
at webmgr.common.util.ImageEncoder.imageComplete(ImageEncoder.java:261)
at java.awt.image.ImageFilter.imageComplete(ImageFilter.java:173)
at
com.sun.jimi.core.raster.JimiRasterImageSupport.addWaitingConsumer(JimiRaste
rImageSupport.java:330)
at
com.sun.jimi.core.raster.JimiRasterImageSupport.addConsumer(JimiRasterImageS
upport.java:296)
at
com.sun.jimi.core.raster.JimiRasterImageSupport.startProduction(JimiRasterIm
ageSupport.java:376)
at
java.awt.image.FilteredImageSource.startProduction(FilteredImageSource.java:
116)
at webmgr.common.util.ImageEncoder.encode(ImageEncoder.java:111)
at test.src.MediaInfo.main(MediaInfo.java:44)
Exception in thread "main"
E' come se l'operazione di scaling modificasse la bit-depth dell'immagine e
l'encoder GIF, trovandosi di fronte a un'immagine a 24 bits, scoppiasse.
Nota che se si processa l'immagine originale
GifEncoder encoder = new GifEncoder(img, out);
tutto fila liscio.
Se ti servono i jar o ulteriori coordinate per fare dei test fammi sapere.
Grazie.
Fabrizio