如何使用Swift将带有透明背景的图像保存到照片库?

5

我试图将一些透明图片保存到照片库,但它们都被保存为白色背景。所有的图片都是在我的资源文件夹中的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!")
}

}


你曾经见过透明的照片吗? - matt
你不能在照片中保存PNG格式的照片,它们都是HEIC格式的,即使你在Lightroom中保存它,它仍然需要一些背景,直到你将其粘贴到某个地方,否则你无法透过手机看到它。 - MMDev11070
1个回答

7
为了保留图像的透明部分,您需要包含alpha通道。
只有一些文件格式允许您包含alpha通道。JPEG不支持。看起来HEIC格式支持alpha,但是我在搜索几分钟后没有找到保存带有alpha的HEIC文件的方法。
PNG文件格式支持alpha通道。您应该能够将图像保存为带有alpha的PNG,并将其保存到相机胶卷中。请查看UIImage函数pngData()。
如果您使用源图像创建一个PNG版本并使用pngData()保存它,您应该能够将其保存到相机胶卷并保留alpha通道。(免责声明:我在另一个SO帖子中找到了下面的代码,并且没有测试过。我将其更改为使用pngData()而不是UIImagePNGRepresentation()。)
let imData = image.pngData()
let image2 = UIImage(data: imData)
UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil)

在Swift 5中,UIImagePNGRepresentation(image)image.pngData()所取代。 - Ömer Karaca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接