gpt4 book ai didi

java - 图像大小调整: original color has been changed after the resize

转载 作者:行者123 更新时间:2023-12-01 04:18:02 25 4
gpt4 key购买 nike

我正在使用 Play!Framework 1.x,它的有用工具之一是 Images 类,它允许我动态调整图像的大小。

这是来自 Images.resize 的代码:

/**
* Resize an image
* @param originalImage The image file
* @param to The destination file
* @param w The new width (or -1 to proportionally resize) or the maxWidth if keepRatio is true
* @param h The new height (or -1 to proportionally resize) or the maxHeight if keepRatio is true
* @param keepRatio : if true, resize will keep the original image ratio and use w and h as max dimensions
*/
public static void resize(File originalImage, File to, int w, int h, boolean keepRatio) {
try {
BufferedImage source = ImageIO.read(originalImage);
int owidth = source.getWidth();
int oheight = source.getHeight();
double ratio = (double) owidth / oheight;

int maxWidth = w;
int maxHeight = h;

if (w < 0 && h < 0) {
w = owidth;
h = oheight;
}
if (w < 0 && h > 0) {
w = (int) (h * ratio);
}
if (w > 0 && h < 0) {
h = (int) (w / ratio);
}

if(keepRatio) {
h = (int) (w / ratio);
if(h > maxHeight) {
h = maxHeight;
w = (int) (h * ratio);
}
if(w > maxWidth) {
w = maxWidth;
h = (int) (w / ratio);
}
}

String mimeType = "image/jpeg";
if (to.getName().endsWith(".png")) {
mimeType = "image/png";
}
if (to.getName().endsWith(".gif")) {
mimeType = "image/gif";
}

// out
BufferedImage dest = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Image srcSized = source.getScaledInstance(w, h, Image.SCALE_SMOOTH);
Graphics graphics = dest.getGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, w, h);
graphics.drawImage(srcSized, 0, 0, null);
ImageWriter writer = ImageIO.getImageWritersByMIMEType(mimeType).next();
ImageWriteParam params = writer.getDefaultWriteParam();
FileImageOutputStream toFs = new FileImageOutputStream(to);
writer.setOutput(toFs);
IIOImage image = new IIOImage(dest, null, null);
writer.write(null, image, params);
toFs.flush();
toFs.close();
writer.dispose();
} catch (Exception e) {
throw new RuntimeException(e);
}

}

这是我的使用方法:

File old = new File("1.jpg");
File n = new File("output.jpg");
Images.resize(old, n, 800, 800, true);

原始图像1.jpg: enter image description here

以及output.jpg: enter image description here

谁能解释一下这是怎么回事?谢谢!

最佳答案

我也看到过这个,并相信这是一个 JRE 错误。我通过不使用 getScaledInstance 来解决这个问题而 scaling while drawing .

关于java - 图像大小调整: original color has been changed after the resize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com