Java修改jpg图片dpi


使用的包的Oracle jdk下的rt.jar,open jdk 下没有该包,使用open jdk的通过项目引入包的方式可以将包导入,但由于jdk环境不同,使用以下代码修改dpi存在报错情况。
代码:

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;    
    public static void handleDpi(File file, int dpi) {
        FileOutputStream fileOutputStream = null;
        try {
            BufferedImage image = ImageIO.read(file);
            fileOutputStream = new FileOutputStream(file);
            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
            JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
            jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
            jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
            jpegEncodeParam.setQuality(1.0f, false);
            jpegEncodeParam.setXDensity(dpi);
            jpegEncodeParam.setYDensity(dpi);
            jpegEncoder.encode(image, jpegEncodeParam);
            image.flush();

        } catch (IOException e) {
            e.printStackTrace(); 
        } finally {
            try {
                if(fileOutputStream != null)
                    fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

注意,当图片由文件流转成jpg格式时,图片位深度为32时,上面的代码会报错,需先将设置图片位深度,代码:

public static BufferedImage changePNGBackgroudColor2(String sourceImage) {
    try {
        File input = new File(sourceImage);
        BufferedImage image = ImageIO.read(input);

        BufferedImage result = new BufferedImage(
                image.getWidth(),
                image.getHeight(),
                BufferedImage.TYPE_INT_RGB);

        Graphics2D graphic = result.createGraphics();
        graphic.drawImage(image, 0, 0, null, null);
        graphic.dispose();
        return result;
    } catch (IOException e) {
        return null;
    }
}

文章作者: W WX
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 W WX !
  目录