Photo Editing Extension: คืออะไรและความสามารถของส่วนขยายสำหรับ iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-06-15 เวลาอ่าน: 9 นาที

Photo Editing Extension เป็นกลไกของ iOS ที่ช่วยให้แอปของบุคคลที่สามสามารถเพิ่มเครื่องมือแก้ไขลงในแอพรูปภาพของระบบได้โดยตรง ซึ่งแตกต่างจากโปรแกรมแก้ไขแบบเต็มรูปแบบ ส่วนขยายจะไม่โหลดรูปภาพไปยังแอปแยกต่างหาก — ผู้ใช้สามารถใช้ฟิลเตอร์ ปรับสี หรือเพิ่มเอฟเฟกต์โดยไม่ต้องออกจากอินเทอร์เฟซมาตรฐาน ตามเอกสารสำหรับนักพัฒนา Apple (2025) PhotoKit มี API มากกว่า 40 รายการสำหรับการทำงานกับทรัพยากรรูปภาพ รวมถึง PHAdjustmentData และ PHContentEditingController

ประเด็นสำคัญ

  • Photo Editing Extension ฝังเครื่องมือแก้ไขลงในแอพรูปภาพมาตรฐานของ iOS โดยไม่ต้องสลับระหว่างโปรแกรม
  • สถาปัตยกรรมสร้างขึ้นบนโปรโตคอล PHContentEditingController ซึ่งจัดการการแสดงอินเทอร์เฟซและการรับภาพต้นฉบับ
  • ส่วนขยายใช้ การแก้ไขแบบไม่ทำลาย — การเปลี่ยนแปลงทั้งหมดจะถูกบันทึกเป็น AdjustmentData ในขณะที่ต้นฉบับยังคงไม่ถูกแตะต้อง
  • ในการทำงานกับภาพ ส่วนขยายจะได้รับ PHContentEditingInput พร้อมไฟล์รูปภาพที่สมบูรณ์และข้อมูลเมตา
  • PhotoKit ให้การเข้าถึงทรัพยากรรูปภาพผ่าน PHAsset, PHAssetResource และ PHImageManager

Photo Editing Extension ใน iOS คืออะไร

Photo Editing Extension เป็นประเภทของส่วนขยายแอปใน iOS ที่ฝังเครื่องมือประมวลผลภาพลงในอินเทอร์เฟซมาตรฐานของแอพรูปภาพ ผู้ใช้เปิดรูปภาพ กดปุ่มแก้ไข และเลือกส่วนขยายที่ต้องการจากรายการที่ติดตั้งไว้ หลังจากการแก้ไข ผลลัพธ์จะถูกบันทึกกลับไปยังคลัง และไฟล์ต้นฉบับยังคงพร้อมสำหรับการย้อนกลับ

สถาปัตยกรรมนี้แก้ปัญหาหลักของประสบการณ์ผู้ใช้: ไม่จำเป็นต้องสลับระหว่างแอป ส่งออกและนำเข้าภาพ หรือติดตามเวอร์ชัน ตาม WWDC 2025 ส่วนขยายทั้งหมดทำงานในกระบวนการที่แยกเดี่ยวด้วยแซนด์บ็อกซ์ของตนเองและเวลาดำเนินการที่จำกัด — สูงสุด 30 วินาที ต่อการดำเนินการแก้ไข

ส่วนขยายไม่สามารถเข้าถึงไฟล์ใดๆ ในหน่วยความจำอุปกรณ์ — เฉพาะรูปภาพที่ผู้ใช้ส่งผ่านอินเทอร์เฟซการเลือกอย่างชัดเจนเท่านั้น ซึ่งรับประกันความปลอดภัยของข้อมูลผู้ใช้เมื่อใช้เครื่องมือของบุคคลที่สาม

PhotoKit: สถาปัตยกรรมและส่วนประกอบหลัก

PhotoKit เป็นเฟรมเวิร์กของ Apple สำหรับทำงานกับคลังสื่อของอุปกรณ์ เปิดตัวใน iOS 8 โดยให้การเข้าถึงทรัพยากรรูปภาพโดยทางโปรแกรม รวมถึงรูปภาพ วิดีโอ อัลบั้ม และข้อมูลเมตา สำหรับส่วนขยายการแก้ไข PhotoKit ทำหน้าที่เป็นชั้นกลางระหว่างพื้นที่จัดเก็บและอินเทอร์เฟซการปรับเปลี่ยน

