Jak zapisać obraz z przezroczystym tłem w bibliotece zdjęć, Swift?

Dec 28 2020

Próbuję zapisać kilka przezroczystych obrazów w bibliotece zdjęć, ale wszystkie zostały zapisane z białym tłem. Wszystkie obrazy są w pliku png w moim folderze zasobów.

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

}

Odpowiedzi

2 DuncanC Dec 28 2020 at 21:50

Aby zachować przezroczyste części obrazu, musisz uwzględnić kanał alfa.

Tylko niektóre formaty plików pozwalają na dołączenie kanału alfa. JPEG nie. Wygląda na to, że format HEIC obsługuje alfa, ale nie mogłem znaleźć sposobu na zapisanie plików HEIC z alfą po kilku minutach wyszukiwania w Google.

Format pliku PNG robi kanałów wsparcie alfa. Powinieneś móc zapisać obraz w rolce z aparatu jako plik PNG z alfą. Sprawdź funkcje UIImage pngData()i UIImagePNGRepresentation().

Jeśli używasz obrazu źródłowego do tworzenia wersji PNG za pomocą UIImagePNGRepresentation(), powinieneś być w stanie zapisać go w rolce z aparatu i zachować kanał alfa. (Zastrzeżenie: znalazłem poniższy kod w innym poście SO i nie testowałem go.)

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