dreampiggy / dreampiggy.github.io

DreamPiggy's blog
MIT License
3 stars 1 forks source link

探秘越来越复杂的ImageIO框架 | 小猪的博客 #37

Open dreampiggy opened 1 year ago

dreampiggy commented 1 year ago

https://dreampiggy.com/2022/11/07/%E6%8E%A2%E7%A7%98%E8%B6%8A%E6%9D%A5%E8%B6%8A%E5%A4%8D%E6%9D%82%E7%9A%84ImageIO%E6%A1%86%E6%9E%B6/

ImageIO是Apple提供的上层框架,用于处理常见图像格式的编解码,以抽象的Source-Destination设计来提供了诸如从图像压缩数据解析得到CGImage,从CGImage编码得到压缩数据,甚至是从一个图像格式(JPEG)转码到另一个图像格式(HEIF)的能力 ImageIO定位是上层框架,封装了诸多的苹果的底层解码器,开源编解码器,硬件HEVC/ProRes加速器等等底层细节,

Luyakus commented 1 year ago

写的非常棒, 再问下, 作者截图中的反汇编工具是什么软件

dreampiggy commented 1 year ago

@Luyakus https://www.hopperapp.com/

Luyakus commented 1 year ago

多谢啦

rxg9527 commented 11 months ago

今天又踩了一次iOS内置WebP解码库的坑,使用iOS内置的解码一张WebP动图有撕裂现象,Android和iOS14以前的SDWebImage内置解码库就没有这个问题…

dreampiggy commented 11 months ago

今天又踩了一次iOS内置WebP解码库的坑,使用iOS内置的解码一张WebP动图有撕裂现象,Android和iOS14以前的SDWebImage内置解码库就没有这个问题…

已知问题,并且我在Wiki里提过(https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder) 只是没人看而已。

原因是Apple的Animated WebP的渲染算法,和Google的推荐实现,存在一个细小的差异(也就是Apple没按标准实现),但是我的实现是遵循的。

你可以在全OS版本都使用SDWebImageWebPCoder,而不需要单独用那个AWebPCoder(本身我记得也不是默认加入的Coder)

@rxg9527 https://github.com/SDWebImage/SDWebImage/issues/3558 我先高亮吧

ijunfly commented 11 months ago

今天遇到一个webp问题, CollectionView 每个cell都展示webp动画, 一屏大概六个. iOS17, SDWebImageWebPCoder , 5.15.5 正常渲染, 滑动collectionView不卡, 升级到最新的5.18.1 SDWebImageWebPCoder 不展示, 使用AWebPCoder 可以展示, 但是滑动有点卡. 在想是继续保持5.15.5还是...

dreampiggy commented 11 months ago

@ijunfly 你先用iOS 16测试,避免命中iOS 17的UIGraphicsImageRenderer的Bug (或者自己手动加一个context, imageForceDecodePolicy = .never

如果能复现,提供Demo,SDWebImageWebPCoder仓的代码是开源的都能修复

AWebP是Apple闭源的,你无论如何都修复不了

angelen10 commented 2 months ago

@dreampiggy

今天又踩了一次iOS内置WebP解码库的坑,使用iOS内置的解码一张WebP动图有撕裂现象,Android和iOS14以前的SDWebImage内置解码库就没有这个问题…

已知问题,并且我在Wiki里提过(https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder) 只是没人看而已。

原因是Apple的Animated WebP的渲染算法,和Google的推荐实现,存在一个细小的差异(也就是Apple没按标准实现),但是我的实现是遵循的。

你可以在全OS版本都使用SDWebImageWebPCoder,而不需要单独用那个AWebPCoder(本身我记得也不是默认加入的Coder)

@rxg9527 https://github.com/SDWebImage/SDWebImage/issues/3558 我先高亮吧

不行啊,用 SDWebImageWebPCoder 我测试过,稍微大一些的 webp 图片(5M+),它的解码会比较慢,没有 AWebPCoder 快,我的测试环境是 iOS 15、iOS 16

dreampiggy commented 2 months ago

@dreampiggy

今天又踩了一次iOS内置WebP解码库的坑,使用iOS内置的解码一张WebP动图有撕裂现象,Android和iOS14以前的SDWebImage内置解码库就没有这个问题…

已知问题,并且我在Wiki里提过(https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder) 只是没人看而已。 原因是Apple的Animated WebP的渲染算法,和Google的推荐实现,存在一个细小的差异(也就是Apple没按标准实现),但是我的实现是遵循的。 你可以在全OS版本都使用SDWebImageWebPCoder,而不需要单独用那个AWebPCoder(本身我记得也不是默认加入的Coder) @rxg9527 SDWebImage/SDWebImage#3558 我先高亮吧

不行啊,用 SDWebImageWebPCoder 我测试过,稍微大一些的 webp 图片(5M+),它的解码会比较慢,没有 AWebPCoder 快,我的测试环境是 iOS 15、iOS 16

提供一个Case的WebP URL,以及你的复现环境。