PHAsset และ PHAssetResource

PHAsset แสดงถึงวัตถุสื่อแต่ละรายการในคลัง — รูปภาพหรือวิดีโอ ผ่าน PHAsset คุณสามารถรับข้อมูลเมตา: วันที่ถ่าย ประเภทไฟล์ ตำแหน่งบนแผนที่ และทิศทางของกล้อง PHAssetResource ให้การเข้าถึงทรัพยากรพื้นฐาน — ตัวอย่างเช่น ไฟล์รูปภาพต้นฉบับในรูปแบบ RAW หรือ HEIC

สำหรับส่วนขยายการแก้ไข PHContentEditingInput มีความสำคัญอย่างยิ่ง — วัตถุที่ประกอบด้วยไฟล์ภาพ (หรือวิดีโอ) ที่สมบูรณ์พร้อมสำหรับการอ่านและประมวลผล ส่วนขยายจะรับวัตถุนี้เมื่อเปิดใช้งานและใช้เป็นวัสดุต้นทาง

PHImageManager และการแคช

PHImageManager จัดการการโหลดและการแคชภาพ สำหรับส่วนขยายการแก้ไข จะไม่ถูกใช้โดยตรง — ส่วนขยายจะรับไฟล์ที่สมบูรณ์ผ่าน PHContentEditingInput อย่างไรก็ตาม PHImageRequestOptions ช่วยให้คุณกำหนดค่าพารามิเตอร์คำขอ: ขนาด ประเภทการส่ง (ซิงโครนัสหรืออะซิงโครนัส) และรูปแบบผลลัพธ์

ตามข้อมูลของ Apple PHImageManager จะแคชภาพขนาดย่อโดยอัตโนมัติใน RAM ซึ่งช่วยเร่งการแสดงตัวอย่างซ้ำๆ สำหรับส่วนขยายการแก้ไข ขอแนะนำให้ใช้ PHImageRequestOptionsDeliveryModeHighQualityFormat เพื่อให้ได้คุณภาพภาพที่ดีที่สุด

swift
let options = PHImageRequestOptions()
options.deliveryMode = .highQualityFormat
options.isSynchronous = true

PHImageManager.default().requestImage(
    for: asset,
    targetSize: .init(width: 1024, height: 1024),
    contentMode: .aspectFill,
    options: options
) { image, _ in
    // use image for display
}

การสร้างส่วนขยาย: PHContentEditingController

แต่ละ Photo Editing Extension ใช้โปรโตคอล PHContentEditingController — องค์ประกอบควบคุมกลางของส่วนขยาย โปรโตคอลกำหนดวิธีการสำหรับการแสดงอินเทอร์เฟซ การรับข้อมูลนำเข้า และการบันทึกผลลัพธ์

วิธีการหลักของโปรโตคอล

beginContentEditing(with:) ถูกเรียกเมื่อเซสชันการแก้ไขเริ่มต้น ส่วนขยายจะได้รับ PHContentEditingInput และต้องแสดงอินเทอร์เฟซพร้อมภาพต้นฉบับ finishContentEditing(completionHandler:) เสร็จสิ้นการแก้ไข — ส่วนขยายส่งคืน PHContentEditingOutput พร้อมไฟล์ที่ปรับเปลี่ยนและ AdjustmentData cancelContentEditing() ยกเลิกการเปลี่ยนแปลงโดยไม่บันทึก

รายละเอียดสำคัญ: ในขณะที่เรียก beginContentEditing ส่วนขยายจะเข้าถึงได้เฉพาะรูปภาพเวอร์ชันเดียวเท่านั้น — เวอร์ชันที่ผู้ใช้ร้องขอ ไม่สามารถเข้าถึงรูปภาพหรืออัลบั้มอื่นได้ นี่คือข้อจำกัดของแซนด์บ็อกซ์ที่ Apple กำหนดเพื่อความปลอดภัย

swift
class PhotoEditingViewController: UIViewController {

    override func beginContentEditing(
        with input: PHContentEditingInput
    ) {
        guard let url = input.fullSizeImageURL else { return }
        let image = CIImage(contentsOf: url)
        displayImage.image = UIImage(ciImage: image)
    }
}

สถาปัตยกรรมการแยก

