什么类用于位图转换& Java 1.6中的元数据?

时间:2014-10-14 23:11:42

标签: java image bitmap metafile

我们有一些旧代码(Java 1.2)大量使用JAI_IO进行图像处理。我们现在是Java 1.6,因此我们不再需要它。首先,我还应该使用BufferedImage吗?还是有更好的课程?我基本上需要做的是:

  1. 将位图从一种格式转换为另一种格式(通常为PNG)。
  2. 获取图像的元数据:像素大小,DPI和&位图格式。
  3. 调整图片大小。
  4. 将图像绘制到Graphics2D对象。
  5. 遍历位图中的像素以读取和/或设置它们(这可能很慢 - 很少使用)。
  6. 我知道答案是“哈哈哈”,但是有一个类会将元文件转换为位图吗?

    谢谢 - 戴夫

1 个答案:

答案 0 :(得分:0)

我使用ImageIOjavax.imageio API来阅读图片并调整DPI / PPI(请参阅下面的示例),可能还有像imgscalr这样的包thumbnailator根据您的需求/偏好调整大小。

代码如下:

// input is typically a File or InputStream

// Wrap in ImageInputStream
ImageInputStream stream = ImageIO.createImageInputStream(input);

// Obtain reader
ImageReader reader = ImageIO.getImageReaders(stream).next(); // In real code, test for presence
reader.setInput(stream);

String formatName = reader.getFormatName(); // Get the format name

ImageReadParam param = reader.getDefaultReadParam();

// ... modify params as you see fit, or just go with defaults

IIOImage image = reader.readAll(0, param);

RenderedImage red = image.getRenderedImage();
BufferedImage buf = (BufferedImage) red; // In real code, test if it's safe, or convert

// .. pas buf along to imgscalr or thumnailator

image.setRenderedImage(buf);

IIOMetadata meta = image.getMetadata();

// ... modify DPI in meta data

ImageWriter writer = reader.getImageWriter();
writer.write(null, image, null); // Or modify write params if you need (last parameter)

您可以看到modifying the DPI for JPEG files here的示例。