捋顺一下浏览超大图片横屏图像失真问题

下午接到个任务,好信云会议在IM中浏览超大全景图片,横屏后浏览图片放大,图片严重失真问题。

效果图片

思路1

以为是加载的缩略图,屡一下代码,

 GlideApp.with(ImageFragment.this).load(src).thumbnail(GlideApp.with(ImageFragment.this).load(animateUrl).onlyRetrieveFromCache(true).override(HxContants.OVERSIZE)).placeholder(R.drawable.cloud_ic_image_default).into(imgPhoto);

用了个thumbnail,没啥问题,但是要排除问题,所以把thumbnail去掉,变成了

GlideApp.with(ImageFragment.this).load(src).placeholder(R.drawable.cloud_ic_image_default).into(imgPhoto);

还是有问题,明明下载的是原图片,妈的

思路2

是不是svg的展示控件缩放的问题

查了一下svg的展示控件,NoteGraphView,继承自PhotoView,PhotoView继承自ImageView,但是其中有大量图片缩放的方法,为了确认是不是在图片缩放过程中出现了问题,将NoteGraphView直接替换为ImageVIew进行展示。

还tm有问题,那就不是NoteGraphView控件的问题。

思路3

是不是图片展示控件自动给放大缩小了,这顿查找Glide的相关方法,也没查出来个123,但是官方文档也说明了,系统会自动对BitMap进行放大缩小,降低内存,来进行显示

换控件,妈的

换ImageLoader,也那玩意。照样模糊,想哭。

思路4

既然不是控件和三方的问题,那就找找图片本身的问题,查看一下原图片啥样

下载个原图片看看,中间有个小插曲,用浏览器get方式请求图片地址请求不到,问了一下,需要用session,遂用postman,在header中添加了个cookie字段,就成功了,下载下来的图片这么大:

大小是9.29MB,我擦擦擦擦擦擦擦擦擦。

那就是大图片缩小的问题了

思路5

这个测试手机1920X1080,初始纵向查看的时候宽就变成了1080,高就变成了更低。直接缩小了15076/1080=14倍

切换横屏后能好一些,15076/1920=8倍,但是查找代码,横屏后不重新调用生命周期,图片不重新加载,那么横屏后用的图片,还是缩小14倍的图片

把AndroidManifest.xml中横屏后不重新加载生命周期的配置去掉

android:configChanges="screenSize|keyboardHidden|orientation"

去掉后效果好很多,如图:

但还是看不清,没有iPhone看的清楚,问了一下提出这个问题的ios开发人员,他的是iPhone8plus,分辨率是2208X1242,图片缩小的倍数,要比我这个小,而且iPhone的屏幕像素密度比锤子手机高很多,所以肯定比锤子手机显示的图片质量好。

为了验证我的想法,用我的S8Plus实验,分辨率是2960X1440,缩小15076/2960=5倍,效果肯定比iPhone要好,实际测试如图:

和我想得一样,这张图片的放大倍数要比上面测试机的倍数大,不论是‘严禁攀爬’四个字还是人物轮廓,都比上面的图片清楚多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值