Как сохранить изображение с прозрачным фоном в фото-библиотеку Swift?
Я пытаюсь сохранить несколько прозрачных изображений в библиотеке фотографий, но все они сохранены с белым фоном. Все изображения - это 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!")
}
}
Ответы
Чтобы сохранить прозрачные части вашего изображения, вам необходимо включить альфа-канал.
Только некоторые форматы файлов позволяют включать альфа-канал. 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)