【发布时间】:2021-12-02 16:02:51
【问题描述】:
我正在尝试在 Java 中调整 jpg 图像文件的大小。为此,我正在使用 Scalr。 我有大约 16MB 的图像,分辨率为 6000x4000 和 350 dpi。
当我将其调整为 4500 宽度时,它会将 DPI 也缩小到 96。
这是我正在使用的代码:
Scalr.resize(img, Scalr.Method.ULTRA_QUALITY, 4500, Scalr.OP_ANTIALIAS);
我在没有任何库的情况下尝试过,代码如下:
private static BufferedImage resizeImageWithHint(BufferedImage originalImage, int type, int IMG_WIDTH,
int IMG_HEIGHT) {
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
return resizedImage;
}
但结果是一样的。那么如果可能的话,我如何调整 dpi 大约 150 的图像大小,如果不可能的话,我该如何调整 350 dpi 的大小。
【问题讨论】:
-
在 Java 中,图像没有“dpi”。事实上,除了可能的调色板之外,图像没有其他元数据。
-
@MarkJeronimus 那么如何将图像的大小调整为较低的分辨率但又不会丢失 DPI 并将其保持为原始 350。我在 c# .net 中做到了这一点,所以我知道这是可能的,只是想知道在 Java 中是如何实现的。
-
顺便看看我改进后的多线程image resizer
标签: java image-resizing imgscalr