longitachi / ZLPhotoBrowser

Wechat-like image picker. Support select photos, videos, gif and livePhoto. Support edit image and crop video. 微信样式的图片选择器,支持预览/相册内拍照及录视频、拖拽/滑动选择,编辑图片/视频,支持多语言国际化等功能;
MIT License
4.71k stars 950 forks source link

keep alpha channel #818

Closed hstdt closed 1 year ago

hstdt commented 1 year ago

优化带有alpha通道的png图片展示和编辑

  1. 让png图片在Preview页面可以显示alpha通道。
  2. 编辑后可保留alpha channel,尝试解决 https://github.com/longitachi/ZLPhotoBrowser/issues/170 。但是对于非编辑情况的图片保存可能考虑的不全面,因为会把png格式作为默认的保存格式。

这两处修改都会导致之前的功能发生变化,可能需要新增配置字段。

longitachi commented 1 year ago

https://github.com/longitachi/ZLPhotoBrowser/blob/9d3525f10a3bff10de1a4a77ebedaab7d36ef58e/Sources/General/ZLPhotoManager.swift#L51 这里我添加了一个图片是否有透明通道的判断

hstdt commented 1 year ago

这个方法实际上会把jpeg也识别出有alpha通道,比如下面这张图。

env: (iPhone 14 plus + 16.4),alwaysRequestOriginal=true

alpha channel

感觉最直接的是从data直接判断类型(isGif也能用),然后一直保留到最后(逻辑会复杂不少) https://stackoverflow.com/a/48842900/4728060

或者新增一个过渡配置项,比如keepAlphaChannel,如果用户设置为true,才会启用这次提交涉及的代码。直到有一个hasAlpha方法,或者uikit像appkit那样提供一个

hstdt commented 1 year ago

复现步骤 edit之后保存断点

CleanShot 2023-05-10 at 16 01 52
longitachi commented 1 year ago

我也试了,编辑图片保存时候,会把任何没有alpha通道的保存成带alpha通道的。ZLEditImageViewController里面的buildImage生成的图片就有alpha通道了。 现在这层判断先把相机拍照的过滤了,后面再找下更好的解决办法~