0

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

  1. 将位图从一种格式转换为另一种格式(通常为 PNG)。
  2. 获取图像的元数据:像素大小、DPI 和位图格式。
  3. 调整图像大小。
  4. 将图像绘制到 Graphics2D 对象。
  5. 遍历位图中的像素以读取和/或设置它们(这可能很慢 - 很少使用)。

我知道答案是“哈哈哈”,但是有没有一个类可以将元文件转换为位图?

谢谢 - 戴夫

4

1 回答 1

0

我会使用API 来读取图像ImageIOjavax.imageio调整 DPI/PPI(请参见下面的示例),并且可能会使用imgscalrthumbnailator之类的包来调整大小,具体取决于您的需求/偏好。

代码类似于:

// 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)

您可以在此处查看为 JPEG 文件修改 DPI的示例。

于 2014-10-17T16:17:53.353 回答