最近项目中遇到要求图片格式相对准确,部分功能需要指定图片格式。前人造轮,后人乘凉。
这里记录一下,方便以后查阅。
1、验证图片格式。
之前做的验证比较简单,只是验证图片文件后缀。但是与pc端对接的时候,他们会验证图片头信息与后缀,不一致会导致图片打不开。(通过文件头判断图片格式算是比较准确的,当然不排除恶意修改文件头,,,此处找不到表情包很苦恼)
废话不多说直接贴代码:
获取文件的byte数组,在获取文件十六进制头信息。
我这里验证的是 jpg格式,对应的文件头为 ff d8 ff e0。这个可以在网上搜到。
2、转换图片格式。
这里用到的是 javax.imageio.ImageIO 包的 ImageIO 类。ImageIO.read()。(该方法支持
File/InputStream/URL/ImageInputStream。)读取文件。
然后使用 ImageIO.write() 转换文件格式。(方法参数1: RenderedImage类型,调用read方法的返回。参数2:String类型,指定转换后的图片格式。方法参数3: 文件输出,支持类型:File/ImageOutputStream/OutputStream)
下面代码以url为例。
返回byte为转换格式后的文件流。