Comment enregistrer une image avec un fond transparent dans la photothèque, Swift?

Dec 28 2020

J'essaie d'enregistrer des images transparentes dans la photothèque, mais elles ont toutes été enregistrées avec un fond blanc. Toutes les images sont des fichiers png dans mon dossier de ressources.

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

}

Réponses

2 DuncanC Dec 28 2020 at 21:50

Afin de préserver les parties transparentes de votre image, vous devez inclure le canal alpha.

Seuls certains formats de fichiers vous permettent d'inclure un canal alpha. JPEG ne le fait pas. Il semble que le format HEIC prend en charge alpha, mais je n'ai pas trouvé de moyen de sauvegarder les fichiers HEIC avec alpha après quelques minutes de recherche sur Google.

Le format de fichier PNG prend en charge les canaux alpha. Vous devriez pouvoir enregistrer votre image sur la pellicule au format PNG avec alpha. Découvrez les fonctions UIImage pngData()et UIImagePNGRepresentation().

Si vous utilisez votre image source pour créer une version PNG en utilisant UIImagePNGRepresentation(), vous devriez pouvoir l'enregistrer dans la pellicule et conserver le canal alpha. (Clause de non-responsabilité: j'ai trouvé le code ci-dessous dans un autre article SO et je ne l'ai pas testé.)

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