Photo Editing Extension एक iOS तंत्र है जो तीसरे पक्ष के ऐप्स को सिस्टम फ़ोटो ऐप में सीधे संपादन उपकरण जोड़ने की अनुमति देता है। पूर्ण-विशेषताओं वाले संपादकों के विपरीत, एक्सटेंशन फ़ोटो को किसी अलग ऐप में लोड नहीं करता — उपयोगकर्ता मानक इंटरफ़ेस से बाहर निकले बिना फ़िल्टर लागू करता है, रंगों को समायोजित करता है या प्रभाव जोड़ता है। Apple Developer Documentation (2025) के अनुसार, PhotoKit फ़ोटो संसाधनों के साथ काम करने के लिए 40 से अधिक API प्रदान करता है, जिसमें PHAdjustmentData और PHContentEditingController शामिल हैं।
मुख्य बातें
Photo Editing Extension iOS में एक प्रकार का ऐप एक्सटेंशन है जो फ़ोटो ऐप के मानक इंटरफ़ेस में छवि प्रसंस्करण उपकरण एम्बेड करता है। उपयोगकर्ता एक फ़ोटो खोलता है, संपादित करें बटन दबाता है और स्थापित एक्सटेंशन की सूची से वांछित एक्सटेंशन चुनता है। संपादन के बाद, परिणाम वापस लाइब्रेरी में सहेजा जाता है, और मूल फ़ाइल वापस लाने के लिए उपलब्ध रहती है।
यह आर्किटेक्चर उपयोगकर्ता अनुभव की एक प्रमुख समस्या को हल करता है: ऐप्स के बीच स्विच करने, छवियों को निर्यात और आयात करने, या संस्करणों पर नज़र रखने की कोई आवश्यकता नहीं है। WWDC 2025 के अनुसार, सभी एक्सटेंशन अपने स्वयं के सैंडबॉक्स और सीमित निष्पादन समय के साथ एक पृथक प्रक्रिया में चलते हैं — प्रति संपादन ऑपरेशन 30 सेकंड तक।
एक्सटेंशन की डिवाइस मेमोरी में मनमानी फ़ाइलों तक पहुंच नहीं है — केवल उस फ़ोटो तक जिसे उपयोगकर्ता ने चयन इंटरफ़ेस के माध्यम से स्पष्ट रूप से पास किया है। यह तीसरे पक्ष के उपकरणों का उपयोग करते समय उपयोगकर्ता डेटा की सुरक्षा सुनिश्चित करता है।
PhotoKit डिवाइस मीडिया लाइब्रेरी के साथ काम करने के लिए Apple का फ्रेमवर्क है, जो iOS 8 में पेश किया गया था। यह फ़ोटो संसाधनों तक प्रोग्रामेटिक पहुंच प्रदान करता है, जिसमें छवियां, वीडियो, एल्बम और मेटाडेटा शामिल हैं। संपादन एक्सटेंशन के लिए, PhotoKit स्टोरेज और संशोधन इंटरफ़ेस के बीच एक मध्यवर्ती परत के रूप में कार्य करता है।
PHAsset लाइब्रेरी में एक व्यक्तिगत मीडिया ऑब्जेक्ट का प्रतिनिधित्व करता है — एक फ़ोटो या वीडियो। PHAsset के माध्यम से, आप मेटाडेटा प्राप्त कर सकते हैं: कैप्चर दिनांक, फ़ाइल प्रकार, मानचित्र पर स्थान और कैमरा ओरिएंटेशन। PHAssetResource अंतर्निहित संसाधनों तक पहुंच प्रदान करता है — उदाहरण के लिए, RAW या HEIC प्रारूप में मूल फ़ोटो फ़ाइल तक।
एक संपादन एक्सटेंशन के लिए, PHContentEditingInput अत्यंत महत्वपूर्ण है — एक ऑब्जेक्ट जिसमें पढ़ने और प्रसंस्करण के लिए उपलब्ध पूर्ण छवि (या वीडियो) फ़ाइल होती है। एक्सटेंशन इस ऑब्जेक्ट को सक्रियण के समय प्राप्त करता है और इसे स्रोत सामग्री के रूप में उपयोग करता है।
PHImageManager छवि लोडिंग और कैशिंग का प्रबंधन करता है। एक संपादन एक्सटेंशन के लिए, इसका सीधे उपयोग नहीं किया जाता — एक्सटेंशन PHContentEditingInput के माध्यम से पूर्ण फ़ाइल प्राप्त करता है। हालांकि, PHImageRequestOptions आपको अनुरोध पैरामीटर कॉन्फ़िगर करने की अनुमति देता है: आकार, वितरण प्रकार (सिंक्रोनस या एसिंक्रोनस), और परिणाम प्रारूप।
Apple के अनुसार, PHImageManager स्वचालित रूप से RAM में छवि थंबनेल कैश करता है, जो बार-बार पूर्वावलोकन प्रदर्शन को गति देता है। संपादन एक्सटेंशन के लिए, सर्वोत्तम छवि गुणवत्ता प्राप्त करने के लिए PHImageRequestOptionsDeliveryModeHighQualityFormat का उपयोग करने की अनुशंसा की जाती है।
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
}
प्रत्येक Photo Editing Extension PHContentEditingController प्रोटोकॉल को लागू करता है — एक्सटेंशन का केंद्रीय नियंत्रण तत्व। प्रोटोकॉल इंटरफ़ेस प्रदर्शित करने, इनपुट डेटा प्राप्त करने और परिणाम सहेजने के लिए विधियों को परिभाषित करता है।
beginContentEditing(with:) संपादन सत्र शुरू होने पर कॉल किया जाता है। एक्सटेंशन PHContentEditingInput प्राप्त करता है और मूल छवि के साथ इंटरफ़ेस प्रदर्शित करना चाहिए। finishContentEditing(completionHandler:) संपादन पूरा करता है — एक्सटेंशन संशोधित फ़ाइल और AdjustmentData के साथ PHContentEditingOutput लौटाता है। cancelContentEditing() बिना सहेजे परिवर्तनों को रद्द करता है।
एक महत्वपूर्ण बारीकी: beginContentEditing कॉल के समय, एक्सटेंशन को फ़ोटो के केवल एक संस्करण तक पहुंच मिलती है — वह जो उपयोगकर्ता द्वारा अनुरोधित किया गया था। यह किसी अन्य फ़ोटो या एल्बम तक नहीं पहुंच सकता। यह Apple द्वारा सुरक्षा के लिए शुरू की गई सैंडबॉक्स सीमा है।
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 संचालन — को मुख्य थ्रेड के बजाय पृष्ठभूमि थ्रेड में करने की अनुशंसा करता है, ताकि इंटरफ़ेस अवरुद्ध न हो।
PHAdjustmentData मुख्य तंत्र है जो Photo Editing Extension में गैर-विनाशकारी संपादन को सक्षम करता है। यह एक ऑब्जेक्ट है जिसमें मनमाने प्रारूप में लागू परिवर्तनों के बारे में जानकारी होती है। एक्सटेंशन फ़िल्टर पैरामीटर, मास्क और सेटिंग्स को AdjustmentData में क्रमबद्ध करता है और संशोधित छवि के साथ सहेजता है।
जब फ़ोटो फिर से खोली जाती है, एक्सटेंशन AdjustmentData पढ़ता है, पिछली इंटरफ़ेस स्थिति को पुनर्स्थापित करता है और उपयोगकर्ता को उसी बिंदु से संपादन जारी रखने की अनुमति देता है। यदि एक्सटेंशन स्थापित नहीं है, तो फ़ोटो अंतिम सहेजे गए संस्करण में प्रदर्शित होती है, जबकि मूल अलग से संग्रहीत किया जाता है।
Apple दस्तावेज़ीकरण के अनुसार, PHAdjustmentData formatIdentifier और formatVersion संग्रहीत करता है — डेटा प्रारूप की पहचान करने के लिए स्ट्रिंग्स। एक्सटेंशन को अपडेट करते समय, आपको संस्करण की जांच करनी चाहिए और पुराने प्रारूपों को सही ढंग से संभालना चाहिए।
let adjustmentData = PHAdjustmentData(
formatIdentifier: "com.example.photoediting",
formatVersion: "1.0",
data: NSKeyedArchiver.archivedData(
withRootObject: params,
requiringSecureCoding: true
)
)
output.adjustmentData = adjustmentData
finishContentEditing के समय, एक्सटेंशन संशोधित छवि फ़ाइल के साथ PHContentEditingOutput ऑब्जेक्ट में AdjustmentData लिखता है। सिस्टम फिर दोनों घटकों को सहेजता है: प्रदर्शन के लिए संस्करण और संपादन सत्र को पुनर्स्थापित करने के लिए मेटाडेटा।
Photo Editing Extension स्वचालित रूप से फ़ोटो ऐप मेनू में दिखाई देता है, जिसमें इसे शामिल करने वाला ऐप इंस्टॉल किया जाता है। उपयोगकर्ता एक फ़ोटो खोलता है, संपादित करें चुनता है, और उपकरणों की निचली पंक्ति में सभी स्थापित संपादन एक्सटेंशन — सिस्टम और तीसरे पक्ष दोनों — प्रदर्शित होते हैं।
एक्सटेंशन मुख्य ऐप के Info.plist के माध्यम से NSExtensionActivationRule कुंजी के साथ पंजीकृत होता है, जो निर्दिष्ट करता है कि किस प्रकार की सामग्री एक्सटेंशन को सक्रिय करती है। फ़ोटो संपादक के लिए, ActivationRule आमतौर पर image की आवश्यकता होती है — एक्सटेंशन वीडियो या Live Photos के लिए प्रकट नहीं होगा।
Apple संपादन मेनू को अधिभारित करने से बचने के लिए विशिष्ट सक्रियण प्रकार निर्दिष्ट करने की अनुशंसा करता है। यदि एक्सटेंशन केवल JPEG और HEIC का समर्थन करता है, तो सक्रियण को इन प्रारूपों तक सीमित करना उचित है।
<!-- 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 के Human Interface Guidelines के अनुसार, एक्सटेंशन इंटरफ़ेस न्यूनतम और कार्यात्मक होना चाहिए — बिना विज्ञापनों, बाहरी लिंक या अनावश्यक नेविगेशन तत्वों के। स्क्रीन को अव्यवस्थित न करने के लिए उपकरण पैलेट प्रदर्शित करने के लिए UIScrollView का उपयोग करने की अनुशंसा की जाती है।
अक्सर पूछे जाने वाले प्रश्न
एक्सटेंशन beginContentEditing(with:) विधि के माध्यम से पूर्ण छवि फ़ाइल के URL के साथ PHContentEditingInput प्राप्त करता है। पहुंच केवल एक चयनित फ़ोटो तक दी जाती है — लाइब्रेरी के अन्य संसाधनों पर अधिकार के बिना।
नहीं, मूल कभी संशोधित नहीं होता। एक्सटेंशन PHContentEditingOutput के माध्यम से एक नया संस्करण बनाता है, और AdjustmentData मूल स्थिति में वापस जाने की क्षमता के लिए परिवर्तन पैरामीटर संग्रहीत करता है।
एक्सटेंशन उन सभी प्रारूपों के साथ काम करता है जिन्हें PhotoKit समर्थन करता है: JPEG, HEIC, RAW, PNG, TIFF और Live Photos। सीमाएं एक्सटेंशन के Info.plist में NSExtensionActivationRule के माध्यम से निर्धारित की जाती हैं।
iOS finishContentEditing ऑपरेशन के लिए 30 सेकंड तक आवंटित करता है। सीमा पार होने पर, एक्सटेंशन जबरन समाप्त हो जाता है और परिवर्तन सहेजे नहीं जाते। CIFilter के साथ पृष्ठभूमि प्रसंस्करण इस समय को नहीं बढ़ाता।
हां, Core Image (CIFilter) और Metal (कस्टम शेडर्स के लिए) पूरी तरह से समर्थित हैं। Apple Grand Central Dispatch के माध्यम से भारी गणनाओं को पृष्ठभूमि थ्रेड्स पर स्थानांतरित करने की अनुशंसा करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें