Изменение размера изображения в Java прерывается на некоторых JPG - PullRequest
1 голос
/ 08 ноября 2010

Я использую код ниже, чтобы изменить размеры изображений и сохранить их на сервере. Однако в некоторых файлах JPG изменение размера приводит к появлению красноватого оттенка на изображении. Есть идеи, что может быть причиной этого? Вот исходное изображение: http://www.unctv.org/tWxkBbq_10M6wKRRL/PNCWWD01.jpg и вот что оно производит потом: http://www.unctv.org/tWxkBbq_10M6wKRRL/PABDFC01__1289231445291.jpg

Photoshop CS5 на Mac используется для создания входных данных 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 ]

1 голос
/ 08 ноября 2010

Хотите верьте, хотите нет, проблема была связана с настройкой progressive в Сохранить для Web и устройств в Photoshop.Как только я включил это, файл был хорошо обработан приложением Java.Почему я не знаю.Может быть, кто-то может пролить свет на это.

1 голос
/ 08 ноября 2010

Ваше оригинальное изображение выглядит как нормальное изображение RGB.Поскольку изображение непрозрачное, я уверен, что setColor() и fillRect() добавляют, но они не являются проблемой.Красноватый оттенок предполагает неверно инициализированный буфер ARGB или неправильно выбранный графический композитный режим.Вы можете попробовать один из методов ImageIO.write(), чтобы проверить, не ошибся ли ваш JPEGImageEncoder.

...