2010-07-22 101 views
2

我想调整.tiff文件的大小。我已经使用JAI工具包来调整不同类型的图像的大小。这里是我试图实现的:如何在java中调整tiff图像?

int imageWidth = 330; 
     int imageHeight = 490; 

     BufferedImage tempImage = new BufferedImage(imageWidth, imageHeight,BufferedImage.TYPE_INT_RGB); 
     Graphics2D graphics2D = tempImage.createGraphics(); 
     graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC); 
     graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 
     graphics2D.dispose();   

     File outfile = new File("D:/Work/YoursGallery/output.tif"); 

     BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile)); 

     FileSeekableStream ss = new FileSeekableStream("D:/Work/YoursGallery/sample1.tif"); 

     ImageDecoder dec = ImageCodec.createImageDecoder("tiff", ss, null); 
     TIFFEncodeParam param = new TIFFEncodeParam(); 
     param.setTileSize(tempImage.getWidth(), tempImage.getHeight()); 


     TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec.createImageEncoder("tiff", out, param);   
     encoder.encode(dec.decodeAsRenderedImage()); 

     out.close(); 

创建的图像和原始图像具有相同的大小。任何人都可以请说出是什么问题?

这是我用来测试它的示例tiff图像。

http://docs.google.com/fileview?id=0BxCDhEXNFvbeMTYyMGZmNDYtODhhNy00YWI3LTkxNDgtZTNhM2FhMjg5Y2Q3&hl=en&authkey=CPCEypgM

在此先感谢。

回答

1

这是因为你正在写出仍然是原始图像的tempImage。

graphics2D.drawImage(image, 0, 0, imageWidth, imageHeight, null); 

变化,为:

graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 

或更改其他代码写出来的图像,而不是tempImage

- 编辑 -

OK尝试2.也许具有源和目的地相同是愚蠢的。

BufferedImage bsrc = ImageIO.read(new File(src)); 
    BufferedImage bdest = 
     new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g = bdest.createGraphics(); 
    AffineTransform at = 
     AffineTransform.getScaleInstance((double)width/bsrc.getWidth(), 
      (double)height/bsrc.getHeight()); 
    g.drawRenderedImage(bsrc,at); 

试一下:)

+0

变化按照建议,但有相同的尺寸仍然得到的图像作为原始图像了。 – 2010-07-22 09:05:15

+0

对不起,在放弃之前,我还有一个建议:) – willcodejavaforfood 2010-07-22 09:30:42

+0

它创建的图像与预期的尺寸,但整个图像是黑色的。 – 2010-07-22 10:25:30

0

1)你在里面写自己tempImage:

graphics2D.drawImage(tempImage, 0, 0, imageWidth, imageHeight, null); 

应该是:

graphics2D.drawImage(originalImage, 0, 0, imageWidth, imageHeight, null); 

2)你正在写的图像,你刚刚阅读(为什么你读它btw?):

encoder.encode(dec.decodeAsRenderedImage()); 

应该是:

encoder.encode(tempImage); 
+0

应用和测试的更改仍然变黑。 – 2010-07-22 13:48:52