Newsgroup: it.comp.java
Titolo: Conversione Tiff --> Jpeg

Salve a tutti,
avrei bisogno di leggere delle immagini Tiff e convertirle in Jpeg.
Studiandomi i tips della Sun, viene suggerito di usare la classe
ImageIO.
Solo che, entrambi i cicli che seguono,
non danno tiff tra i formati disponibili
		for (String s : ImageIO.getReaderFormatNames()){
			System.out.println("Format Name: "+s);
		}
		for (String s : ImageIO.getReaderMIMETypes()){
			System.out.println("Mime Type: "+s);
		}
Ho trovato traccia di una libreria della SUN che si chiama JAI e che
doveva andare in futuro ad integrare la JDK (ma si parla della 1.4!).
Fatto sta che se ciò è successo, allora non mi spiego perchè non mi dà
il tiff tra quelli disponibili, tanto più che nella sdocumentazione su
JAI, viene indicato come formato di conversione.
http://java.sun.com/products/java-media/jai/iio.html
Avete mai avuto a che fare con questa casistica?
Grazie

mmm, da qualche parte ho usato i tiff, fammi ricordare dove e come...

 mmm, da qualche parte ho usato i tiff, fammi ricordare dove e come...
Attenderò...:-)

 Grazie
Brutto affare davver... se controlli all'interno di rt.jar, nel
percorso del package com\sun\imageio\plugins, puoi notare che il
supporto al formato TIFF è  stato *completamente escluso* . Quindi hai
ragione a dire che non è presente tra i formati disponibili... bisogna
aggiungerlo a mano!
Cercando sul sito della Sun trovato però questo:
https://jai-imageio.dev.java.net/binary-builds.html
Parla di una release di jai-imageio di settembre 2006, molto recente.
Perchè non provi a scaricare l'installatore di Jai 1.1? ora lo provo
anch'io, sai mai che il codec tiff l'abbiano infilato là dentro...
-- 
Scientology: se la conosci la eviti, se la conosci non ti uccide...
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx
 - 
http://www.xenu.net
(per rispondere personalmente leva IlDitoDalCulo)
http://www.webalice.it/ech3l0n/HastaLaVictoria.jpg
   -   Siempre!


E' così: l'avevo trovato già ieri ma, la cosa bella è che ha il
TIFFImageReader ma non è documentato sulle sue API!!!
Comunque sono già riuscito a fare la conversione.
Devo ancora capire bene alcune cose, poi pubblico il main.


Come promesso, ecco i passi da seguire:
1) Scaricare l'installer di JAI.
2) Mettere nel classpath il percorso del jar jai_imageio.jar (la mia
classe non lo usa direttamente ma quella della VM, sì)
Ecco un semplice main
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import javax.imageio.stream.ImageInputStream;
public class ImageConverter {
	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		Iterator itReader = ImageIO.getImageReadersByFormatName("tiff");
		Iterator itWriter = ImageIO.getImageWritersByFormatName("jpeg");
		ImageReader reader = (ImageReader) itReader.next();
		ImageWriter writer = (ImageWriter) itWriter.next();
		File fileTiff = new File("C:\\prova.tiff");
		ImageInputStream is = ImageIO.createImageInputStream(fileTiff);
		reader.setInput(is,true);
        ImageWriteParam iwp = writer.getDefaultWriteParam();
        iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        float values[] = iwp.getCompressionQualityValues();
        iwp.setCompressionQuality(0.45f); //Rapporto di compressione a
scelta
		int index = 0;
		try{
			while (true){
				BufferedImage input = reader.read(index++);
				File fileJpeg = new File("C:\\prova"+index+".jpeg");
				FileImageOutputStream output = new
FileImageOutputStream(fileJpeg);
	            writer.setOutput(output);
	            IIOImage image = new IIOImage(input, null, null);
	            writer.write(null, image, iwp);
		}
		}catch(IndexOutOfBoundsException iobe){
			System.out.println("Numero di pagine: "+((--index)));
		}
	}
}


Eccellente, grazie mille! Questo rimarrà negli archivi di Google a
futura memoria di chiunque ne avesse bisogno.


 supporto al formato TIFF è  stato *completamente escluso* . 
Scusa la domanda, probabilmente mi sbaglio clamorosamente io... ma il TIFF non e' un formato non compresso? quindi potresti provare ad aprirlo come un normale bitmap o al limite come con le png.
O non funziona?
Saluti
CarMas

 ha scritto nel messaggio

Non ho alcuna competenza sui formati di immagine ma...immagino che se
si chiamano diversamente le specifiche siano diverse. Anche perchè
nella VM invece c'è il Reader delle bmp quindi, se fosse come dici tu
non ci sarebbe stato bisogno di creare il Reader per le Tiff.
Ad ogni modo, le Tiff sicuramente hanno una peculiarità e cioè che
sono immagini paginabili.
Questo è il motivo per cui scanner e fax producono Tiff e perchè nel
mio main c'è un ciclo.

 O non funziona?
Ma neanche per idea. TIFF e' un formato con mille sfumature e che 
supporta svariati
tipi di bitmap. (da palette ad interi/float/double da 8 a 64bit, 
immagini piramidali,
lettura a scanline e tile...)
La bitmap puo' essere compressa in lzw, jpeg, jbig ma potresti trovare 
vecchi file
compressi in una variante di jpeg.
Tra l'altro puo' essere esteso facilmente.
Ciao
Mirko

Il 20 Mar 2007, 19:55, 
pio...@inwind.it
 ha scritto:
Ciao anche se in ritardo :
-)
I TIFF si differenziano da tutti gli altri formati prevalentemente perche'
soono MultiPagina
come avete notato
Si puo' anche aggiungere dei tag all'interno ma di solito non si usa
Per questo gli scanner di default usano tiff.
-)
Comnunque si puo' fare multipagina con un tiff monoimmagine o anche un jpg o
png, usando un database.
Ma e' un'altra storia.
-)
Le JAI sono le librerie piu' avanzate in Java. L'alternativa sono le awt,
che pero' non so se supportano i tiff.
-)
Per convertire il Tiff si deve aprirlo e fare il ciclo, ma c'e' anche una
tecnica immediata se si vuole prendere l'immagine 0 ( la prima ) del tiff
-)
E' sconsigliato usatre Jpg ma e' consigliato usare PNG che ha maggiore
qualita' e poi c'era un motivo che non ricordo :-)
.) Le JAI usano un bordello di memoria
quindi dovete alzarla alla
   .) sia nel programma. C'e' una linea in JAI per allocargliela
  .) sia alla VM e' meglio dargliene almeno 512
-)
Le JAI forniscono degli acceleratori nativi per i vari sistemi operativi,
Usateli
Se qualcuno usa le JAI posti che questo inverno ci ho sputato il sangue.
Sono molto potenti come grafica 2D
Vi do delle dritte lampo :
.)
Se dovete fare delle scale < 1 e' indispensabile un "convolve" se no si
disintegra l'immagine.
Facendo "convolve" con dei buoni filtri, in particolare io usao o Laplace o
Passa alto sono riuscito a battere il viewer di MicroSchif, che e' uno dei
migliori.
.)
Per thumbnail , quindi scale <<1 cionviene usare il "subsampleselect" o come
diavolo si chiama.
.)
Per luminosita'/contrrasto sono riuscito a fare qualcosa co n delle formule
ma ci ho capito ben poco
.)
Comodi e veloci invece il "crop" "rotate" non mi hanno dato problemi
ciauz a presto
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/