【问题标题】:How to save an image with transparent background to photo library, Swift?如何将具有透明背景的图像保存到照片库,Swift?
【发布时间】:2021-07-18 21:07:43
【问题描述】:

我正在尝试将一些透明图像保存到照片库,但它们都以白色背景保存。我的资产文件夹中的所有图像都是 png 文件。

func saveWp() {

    for number in count{
        let wp = UIImage(named: "neon\(number)")!
        let imageSaver = ImageSaver()
        imageSaver.writeToPhotoAlbum(image: wp)
    }
}

class ImageSaver: NSObject {
func writeToPhotoAlbum(image: UIImage) {
    UIImageWriteToSavedPhotosAlbum(image, self, #selector(saveError), nil)
}

@objc func saveError(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
    print("Save finished!")
}

}

【问题讨论】:

  • 你见过透明照片吗?
  • 照片里不能存png图片,都是HEIC格式的,就算存灯房也得有背景,等贴到某个地方,手机看不到.

标签: ios swift


【解决方案1】:

为了保留图像的透明部分,您需要包含 Alpha 通道。

只有某些文件格式允许您包含 Alpha 通道。 JPEG 没有。看起来 HEIC 格式确实支持 alpha,但是在谷歌搜索几分钟后,我找不到一种方法来保存带有 alpha 的 HEIC 文件。

PNG 文件格式确实支持 Alpha 通道。您应该能够将图像作为带有 alpha 的 PNG 保存到相机胶卷。查看 UIImage 函数pngData()

如果您使用源图像使用UIImagePNGRepresentation() 创建PNG 版本,您应该能够将其保存到相机胶卷并保留Alpha 通道。 (免责声明:我在another SO post找到了下面的代码,没有测试过。)

let imData = image.pngData()
let image2 = UIImage(data: imData)
UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil)

【讨论】:

  • 在 Swift 5 中,UIImagePNGRepresentation(image)image.pngData() 取代
  • 感谢指正。 (我编辑了我的答案)
猜你喜欢
  • 1970-01-01
  • 2021-08-24
  • 2019-10-17
  • 2014-10-05
  • 2011-09-23
  • 2014-08-07
  • 2012-05-26
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多