Java中的图像转换

Java中的图像转换,java,image,Java,Image,我设计了一个rest服务来为用户响应存储在数据库中的图像。服务很好。该服务以jpg格式响应图像。如果用户以jpg格式上传图像,则响应也很好,如果图像是其他格式,则响应无法呈现为图像。我需要为所有输入图像类型构造一个jpg转换器或编码器。是否有任何可能的方法来实现这一点。您应该看看ImageIO。它支持读写JPEG、PNG、BMP、WBMP和GIF JAI API还提供TIFF支持,我以前也为尼康相机使用过原始插件 有关更多信息,请查看和查看 用示例更新 没有源映像就不可能进行正确的测试,但这是基

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

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

JAI API还提供TIFF支持,我以前也为尼康相机使用过原始插件

有关更多信息,请查看和查看

用示例更新

没有源映像就不可能进行正确的测试,但这是基本的工作流程

我使用了
File
作为输入,但为了演示基本概念,我创建了
InputStream
OutputStream
(因为
ImageIO
可以读/写
文件
s)

已更新

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

PNG/JPG

您还可以尝试将输入流和输出流转换为
ImageInputStream
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();
}

是的,有一种可能的方法。您尝试了什么?您尝试在哪里渲染图像?服务返回图像是否正常?有任何错误消息吗?嗨,MadProgrammer,我试过使用ImageIO。我已经读取了输入流,创建了一个BuffereImage,并创建了所需的格式。输入文件为PNG,输出文件为JPG。输入文件有一条带白色背景的黑色线条,输出文件包含带橙色背景的线条。感谢程序员的更新。但是当我们使用由ms paint创建的png图像时,同样的代码不起作用。甚至我也使用了相同的代码段。我已经使用使用MS Paint创建的PNG对其进行了测试,没有任何问题。首先尝试一个独立/独立测试,看看是否有什么不同,可能是
InputStream
被损坏了…可能需要您先完全上传文件,然后再转换它+1个伟大的示例+屏幕@wekselva见备选方法(滚动至答案底部)
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();
}