我正在尝试通过水平翻转图像并调整其大小来变换图像。问题在于,完成转换后,图片的颜色都变得很怪异,就变成了这种红色调。我想我在某处读到它可能是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;
}
}
具有图像色彩的色调通常意味着图像使用错误的色彩空间进行渲染,Adobe RGB与sRGB一直是最受欢迎的。尝试在代码中将TYPE_INT_ARGB更改为TYPE_INT_RGB。
您也可以尝试以下类型:BufferedImage.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();
}