【问题标题】:Image transformation results in a red image?图像转换导致红色图像?
【发布时间】:2012-02-16 07:00:57
【问题描述】:

我正在尝试通过水平翻转图像并调整其大小来转换图像。问题是当转换完成后,图片的颜色都很奇怪,变成了这种偏红的色调。是否有可能以某种方式解决这个问题,我想我在某处读到它可能是 AWT 库中的一些错误,但我不确定?

代码如下:

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class LocalImageSizeFlip {

public static void main(String[] args) {
    BufferedImage img = null;

    try {
        img = ImageIO.read(new File("C:\\picture.jpg"));
        AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
        tx.translate(0, -img.getHeight(null));
        AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        img = op.filter(img, null);
        img = resize(img, 100, 75);
        File newFile = new File("newPicture.jpg");
        ImageIO.write(img, "JPEG", newFile);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static BufferedImage resize(BufferedImage image, int width, int height) {
    BufferedImage resizedImage = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(image, 0, 0, width, height, null);
    g.dispose();
    return resizedImage;
    }   
}

【问题讨论】:

标签: java image awt transform


【解决方案1】:

使图像产生色调通常意味着图像使用错误的色彩空间进行渲染,Adobe RGB 与 sRGB 一直是人们的最爱。尝试在您的代码中将 TYPE_INT_ARGB 更改为 TYPE_INT_RGB。

【讨论】:

    【解决方案2】:

    您也可以尝试以下类型:BufferedImage.TYPE_3BYTE_BGR

    【讨论】:

      【解决方案3】:

      如果您有任何图像已经转换并且几乎是粉红色/偏红色。

      您可以再次将它们转换为 RGB。

      try {
              File folder = new File("photo/old");
              File[] list = folder.listFiles();
              for (File f : list) {
                  String url = f.getAbsolutePath();
                  String replce1 = url.replace('\\', '/');
                  File file = new File(replce1);
                  if (file.exists()) {
                      FileInputStream fis = new FileInputStream(file);
      
                      byte[] buff = new byte[fis.available()];
                      fis.read(buff);
      
                      BufferedImage bi = ImageIO.read(file); 
                      BufferedImage biOriginal = new BufferedImage(1200, 800,
                          BufferedImage.TYPE_INT_RGB);
                      Graphics2D g = resizedImage.createGraphics();
                      g.drawImage(bi, 0, 0, 1200, 800, null);
                      g.dispose();
      
                      fis.close();
      
                      FileOutputStream fos2 = new FileOutputStream("photo/new/"+file.getName());
                      ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
                      ImageIO.write(biOriginal, Main.extensionWithotDot, baos2);
                      baos2.flush();
                      byte[] imageInByte2 = baos2.toByteArray();
                      fos2.write(imageInByte2);
                      fos2.close();
                  }
              }
      
          } catch (Exception e) {
              e.printStackTrace();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-02-05
        • 2021-02-23
        • 2011-06-23
        相关资源
        最近更新 更多