PHContentEditingController แยกอินเทอร์เฟซการแก้ไขออกจากตรรกะการบันทึก กระบวนการหลักของ iOS เรียก beginContentEditing ส่วนขยายแสดง UI ของตน ผู้ใช้ทำการเปลี่ยนแปลง จากนั้น finishContentEditing สร้างไฟล์ใหม่ Apple แนะนำให้ดำเนินการประมวลผลที่ใช้ทรัพยากรมากทั้งหมด — ฟิลเตอร์ CIFilter, การจัดการ Core Image — ในเธรดพื้นหลัง ไม่ใช่เธรดหลัก เพื่อไม่ให้บล็อกอินเทอร์เฟซ

การแก้ไขแบบไม่ทำลายผ่าน AdjustmentData

PHAdjustmentData เป็นกลไกสำคัญที่ช่วยให้การแก้ไขแบบไม่ทำลายใน Photo Editing Extension เป็นวัตถุที่เก็บข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่ใช้ในรูปแบบที่กำหนดเอง ส่วนขยายจะซีเรียลไลซ์พารามิเตอร์ฟิลเตอร์ มาสก์ และการตั้งค่าเป็น AdjustmentData และบันทึกพร้อมกับภาพที่ปรับเปลี่ยน

เมื่อเปิดรูปภาพอีกครั้ง ส่วนขยายจะอ่าน AdjustmentData คืนค่าสถานะอินเทอร์เฟซก่อนหน้า และอนุญาตให้ผู้ใช้แก้ไขต่อจากจุดเดิม หากไม่ได้ติดตั้งส่วนขยาย รูปภาพจะแสดงในเวอร์ชันที่บันทึกล่าสุด ในขณะที่ต้นฉบับถูกเก็บแยกต่างหาก

ตามเอกสารของ Apple PHAdjustmentData เก็บ formatIdentifier และ formatVersion — สตริงสำหรับระบุรูปแบบข้อมูล เมื่ออัปเดตส่วนขยาย คุณควรตรวจสอบเวอร์ชันและจัดการรูปแบบเก่าอย่างถูกต้อง

swift
let adjustmentData = PHAdjustmentData(
    formatIdentifier: "com.example.photoediting",
    formatVersion: "1.0",
    data: NSKeyedArchiver.archivedData(
        withRootObject: params,
        requiringSecureCoding: true
    )
)
output.adjustmentData = adjustmentData

ในขณะที่ finishContentEditing ส่วนขยายจะเขียน AdjustmentData ลงในวัตถุ PHContentEditingOutput พร้อมกับไฟล์ภาพที่ปรับเปลี่ยน จากนั้นระบบจะบันทึกทั้งสองส่วนประกอบ: เวอร์ชันสำหรับแสดงและข้อมูลเมตาสำหรับกู้คืนเซสชันการแก้ไข

การรวมเข้ากับแอพรูปภาพ

Photo Editing Extension จะปรากฏในเมนูแอพรูปภาพโดยอัตโนมัติหลังจากติดตั้งแอปที่มีส่วนขยายนั้น ผู้ใช้เปิดรูปภาพ เลือกแก้ไข และในแถวเครื่องมือด้านล่าง ส่วนขยายการแก้ไขที่ติดตั้งทั้งหมด — ทั้งของระบบและของบุคคลที่สาม — จะแสดงขึ้น

การลงทะเบียนส่วนขยาย

ส่วนขยายลงทะเบียนผ่าน Info.plist ของแอปหลักด้วยคีย์ NSExtensionActivationRule ซึ่งระบุว่าประเภทเนื้อหาใดที่จะเปิดใช้งานส่วนขยาย สำหรับโปรแกรมแก้ไขรูปภาพ ActivationRule มักจะต้องการ image — ส่วนขยายจะไม่ปรากฏสำหรับวิดีโอหรือ Live Photos

Apple แนะนำให้ระบุประเภทการเปิดใช้งานที่เฉพาะเจาะจงเพื่อไม่ให้เมนูแก้ไขมากเกินไป หากส่วนขยายรองรับเฉพาะ JPEG และ HEIC ควรจำกัดการเปิดใช้งานเฉพาะรูปแบบเหล่านี้

xml
<!-- Info.plist -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.photo-editing</string>
    <key>NSExtensionActivationRule</key>
    <string>SUBQUERY (extensionItems,
        @count <= 1)</string>
</dict>

การโต้ตอบกับผู้ใช้

