Java ImageIO保存回原始大小
我一直在网上寻找一些解决方案,但我仍然没有找到我的问题的答案 我一直在工作或做一个程序,从我的电脑中获取一个图像文件,然后使用Java ImageIO保存回原始大小,java,graphics,awt,graphics2d,javax.imageio,Java,Graphics,Awt,Graphics2d,Javax.imageio,我一直在网上寻找一些解决方案,但我仍然没有找到我的问题的答案 我一直在工作或做一个程序,从我的电脑中获取一个图像文件,然后使用Java Graphics进行编辑,添加一些文本/对象等。之后,Java ImageIO将保存新修改的图像 到目前为止,我能够做得很好,但我遇到了一个关于图像大小的问题。原始图像和修改后的图像大小不同 原来的是一幅2x3inches的图像,而修改后的那幅图像应该是2x3英寸,但很遗憾,它得到了8x14inches。所以,它比原来的更大了 什么样的解决方案/代码可以让我输出
Java Graphics
进行编辑,添加一些文本/对象等。之后,Java ImageIO
将保存新修改的图像
到目前为止,我能够做得很好,但我遇到了一个关于图像大小的问题。原始图像和修改后的图像大小不同
原来的是一幅2x3
inches的图像,而修改后的那幅图像应该是2x3英寸,但很遗憾,它得到了8x14
inches。所以,它比原来的更大了
什么样的解决方案/代码可以让我输出2x3英寸的图像,并且仍然具有“良好的质量”
更新:
这是我使用的代码
public Picture(String filename) {
try {
File file = new File("originalpic.jpg");
image = ImageIO.read(file);
width = image.getWidth();
}
catch (IOException e) {
throw new RuntimeException("Could not open file: " + filename);
}
}
private void write(int id) {
try {
ImageIO.write(image, "jpg", new File("newpic.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
第二次更新:
我现在知道新形象有什么问题了。当我在Photoshop中查看它时,它的图像分辨率与原来的不同。原始图像的分辨率为300像素/英寸,而新图像的分辨率为72像素/英寸
如何使用Java更改分辨率?要设置(JFIF段的)图像分辨率,您可能可以使用JPEG的
iimetatada
大致如下:
public class MetadataTest {
public static void main(String[] args) throws IOException {
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR);
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("foo.jpg")));
ImageWriteParam param = writer.getDefaultWriteParam();
IIOMetadata metadata = writer.getDefaultImageMetadata(ImageTypeSpecifier.createFromRenderedImage(image), param);
IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(metadata.getNativeMetadataFormatName());
IIOMetadataNode jfif = (IIOMetadataNode) root.getElementsByTagName("app0JFIF").item(0);
jfif.setAttribute("resUnits", "1");
jfif.setAttribute("Xdensity", "300");
jfif.setAttribute("Ydensity", "300");
metadata.mergeTree(metadata.getNativeMetadataFormatName(), root);
writer.write(null, new IIOImage(image, null, metadata), param);
}
}
注意:此代码不应逐字使用,但添加迭代、错误处理、流关闭等操作会使示例过于混乱。
有关元数据格式的文档,以及您可以控制的选项,请参阅。问题有点笼统,但我猜您正在使用不同DPI设置的格式进行保存。发布一些代码,我们可以尝试提供帮助。请发布您的问题。奇怪。图形2D上的每个变换都应使用逆变换进行镜像。我不知道,但这似乎是唯一的解释。需要剪辑吗?我编辑了你的问题,添加了一个..问题。如果这不是问题,请相应地用你自己的。我更新了我上面的帖子,并添加了我使用的代码。