2010-05-24 22 views
13

dışarı yazma TIFF resim ben okuma ve yazma tiff görüntülerinin görevi başarmak için aşağıdaki kodu çalıştıOkuma ve Java

Caused by: java.lang.IllegalArgumentException: Only images with either 1 or 3 bands 
can be written out as BMP files. 
at com.sun.media.jai.codecimpl.BMPImageEncoder.encode(BMPImageEncoder.java:123) 
at com.sun.media.jai.opimage.EncodeRIF.create(EncodeRIF.java:79) 

Bu sorunu nasıl çözebilirim?

cevap

20

BMP ImageIO sınıfını kullanmak olacak bir TIFF ve çıktıda okumak için en kolay yolu:

BufferedImage image = ImageIO.read(inputFile); 
ImageIO.write(image, "bmp", new File(outputFile)); 

sadece ek şey 'emin olmak işin bu almak için ne gerekir ve JAI ImageIO JAR'ları sınıf yolunuza ekledi çünkü BMP ve TIFF bu kütüphaneden eklentiler olmadan JRE tarafından ele alınmıyor.

JAI ImageIO'yu herhangi bir nedenden dolayı kullanamıyorsanız, mevcut kodunuzla çalışmasını sağlayabilirsiniz, ancak bazı ek işler yapmanız gerekecektir. Yüklediğiniz TIFF için oluşturulan renk modeli, muhtemelen bir BMP tarafından desteklenmeyen bir dizinlenmiş renk modelidir. JAI.KEY_REPLACE_INDEX_COLOR_MODEL anahtarıyla bir oluşturma ipucu sağlayarak JAI.create ("format", ...) işlemi ile değiştirebilirsiniz.

Sen biraz şans geçici bir görüntü içine dosyadan okunan görüntüyü yazma ve daha sonra geçici görüntü yazma olabilir:

BufferedImage image = ImageIO.read(inputFile); 
BufferedImage convertedImage = new BufferedImage(image.getWidth(), 
    image.getHeight(), BufferedImage.TYPE_INT_RGB); 
convertedImage.createGraphics().drawRenderedImage(image, null); 
ImageIO.write(convertedImage, "bmp", new File(outputFile)); 

aynı indeks renk modeli sorunuyla karşılaşıyorsanız olmadığını merak ediyorum düzenli JAI ile olduğu gibi. İdeal olarak, ImageReader ve ImageWriter örneklerini almak için ImageReader ve ImageWriter örneklerini kullanmanız gerekir, ancak en basit durumları okuyun, böylece okuma ve yazma parametrelerini buna göre ayarlayabilirsin, ancak ImageIO.read() ve .write() size verilecek uygun olabilir. Ne istiyorsunuz.

+0

"ImageIO.write (görüntü, "bmp", yeni bir Dosya (Outputfile))" sert değil görüntüyü başarılı bir şekilde ".bmp" dosyası olarak yazabiliyor. Kodu yerine ".tiff" olarak değiştirdiğimde, o zaman çalışır. – user224270

+0

üzgünüm ... küçük bir yazım hatası vardı. ImageIO.write şimdi orijinal görüntü değil, convertedImage yazıyor olmalıdır. – Jeff

+0

Teşekkürler Jeff. işe yaradı! gerçekten benim günümü kurtardın;) – user224270

0
FileInputStream in = new FileInputStream(imgFullPath); 
FileChannel channel = in.getChannel(); 
ByteBuffer buffer = ByteBuffer.allocate((int)channel.size()); 
channel.read(buffer); 
tiffEncodedImg = Base64.encode(buffer.array()); 

kullanın bu içerikleri HTML img etiketinin src değeri olarak ("tiffEncodedImg" yani değeri)