java实现修改图片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.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class DPIHandleHelper {
private static int DPI = 300;

public static void main(String[] args) {
    String path = "C:\\test.jpg";
    File file = new File(path);
    handleDpi(file, 300, 300);
}

/**
 * 改变图片DPI
 *
 * @param file
 * @param xDensity
 * @param yDensity
 */
public static void handleDpi(File file, int xDensity, int yDensity) {
    try {
        BufferedImage image = ImageIO.read(file);
        JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));
        JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
        jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
        jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
        jpegEncodeParam.setQuality(0.75f, false);
        jpegEncodeParam.setXDensity(xDensity);
        jpegEncodeParam.setYDensity(yDensity);
        jpegEncoder.encode(image, jpegEncodeParam);
        image.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

您可以使用以下代码将图片 DPI 从 72 调整为 300: ```java import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageIODemo { public static void main(String[] args) throws IOException { File inputFile = new File("input.jpg"); BufferedImage inputImage = ImageIO.read(inputFile); // 设置目标 DPI int dpi = 300; // 计算目标像素大小 double pixelWidth = inputImage.getWidth() * 72 / dpi; double pixelHeight = inputImage.getHeight() * 72 / dpi; // 创建一个新的 BufferedImage,设置图像类型为 TYPE_INT_RGB BufferedImage outputImage = new BufferedImage((int) pixelWidth, (int) pixelHeight, BufferedImage.TYPE_INT_RGB); // 绘制原始图像到新的 BufferedImage outputImage.createGraphics().drawImage(inputImage, 0, 0, (int) pixelWidth, (int) pixelHeight, null); // 将新的 BufferedImage 保存为文件 File outputFile = new File("output.jpg"); ImageIO.write(outputImage, "jpg", outputFile); } } ``` 在上面的代码中,首先读取输入图像 `inputImage`,然后计算目标 DPI(在本例中设置为 300)。接下来,通过计算目标像素大小,创建一个新的 `BufferedImage`,类型为 `TYPE_INT_RGB`。最后,将原始图像绘制到新的 `BufferedImage` 中,并将其保存为输出文件 `output.jpg`。 请注意,这种方法可能会导致图像质量的损失,因为它需要将原始图像重新采样为不同的像素大小。如果您需要在不损失图像质量的情况下更改 DPI,请考虑使用专业的图像处理软件。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值