วิธีบันทึกภาพที่มีพื้นหลังโปร่งใสไปยังคลังรูปภาพ 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 ด้วยอัลฟ่าหลังจาก googling ไม่กี่นาที

รูปแบบไฟล์ PNG ไม่ช่องทางสนับสนุนอัลฟา คุณควรจะบันทึกภาพลงในม้วนฟิล์มเป็น PNG ด้วยอัลฟาได้ ตรวจสอบฟังก์ชั่น UIImage pngData()และUIImagePNGRepresentation().

หากคุณใช้อิมเมจต้นฉบับของคุณเพื่อสร้างเวอร์ชัน PNG โดยใช้UIImagePNGRepresentation()คุณควรจะบันทึกลงในรูปภาพจากกล้องและรักษาช่องอัลฟาไว้ได้ (ข้อจำกัดความรับผิดชอบ: ฉันพบรหัสด้านล่างในโพสต์ SO อื่นและยังไม่ได้ทดสอบ)

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