-3
입력 JPEG 이미지의 PPI/DPI를 높이고 JPEG로 저장해야하는 Java 프로그램을 만들고 있습니다.jpeg 이미지 ppi 또는 dpi를 Java에서 늘리는 방법은 무엇입니까?
실용적인 사람이라면 누구에게 어떤 도움을 줄 수 있습니까?
입력 JPEG 이미지의 PPI/DPI를 높이고 JPEG로 저장해야하는 Java 프로그램을 만들고 있습니다.jpeg 이미지 ppi 또는 dpi를 Java에서 늘리는 방법은 무엇입니까?
실용적인 사람이라면 누구에게 어떤 도움을 줄 수 있습니까?
"jpeg"
을 형식 이름으로 사용해야하고 JPEG 관련 메타 데이터로 작업하려면 setDPI
메서드를 구현해야한다는 점을 제외하면 this answer과 같이 사용할 수 있습니다.
public static final String DENSITY_UNITS_NO_UNITS = "00";
public static final String DENSITY_UNITS_PIXELS_PER_INCH = "01";
public static final String DENSITY_UNITS_PIXELS_PER_CM = "02";
private BufferedImage gridImage;
private void saveGridImage(File output) throws IOException {
output.delete();
final String formatName = "jpeg";
for (Iterator<ImageWriter> iw = ImageIO.getImageWritersByFormatName(formatName); iw.hasNext();) {
ImageWriter writer = iw.next();
ImageWriteParam writeParam = writer.getDefaultWriteParam();
ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB);
IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, writeParam);
if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) {
continue;
}
setDPI(metadata);
final ImageOutputStream stream = ImageIO.createImageOutputStream(output);
try {
writer.setOutput(stream);
writer.write(metadata, new IIOImage(gridImage, null, metadata), writeParam);
} finally {
stream.close();
}
break;
}
}
private static void setDPI(IIOMetadata metadata) throws IIOInvalidTreeException {
String metadataFormat = "javax_imageio_jpeg_image_1.0";
IIOMetadataNode root = new IIOMetadataNode(metadataFormat);
IIOMetadataNode jpegVariety = new IIOMetadataNode("JPEGvariety");
IIOMetadataNode markerSequence = new IIOMetadataNode("markerSequence");
IIOMetadataNode app0JFIF = new IIOMetadataNode("app0JFIF");
app0JFIF.setAttribute("majorVersion", "1");
app0JFIF.setAttribute("minorVersion", "2");
app0JFIF.setAttribute("thumbWidth", "0");
app0JFIF.setAttribute("thumbHeight", "0");
app0JFIF.setAttribute("resUnits", DENSITY_UNITS_PIXELS_PER_INCH);
app0JFIF.setAttribute("Xdensity", String.valueOf(300));
app0JFIF.setAttribute("Ydensity", String.valueOf(300));
root.appendChild(jpegVariety);
root.appendChild(markerSequence);
jpegVariety.appendChild(app0JFIF);
metadata.mergeTree(metadataFormat, root);
}
이 코드는 PPI를 300x300으로 설정하지만이 변수를 만들 수도 있습니다.
ppi/dpi는 단지 변환 요소 일뿐입니다. 이미지에 몇 개의 픽셀이 있는지는 바뀌지 않습니다 ... 1 dpi 또는 (무한대) dpi이든 200x200 jpeg는 200x200입니다. –
파인트 병으로 쿼트를 얻을 수 없으며 파인트 포트에서 쿼트를 얻을 수 없습니다. 크기를 늘리고 보간을 사용할 수 있지만 누락 된 픽셀을 정확하게 재현 할 수있는 것은 없습니다. – EJP