浏览器针对Jfif1.01格式的兼容性问题引发的问题
编者:李国帅
qq:9611153 微信lgs9611153
时间:2019/8/13
调试问题有时候就像是在破案,曲曲折折的也不一定能找到答案。
问题
腾讯tim的android端拍照发送Jpg图片,然后使用im的web端(Google浏览器)查看,缩略图可显示,放大图不可显示。
解决流程
阶段
1、
测试:缩略图和放大图域名不同
结论,可能是web跨域问题
2、
测试:ios端拍照上传图片,web端可以查看大图
结论,图片问题
3、
测试:android端发送的本机图片,web端可以查看大图。可以查看的图片和不可查看的图片域名相同。
结论,排除跨域问题
4、
测试:web端接收大图图片,重新在android端发送,web端接收后不能查看。
结论,tim文件服务器图片问题。
5、
测试:android拍照发送的图片较小,本机图片较大
结论,大图片可以正常查看。
6、
测试:android拍照发送图片,然后在web端不能查看,下载该图片。在图片查看器正常。
结论,图片没问题。
7、
测试:android拍照发送图片,然后在web端(火狐,QQ浏览器)在正常。
结论,浏览器问题。
8、
测试:android拍照发送图片,使用android studio的device file explorer把该图片下载到PC。
结论,该图片有问题。后来发现从device file explorer下载的图片因为权限不够,图片的EOI丢失。
ERROR: Early EOF - file may be missing EOI
(基于错误的观察,会得出错误的结论,建立在错误观点之上的任何推理都可以认为是错误的。)
9、
测试:android拍照发送图片,直接保存到sdcard,把该图片下载到PC。
结论,该图片无问题。
10、
测试:新下载Google浏览器,打开IMweb端查看图片,直接android拍照上传图片,可以正常查看。
结论,某些版本的Google浏览器对某些格式的jpg图片存在兼容性问题。
11、
测试:查看发送端正常的图片和不正常的图片,比较其属性。
不可打开的jpg
*** Marker: APP0 (xFFE0) ***
OFFSET: 0x00000002
length = 16
identifier = [JFIF]
version = [1.1]
density = 1 x 1 (aspect ratio)
thumbnail = 0 x 0
可打开的jpg
*** Marker: APP0 (xFFE0) ***
OFFSET: 0x0000056C
length = 16
identifier = [JFIF]
version = [1.2]
density = 1 x 1 (aspect ratio)
thumbnail = 0 x 0
结论,Google浏览器Jfif1.01版本的jpg图片存在兼容性问题。
Bitmap.compress只能转换为Jfif1.01格式,如果要转换为Jfif1.02必须使用第三方jpeg库。或者是先拍照保存到本地,然后上传。
解决方法
1、产品部说服用户使用指定浏览器
2、如果非要使用Google浏览器,使用兼容性好的稳定版本。
3、请求腾讯修改IM文件服务器的图片格式,将上传的图片转换为常用Jfif1.02格式。
4、APP上传图片时,如果要发送jpg,那么使用Jfif1.02格式。(总不至于还要进行Jfif格式转换吧?)
结果
不过,在左右为难的时候,好在问题消失了,可能腾讯的IM文件服务器程序已经解决了这个问题。
也搞不清楚,追踪了2天,算不算是毫无价值的牺牲。