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