背景が透明な画像をフォトライブラリSwiftに保存するにはどうすればよいですか?

Dec 28 2020

いくつかの透明な画像をフォトライブラリに保存しようとしていますが、すべて白い背景で保存されています。すべての画像は私のアセットフォルダ内の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!")
}

}

回答

2 DuncanC Dec 28 2020 at 21:50

画像の透明部分を保持するには、アルファチャネルを含める必要があります。

一部のファイル形式でのみ、アルファチャネルを含めることができます。JPEGはそうではありません。HEIC形式はアルファをサポートしているように見えますが、数分間グーグルした後、アルファ付きのHEICファイルを保存する方法が見つかりませんでした。

PNGファイル形式アルファチャネルをサポートします。画像をアルファ付きのPNGとしてカメラロールに保存できるはずです。UIImage関数pngData()とをチェックしてくださいUIImagePNGRepresentation()

ソース画像を使用してを使用してPNGバージョンを作成するUIImagePNGRepresentation()場合は、それをカメラロールに保存し、アルファチャネルを保持できるはずです。(免責事項:別のSO投稿で以下のコードを見つけましたが、テストしていません。)

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