Image transformation results in a red image?

↘锁芯ラ 提交于 2019-12-01 03:39:23

问题


I am trying to transform an image by flipping it horizontally and resizing it. The problem is that when the transformation is done the picture's colors are all weird, it has gotten this reddish tone. Is it possible to fix this somehow, I think I read somewhere that it might be some bug in the AWT library but I am not sure?

Here is the code:

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;
    }   
}

回答1:


Having an image develop a tint usually means the image is being rendered using the wrong colorspace, Adobe RGB vs. sRGB being a perennial favorite. Try changing TYPE_INT_ARGB to TYPE_INT_RGB in your code.




回答2:


You can also try the following type: BufferedImage.TYPE_3BYTE_BGR




回答3:


If you have any images already converted and those are almost pinkish/reddish.

You can convert those into RGB again.

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();
    }


来源:https://stackoverflow.com/questions/8962990/image-transformation-results-in-a-red-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!