在调整大小后,如何将java中图像的DPI从96更改为300?

在调整大小后,如何将java中图像的DPI从96更改为300?,java,Java,我有一个JPEG图像,在调整大小后,我想在Java中将同一图像的DPI从96更改为300。我的代码: public BufferedImage resizeImageWithHint(BufferedImage originalImage, int type) { BufferedImage resizedImage = new BufferedImage(177, 177, type); Graphics2D g = resizedImage.createGraphics();

我有一个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像素。@吉尔伯特·勒布朗感谢你的评论,但是我想把200×200的PX图像转换成177×177像素的300 dPI。这在java中是如何实现的?那么您的200x200图像具有96 dpi,而177x177图像具有300 dpi?要从何处获取要生成的其他像素的信息?插值?@BhathiyaPerera任何库或API都无法神奇地添加原始图像中没有的分辨率。通过调整分辨率,您已经放弃了一些分辨率。它不会再回来了。它看起来像是来自
com.sun.image.codec.jpeg
包-这些是公共API吗?是的,但这是sun JDK的旧API,但由于Oracle的原因,大多数JVM都不受支持。因此,请尝试将其从项目中删除。
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();