Wie speichere ich ein Bild mit transparentem Hintergrund in der Fotobibliothek, Swift?
Ich versuche, einige transparente Bilder in der Fotobibliothek zu speichern, aber alle werden mit weißem Hintergrund gespeichert. Alle Bilder sind PNG-Dateien in meinem Assets-Ordner.
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!")
}
}}
Antworten
Um die transparenten Teile Ihres Bildes zu erhalten, müssen Sie den Alphakanal einschließen.
Nur in einigen Dateiformaten können Sie einen Alphakanal einfügen. JPEG nicht. Es sieht so aus, als ob das HEIC-Format Alpha unterstützt, aber ich konnte nach ein paar Minuten Googeln keine Möglichkeit finden, HEIC-Dateien mit Alpha zu speichern.
Das Dateiformat PNG hat die Alphakanäle unterstützen. Sie sollten in der Lage sein, Ihr Bild als PNG mit Alpha auf der Kamerarolle zu speichern. Überprüfen Sie die UIImage-Funktionen pngData()
und UIImagePNGRepresentation()
.
Wenn Sie Ihr Quellbild verwenden, um eine PNG-Version mit zu erstellen UIImagePNGRepresentation()
, sollten Sie es auf der Kamerarolle speichern und den Alphakanal beibehalten können. (Haftungsausschluss: Ich habe den folgenden Code in einem anderen SO-Beitrag gefunden und ihn nicht getestet.)
let imData = UIImagePNGRepresentation(image)
let image2 = UIImage(data: imData)
UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil)