-2

我设计了一个休息服务来为用户响应存储在数据库中的图像。该服务工作正常。该服务以 jpg 格式响应图像。如果用户上传 jpg 格式的图片,响应也可以,如果图片是其他格式,则响应无法呈现为图片。我需要为所有输入图像类型构建一个 jpg 转换器或编码器。是否有任何可能的方法来实现这一目标。

4

1 回答 1

12

你应该看看ImageIO。它支持读取和写入 JPEG、PNG、BMP、WBMP 和 GIF。

JAI API 还提供 TIFF 支持,我之前也为尼康相机使用过 RAW 插件。

查看使用图像JavaDocs了解更多信息。

更新了示例

没有源图像将无法进行适当的测试,但这是基本的工作流程。

我已经用作File我的输入,但为了演示基本概念,我创建了InputStreamand OutputStream(as ImageIOcan read/write Files)

File inputFile = new File("/path/to/image.png");
File outputFile = new File("Test.jpg");
try (InputStream is = new FileInputStream(inputFile)) {
    BufferedImage image = ImageIO.read(is);
    try (OutputStream os = new FileOutputStream(outputFile)) {
        ImageIO.write(image, "jpg", os);
    } catch (Exception exp) {
        exp.printStackTrace();
    }
} catch (Exception exp) {
    exp.printStackTrace();
}

更新

因此,使用上面的代码,我能够将我在绘画中创建的 PNG 文件转换为 JPG ......

PNG/JPG

在此处输入图像描述在此处输入图像描述

您也可以尝试将输入流和输出流转换为ImageInputStreamand ImageOutputStream,尽管这通常在您想要查找给定图像格式的提供程序时完成。

File inputFile = new File("...");
File outputFile = new File("Test.jpg");
try (InputStream is = new FileInputStream(inputFile)) {
    ImageInputStream iis = ImageIO.createImageInputStream(is);
    BufferedImage image = ImageIO.read(iis);
    try (OutputStream os = new FileOutputStream(outputFile)) {
        ImageOutputStream ios = ImageIO.createImageOutputStream(os);
        ImageIO.write(image, "jpg", ios);
    } catch (Exception exp) {
        exp.printStackTrace();
    }
} catch (Exception exp) {
    exp.printStackTrace();
}
于 2013-01-31T05:40:09.167 回答