Java中的图像大小调整在一些JPG上中断

时间:2010-11-08 17:05:30

标签: java image image-processing jpeg

我正在使用下面的代码调整图像大小并将其存储在服务器上。但是,对于某些JPG,调整大小会在图像上产生偏红色调。可能导致这种情况的任何想法?以下是原始图片:http://www.unctv.org/tWxkBbq_10M6wKRRL/PNCWWD01.jpg以及之后产生的内容:http://www.unctv.org/tWxkBbq_10M6wKRRL/PABDFC01__1289231445291.jpg

Mac上的Photoshop CS5用于为此应用程序生成JPG输入。感谢。

public BufferedImage resizeVeryHigh(InputStream inputStream, File resizedFile) throws IOException {
  BufferedImage bufferedImage = null;
  try {
      Image newImage = ImageIO.read(inputStream);
      int newWidth = (int)this.targetWidth;
      ImageIcon imageIcon = new ImageIcon(newImage);
      Image image = imageIcon.getImage();
      Image resizedImage = null;

      int iWidth = image.getWidth(null);
      int iHeight = image.getHeight(null);

      // This code ensures that all the pixels in the image are loaded.
      Image temp = new ImageIcon(resizedImage).getImage();

      // Create the buffered image.
      bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB);

      // Copy image to buffered image.
      Graphics g = bufferedImage.createGraphics();

      // Clear background and paint the image.
      g.setColor(Color.white);
      g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
      g.drawImage(temp, 0, 0, null);
      g.dispose();

      // Encodes image as a JPEG data stream
      FileOutputStream out = new FileOutputStream(resizedFile);
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
      JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
      param.setQuality(1.0f, true);
      encoder.setJPEGEncodeParam(param);
      encoder.encode(bufferedImage);
  }
  catch (Exception e) {
        this.error = e.getMessage();
  }
      return bufferedImage;
}

2 个答案:

答案 0 :(得分:1)

原始image似乎是普通的RGB图像。由于图片不透明,我确定setColor()fillRect()添加了什么,但它们不是问题。红色演员表示初始化ARGB缓冲区错误或图形复合模式选择错误。您可以尝试使用ImageIO.write()方法之一来查看JPEGImageEncoder是否有问题。

答案 1 :(得分:1)

信不信由你,这个问题与Save for Web& amp;中的progressive设置有关。 Photoshop中的设备。一旦我打开它,Java应用程序就可以正确处理该文件。为什么,我不知道。也许有人可以对此有所了解。