Como salvar uma imagem com fundo transparente na biblioteca de fotos, Swift?
Estou tentando salvar algumas imagens transparentes na biblioteca de fotos, mas todas elas foram salvas com fundo branco. Todas as imagens são arquivo png na minha pasta de ativos.
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!")
}
}
Respostas
Para preservar as partes transparentes de sua imagem, você precisa incluir o canal alfa.
Apenas alguns formatos de arquivo permitem incluir um canal alfa. JPEG, não. Parece que o formato HEIC é compatível com alfa, mas não consegui encontrar uma maneira de salvar arquivos HEIC com alfa após alguns minutos de pesquisa no Google.
O formato de arquivo PNG oferece suporte a canais alfa. Você deve conseguir salvar sua imagem no rolo da câmera como PNG com alfa. Confira as funções UIImage pngData()
e UIImagePNGRepresentation()
.
Se você usar sua imagem de origem para criar uma versão PNG usando UIImagePNGRepresentation()
, você deve ser capaz de salvá-la no rolo da câmera e preservar o canal alfa. (Aviso de isenção de responsabilidade: encontrei o código abaixo em outra postagem do SO e não o testei.)
let imData = UIImagePNGRepresentation(image)
let image2 = UIImage(data: imData)
UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil)