Как сохранить изображение с прозрачным фоном в фото-библиотеку 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 с альфа-каналом после нескольких минут поиска в Google.

Формат PNG файлов делает поддержку альфа - каналов. Вы должны иметь возможность сохранить свое изображение в альбоме камеры как PNG с альфа-каналом. Ознакомьтесь с функциями UIImage pngData()и UIImagePNGRepresentation().

Если вы используете исходное изображение для создания версии PNG UIImagePNGRepresentation(), вы сможете сохранить его в альбоме камеры и сохранить альфа-канал. (Отказ от ответственности: я нашел приведенный ниже код в другом сообщении SO и не тестировал его.)

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