java设置png dpi_图片PNG,JPEG DPI 调整
时间: 2024-03-22 07:37:11 浏览: 15
你可以使用 Java 的 ImageIO 类来读取和写入 PNG 和 JPEG 图像,并且可以设置图像的 DPI。具体实现步骤如下:
1. 读取 PNG 或 JPEG 图像:
```java
File imageFile = new File("image.png");
BufferedImage image = ImageIO.read(imageFile);
```
2. 设置 DPI:
```java
IIOMetadata metadata = ImageIO.getMetadata(image);
IIOMetadataNode standardTree = (IIOMetadataNode) metadata.getAsTree(metadata.getNativeMetadataFormatName());
IIOMetadataNode physNode = new IIOMetadataNode("javax_imageio_1.0");
physNode.setAttribute("dpiWidth", "300"); // 设置水平 DPI
physNode.setAttribute("dpiHeight", "300"); // 设置垂直 DPI
standardTree.appendChild(physNode);
metadata.mergeTree(metadata.getNativeMetadataFormatName(), standardTree);
```
3. 写入 PNG 或 JPEG 图像:
```java
File outputImageFile = new File("output.png");
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writer.setOutput(new MemoryCacheImageOutputStream(baos));
IIOImage imageWithMetadata = new IIOImage(image, null, metadata);
writer.write(null, imageWithMetadata, writeParam);
Files.write(outputImageFile.toPath(), baos.toByteArray());
```
注意:在上述代码中,设置 DPI 的实现方式适用于 JPEG 和 PNG 图像。但是对于其他图像格式,可能需要使用不同的方式来设置 DPI。