# Aus mehrern Tiffs ein Multipage-Tiff erstellen



## vicious (3. Mrz 2010)

Hi,

ich habe folgendes Problem und hoffe das mir jemand helfen kann:

Ich habe in einer Datenbank mehrere Bilder im TIF-Format als Binary-Data abgelegt. Von diesen Bildern möchte ich immer 2 auswählen und aus diesen beiden dann eine Multipage-Tiff machen.

Momentan ist es so, dass ich ein Bild aus der Datenbank auslese und es in einem Byte-Array speichere. Nachdem ich das zweite Bild ausgelesen haben möchte ich dann mit Hilfe der beiden Byte-Arrays, die ich dann habe, die Multipage-Tiff erstellen, wobei ich diese dann ebenfalls als Byte-Array an andere Funktionen übergeben möchte.

Nun wüsst ich gern ob und ggf wie man das realisieren kann. Mir fehlt da son bisschen der Denkanstoss. Bis jetzt hab nur Code-Schnippsel gefunden, bei denen Tiff-Dateien in File-Objekte eingelsen und dann zusammengefügt werden. Da ich nur Bilder in Byte-Arrays zu Verfügung habe bin ich nun etwas ratlos.


----------



## TR (3. Mrz 2010)

```
List<byte[]> imagelist = null;


File output = new File("C:/newimage.tiff");

final Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");

if (writers.hasNext()) {

	final ImageWriter writer = writers.next();

	// File für Image wegschreiben erzeugen
	try {
		final ImageOutputStream ios = ImageIO.createImageOutputStream(output);
		writer.setOutput(ios);
		
		// Parameter für TIFF setzen
		final TIFFImageWriteParam writeParam = (TIFFImageWriteParam) writer
				.getDefaultWriteParam();
		writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
		writeParam.setCompressionType("PackBits");

		
		// Alle bilder durchgehen
		for (int i = 1, len = imagelist.size(); i <= len; i++){
			
			byte[] bImg = imagelist.get(i);
			
			BufferedImage img = ImageIO.read(new ByteArrayInputStream(bImg));
			
			final IIOImage iioImage = new IIOImage(img, null, null);
			
			if (i != 1){ // restliche Seite  
				writer.writeInsert(-1, iioImage, writeParam);
			}else{ // Seite 1
				writer.write(null, iioImage, writeParam);
			}
		}	
		
		// Fertig	
		ios.close();
				
	}catch(Exception e){
		e.printStackTrace();
        }
}
```

ohne es getestet zu haben, versuch es einfach!


----------

