¿Cómo guardar una imagen con fondo transparente en la biblioteca de fotos, Swift?

Dec 28 2020

Estoy tratando de guardar algunas imágenes transparentes en la biblioteca de fotos, pero todas se guardaron con fondo blanco. Todas las imágenes son archivos png en mi carpeta de activos.

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!")
}

}

Respuestas

2 DuncanC Dec 28 2020 at 21:50

Para preservar las partes transparentes de su imagen, debe incluir el canal alfa.

Solo algunos formatos de archivo le permiten incluir un canal alfa. JPEG no lo hace. Parece que el formato HEIC es compatible con alfa, pero no pude encontrar una manera de guardar archivos HEIC con alfa después de unos minutos de búsqueda en Google.

El formato de archivo PNG hace canales alfa apoyo. Debería poder guardar su imagen en el carrete de la cámara como PNG con alfa. Consulte las funciones de UIImage pngData()y UIImagePNGRepresentation().

Si usa su imagen de origen para crear una versión PNG UIImagePNGRepresentation(), debería poder guardarla en el rollo de la cámara y conservar el canal alfa. (Descargo de responsabilidad: encontré el código a continuación en otra publicación de SO y no lo he probado).

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