Как изменить размер изображения TIFF в Java? - PullRequest
2 голосов
/ 22 июля 2010

Я хочу изменить размер файла .tiff.Я использовал инструментарий JAI для изменения размера различных типов изображений.Вот что я пытался реализовать:

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Это потому, что вы записываете 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 голосов
/ 22 июля 2010

1) Вы пишете tempImage внутри себя:

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

Должно быть:

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

2) Вы пишете изображение, которое вы только что прочитали (почему Вы читаете егокстати?):

encoder.encode(dec.decodeAsRenderedImage());

Должно быть:

encoder.encode(tempImage);
...