วิธีบันทึกภาพที่มีพื้นหลังโปร่งใสไปยังคลังรูปภาพ 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!")
}
}
คำตอบ
2 DuncanC
ในการรักษาส่วนโปร่งใสของภาพคุณต้องรวมช่องอัลฟา
ไฟล์บางรูปแบบเท่านั้นที่อนุญาตให้คุณรวมช่องอัลฟา JPEG ไม่ ดูเหมือนว่ารูปแบบ HEIC จะรองรับอัลฟ่า แต่ฉันไม่พบวิธีบันทึกไฟล์ HEIC ด้วยอัลฟ่าหลังจาก googling ไม่กี่นาที
รูปแบบไฟล์ PNG ไม่ช่องทางสนับสนุนอัลฟา คุณควรจะบันทึกภาพลงในม้วนฟิล์มเป็น PNG ด้วยอัลฟาได้ ตรวจสอบฟังก์ชั่น UIImage pngData()
และUIImagePNGRepresentation()
.
หากคุณใช้อิมเมจต้นฉบับของคุณเพื่อสร้างเวอร์ชัน PNG โดยใช้UIImagePNGRepresentation()
คุณควรจะบันทึกลงในรูปภาพจากกล้องและรักษาช่องอัลฟาไว้ได้ (ข้อจำกัดความรับผิดชอบ: ฉันพบรหัสด้านล่างในโพสต์ SO อื่นและยังไม่ได้ทดสอบ)
let imData = UIImagePNGRepresentation(image)
let image2 = UIImage(data: imData)
UIImageWriteToSavedPhotosAlbum(image2, nil, nil, nil)