gpt4 book ai didi

Java:检测图像是 GIF 还是 sTIFF 并转换为 JPG

转载 作者:行者123 更新时间:2023-11-30 09:55:40 26 4
gpt4 key购买 nike

我有一个 Java 网站,现在我已经构建了一个 uploader ,对 JPG 图像的验证已经完成,并且还有一种将其保存到服务器的方法。

但现在我需要使用 isGIF 创建一个实用程序类,isTIFF 通过 byte[] 验证它们并将该 byte[] 转换为 java.awt.Image 以保存为 JPG

所以基本上我需要 boolean isGIF(byte[]), boolean isTIFF(byte[]), java.awt.Image convertGIF(byte[] )java.awt.Image convertTIFF(byte[])

但是我不知道该怎么做,有人可以帮我吗?

谢谢!

最佳答案

您可以考虑使用 mime-utils。它基本上使用与 unix file 命令使用的相同检测为您提供给定 byte[] 或流源的 mime 类型。

http://www.medsea.eu/mime-util (目前似乎不可用,请尝试查看谷歌缓存以获取信息)。

您还可以考虑使用 ImageIO.read 简单地解析每个图像,然后使用 ImageIO.write 重写它们。这也适用于 jpeg 图像,尽管它不是完全有效。如果您想同时对图像进行缩放、裁剪或加水印,这将是一个合适的解决方案。由于这是 Web 提交的数据,因此有一定的理由试图将文件解析为图像以确保它确实是图像,而不是恶意文件类型。

ImageIO 非常智能,因此您不必知道数据的开头类型。如果数据格式错误,它将通过异常处理,因此这可以确保您的图像数据有效。

JPEG 文件显然以 0xFFD8 开头,因此您可以在代码中检查它。

例如,简单地重新编码每张看起来不像 jpeg 的图像:

byte[] bytes = new byte[1024]; //your input
byte[] result = bytes;
if( bytes[0] != 0xFF || bytes[1] != 0xD8 )
{
BufferedImage image = ImageIO.read( new ByteArrayInputStream( bytes ) );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpeg", baos );
result = baos.toByteArray();
}

关于Java:检测图像是 GIF 还是 sTIFF 并转换为 JPG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com