Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像变换会产生红色图像吗?_Java_Image_Awt_Transform - Fatal编程技术网

Java 图像变换会产生红色图像吗?

Java 图像变换会产生红色图像吗?,java,image,awt,transform,Java,Image,Awt,Transform,我试图通过水平翻转图像并调整其大小来变换图像。问题是,当转换完成后,图片的颜色都很奇怪,它得到了这种略带红色的色调。是否有可能以某种方式修复此问题,我想我在某个地方读到,它可能是AWT库中的某个bug,但我不确定 代码如下: import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.Buffered

我试图通过水平翻转图像并调整其大小来变换图像。问题是,当转换完成后,图片的颜色都很奇怪,它得到了这种略带红色的色调。是否有可能以某种方式修复此问题,我想我在某个地方读到,它可能是AWT库中的某个bug,但我不确定

代码如下:

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

让图像显影通常意味着使用错误的颜色空间渲染图像,Adobe RGB与sRGB是长期以来的最爱。尝试将代码中的类型_INT_ARGB更改为类型_INT_RGB。

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

如果您有任何已转换的图像,并且这些图像几乎是粉红色/红色的

您可以再次将其转换为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();
    }
另见