หลังจากเลือกส่วนขยาย iOS จะสร้างกระบวนการแยกต่างหากด้วย UIViewController ที่กำหนดเองซึ่งแสดงเหนืออินเทอร์เฟซรูปภาพ ผู้ใช้จะเห็นรูปภาพของตน เครื่องมือของส่วนขยาย และปุ่มยกเลิก/เสร็จสิ้น ส่วนขยายไม่สามารถเปลี่ยนการนำทางภายนอกตัวควบคุมของตนเองหรือเข้าถึงส่วนอื่นของระบบได้

ตามแนวทางอินเทอร์เฟซของมนุษย์ของ Apple อินเทอร์เฟซส่วนขยายควรเรียบง่ายและใช้งานได้จริง — ไม่มีโฆษณา ลิงก์ภายนอก หรือองค์ประกอบการนำทางที่ไม่จำเป็น ขอแนะนำให้ใช้ UIScrollView สำหรับแสดงจานสีเครื่องมือเพื่อไม่ให้เกะกะหน้าจอ

คำถามที่พบบ่อย

Photo Editing Extension เข้าถึงรูปภาพได้อย่างไร?

ส่วนขยายได้รับ PHContentEditingInput พร้อม URL ของไฟล์ภาพที่สมบูรณ์ผ่านเมธอด beginContentEditing(with:) การเข้าถึงจะได้รับเฉพาะรูปภาพที่เลือกเพียงรูปเดียว — ไม่มีสิทธิ์ในทรัพยากรคลังอื่น

ส่วนขยายสามารถปรับเปลี่ยนรูปภาพต้นฉบับได้หรือไม่?

ไม่ ต้นฉบับจะไม่ถูกปรับเปลี่ยนเด็ดขาด ส่วนขยายสร้างเวอร์ชันใหม่ผ่าน PHContentEditingOutput และ AdjustmentData เก็บพารามิเตอร์การเปลี่ยนแปลงเพื่อความสามารถในการย้อนกลับไปยังสถานะเดิม

Photo Editing Extension รองรับไฟล์ประเภทใดบ้าง?

ส่วนขยายทำงานกับทุกรูปแบบที่ PhotoKit รองรับ: JPEG, HEIC, RAW, PNG, TIFF และ Live Photos ข้อจำกัดถูกกำหนดผ่าน NSExtensionActivationRule ใน Info.plist ของส่วนขยาย

มีเวลาเท่าใดสำหรับการแก้ไข?

iOS จัดสรรสูงสุด 30 วินาที สำหรับการดำเนินการ finishContentEditing หากเกินขีดจำกัด ส่วนขยายจะถูกบังคับให้สิ้นสุดและการเปลี่ยนแปลงจะไม่ถูกบันทึก การประมวลผลพื้นหลังด้วย CIFilter ไม่ขยายเวลานี้

ฉันสามารถใช้ Core Image และ Metal ในส่วนขยายได้หรือไม่?

ได้ Core Image (CIFilter) และ Metal (สำหรับเชเดอร์ที่กำหนดเอง) รองรับอย่างเต็มที่ Apple แนะนำให้ย้ายการคำนวณหนักไปยังเธรดพื้นหลังผ่าน Grand Central Dispatch

สรุป

  • Photo Editing Extension เป็นเครื่องมือแก้ไขที่สามารถฝังในแอพรูปภาพที่ทำงานโดยไม่ต้องสลับระหว่างแอป
  • สถาปัตยกรรมใช้ PHContentEditingController เพื่อจัดการเซสชันการแก้ไขและรับข้อมูลนำเข้า
  • PhotoKit ให้ PHAsset, PHImageManager และ PHContentEditingInput สำหรับเข้าถึงทรัพยากรสื่อของอุปกรณ์
  • PHAdjustmentData ช่วยให้การแก้ไขแบบไม่ทำลาย — การซีเรียลไลซ์พารามิเตอร์การเปลี่ยนแปลงพร้อมความสามารถในการย้อนกลับ
  • ส่วนขยายทำงานใน แซนด์บ็อกซ์ ด้วยขีดจำกัด 30 วินาทีและเข้าถึงรูปภาพได้เพียงรูปเดียวต่อเซสชัน
  • รองรับ Core Image, Metal และทุกรูปแบบ PhotoKit: JPEG, HEIC, RAW, PNG, TIFF และ Live Photos

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม