【问题标题】:How to change the DPI from 96 to 300 of an image in java after resizing?调整大小后如何在java中将图像的DPI从96更改为300?
【发布时间】:2014-05-05 07:00:01
【问题描述】:

我有一个 JPEG 图像,调整大小后,我想在 Java 中将同一图像的 DPI 从 96 更改为 300。我的代码:

public BufferedImage resizeImageWithHint(BufferedImage originalImage, int type) {
    BufferedImage resizedImage = new BufferedImage(177, 177, type);
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, 177, 177, 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);    //g.translate(4, 4);     return resizedImage;         }

【问题讨论】:

  • 尝试了解图像的大小和DPI是联系在一起的,当你改变一个,那么另一个就会受到影响。
  • 您无法更改图像的 DPI。您必须将图像放大到 300 / 96 像素。
  • @Gilbert Le Blanc 感谢您的评论,但我想将 200*200 像素的图像转换为 300 dpi 的 177*177 像素。在java中怎么可能?
  • 所以你的 200x200 图像有 96 dpi 而你的 177x177 图像有 300 dpi?您想从哪里获取要生成的附加像素的信息?插值?
  • @BhathiyaPerera 没有库或 API 可以神奇地添加原始图像中不存在的分辨率。您已经通过调整它的大小丢弃了一些分辨率。它不会回来了。

标签: java


【解决方案1】:
BufferedImage image = ImageIO.read(new File(path));
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(new File(path)));
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncoder.setJPEGEncodeParam(jpegEncodeParam); jpegEncodeParam.setQuality(0.75f, false);
jpegEncodeParam.setXDensity(300); jpegEncodeParam.setYDensity(300);
jpegEncoder.encode(image, jpegEncodeParam);
image.flush();

【讨论】:

  • 看起来这是来自 com.sun.image.codec.jpeg 包 - 这些是公共 API 吗?
  • 是的,但这是 SUN JDK 的旧 API,但由于 Oracle,大多数 JVM 不支持此功能。所以请尝试将其从您的项目中删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多