पीडीएफ से निकाली गई तस्वीरें पेज पर दिखाई देने वाली तस्वीरों से अलग क्यों हैं?
पारदर्शिता वाली छवियों को मुख्य छवि और सॉफ्ट मास्क के रूप में अलग-अलग संग्रहीत किया जा सकता है। इसके बाद, आरजीबीए पीएनजी बनाने के लिए पिलो का उपयोग करें, इन-मेमोरी पीडीएफ डालें, और मुख्य छवि और एसमास्क का जायजा लें। मुख्य छवि बाइट्स को निकालना पूर्ण पारदर्शिता प्रभाव प्राप्त करने के बराबर नहीं है, न ही यह पृष्ठ पर सभी प्रदर्शन उदाहरणों के पुनर्निर्माण के बराबर है।
पीडीएफ से आप जो छवियां निकालते हैं, वे अक्सर पृष्ठ पर दिखाई देने वाली छवियों से भिन्न दिखती हैं: वे या तो पूरी तरह से काली होती हैं, गलत आकार की होती हैं, या पृष्ठभूमि या वॉटरमार्क गायब होती हैं। समस्या आमतौर पर कोड के साथ नहीं है, बल्कि इस तथ्य के साथ है कि आप पीडीएफ के अंदर मूल छवि ऑब्जेक्ट को पढ़ रहे हैं और पृष्ठ को प्रस्तुत करते समय रचना निर्देश गायब हैं।
यह आलेख उन डेवलपर्स और दस्तावेज़ प्रोसेसरों के लिए लिखा गया है जिन्हें पीडीएफ छवियों को पार्स करने के लिए स्क्रिप्ट का उपयोग करने की आवश्यकता होती है। यह ओसीआर प्रीप्रोसेसिंग और सामग्री पुनर्गठन जैसे परिदृश्यों के लिए उपयुक्त है। पढ़ने के बाद, आप मूल ऑब्जेक्ट और पेज डिस्प्ले के बीच अंतर को समझ सकते हैं, जान सकते हैं कि SMask (सॉफ्ट मास्क) पारदर्शी क्षेत्रों के नुकसान का कारण क्यों बनता है, और सिंथेटिक नमूनों का उपयोग करके स्व-परीक्षण विधियों के एक सेट में महारत हासिल कर सकते हैं।
यह आलेख प्रसंस्करण विधि प्रदर्शित करने के लिए सिंथेटिक नमूनों का उपयोग करता है। कोड को एक पृथक वातावरण में उदाहरणों के साथ जांचा गया है और यह सभी वास्तविक फ़ाइलों या उत्पाद प्रदर्शन की गारंटी नहीं है। महत्वपूर्ण दस्तावेज़ों को संसाधित करने से पहले, कृपया मूल दस्तावेज़ अपने पास रखें और पाठ में सीमाओं और स्वीकृति आइटम के अनुसार उनकी समीक्षा करें।
पीडीएफ छवि निष्कर्षण परिणाम पृष्ठ के साथ असंगत हैं? एक वाक्य का निष्कर्ष
निकाले गए मुख्य छवि बाइट्स पृष्ठ पर पूर्ण प्रभाव के बराबर नहीं हैं। SMask को उसी समय संसाधित करने की आवश्यकता होती है, और रीडर के वास्तविक रेंडरिंग परिणाम को स्वीकृति बेंचमार्क के रूप में उपयोग किया जाता है।
| आपकी स्थिति | अनुशंसित प्रथाएँ | कारण |
|---|---|---|
| निष्कर्षण परिणाम एक ठोस रंग का आयत है, और पारदर्शी क्षेत्र काला या सफेद हो जाता है | जांचें कि क्या smask_xref 0 है और SMask को अल्फा चैनल के रूप में मुख्य छवि में मर्ज करें | पारदर्शिता वाली छवियों को मुख्य छवि और सॉफ्ट मास्क के रूप में अलग से संग्रहीत किया जा सकता है। केवल मुख्य छवि निकालने से पारदर्शिता जानकारी खो जाएगी। |
| जो निकाला जाता है वह पूरी बड़ी छवि है, और इसका केवल एक हिस्सा पृष्ठ पर प्रदर्शित होता है। | CTM मैट्रिक्स और /BBox पढ़ें, प्रदर्शन क्षेत्र के अनुसार क्रॉप करें | एक ही बेसमैप का कई पृष्ठों द्वारा पुन: उपयोग किया जा सकता है, और प्रत्येक पृष्ठ केवल अपना आंशिक क्षेत्र प्रदर्शित करता है। |
| छवि अभिविन्यास उलटा या विकृत है | ज्यामितीय सुधार के लिए मैट्रिक्स पैरामीटर पढ़ें, और टेक्स्ट और चेहरों को मैन्युअल रूप से जांचें | परिवर्तन मैट्रिक्स में नकारात्मक स्केलिंग या गैर-समान परिवर्तन शामिल हो सकते हैं |
| निष्कर्षण सफल है लेकिन पेज नहीं देखा जा सकता | OCG स्थिति के बारे में पूछें और क्रॉपबॉक्स से तुलना करें | छवि को वैकल्पिक सामग्री समूह द्वारा या फसल क्षेत्र के बाहर छिपाया जा सकता है |
| छवि धुंधली या कम रिज़ॉल्यूशन वाली है | डीपीआई मेटाडेटा लॉग करें और निम्न गुणवत्ता के रूप में चिह्नित करें, यदि आवश्यक हो तो स्रोत फ़ाइलों को फिर से स्कैन करें | मूल एम्बेडेड छवि स्वयं एक कम-रिज़ॉल्यूशन थंबनेल हो सकती है |
मूल वस्तुओं और रेंडरिंग पाइपलाइनों के बीच अंतर
पीडीएफ फाइलें एक संसाधन गोदाम की तरह संरचित हैं। `Document.extract_image(xref)` यह विधि गोदाम से हिस्सों को वैसे ही बाहर निकालती है जैसे वे हैं। पेज पर डिस्प्ले को भी कई प्रक्रियाओं से गुजरना पड़ता है: ट्रांसफॉर्मेशन मैट्रिक्स (सीटीएम) स्केलिंग, क्लिपिंग पाथ (क्लिप पाथ) कटिंग, ट्रांसपेरेंसी ग्रुप (ट्रांसपेरेंसी ग्रुप) मिक्सिंग और सॉफ्ट मास्क (सॉफ्ट मास्क) ओवरले।
सबसे विशिष्ट अंतर SMask से आता है। पारदर्शिता चैनल वाले कई पीएनजी को पीडीएफ के अंदर दो भागों में विभाजित किया गया है: एक आरजीबी छवि स्ट्रीम, और एक अलग ग्रे मास्क स्ट्रीम। यदि आप केवल मुख्य छवि निकालते हैं और संबंधित SMask ऑब्जेक्ट को त्याग देते हैं, तो आपको बिना पारदर्शिता वाला एक आयत मिलेगा, और मूल रूप से पारदर्शी क्षेत्र काला या सफेद हो जाएगा।
इसके अलावा, वॉल्यूम बचाने के लिए, एक ही उच्च-रिज़ॉल्यूशन बेस मैप का कई पेजों द्वारा पुन: उपयोग किया जा सकता है, और प्रत्येक पेज अलग-अलग /BBox और मैट्रिक्स के माध्यम से इसका केवल एक हिस्सा प्रदर्शित करता है। प्रत्यक्ष निष्कर्षण के परिणामस्वरूप उपयोगकर्ता द्वारा देखे जाने वाले काटे गए टुकड़ों के बजाय पूरी बड़ी छवि प्राप्त होगी। यह "आप जो देखते हैं वह वह नहीं है जो आपको मिलता है" एक विनिमय प्रारूप के रूप में पीडीएफ की एक अंतर्निहित विशेषता है और यह पार्सिंग लाइब्रेरी का दोष नहीं है।
नीचे दी गई तालिका दो दृष्टिकोणों की तुलना करती है:
📊 कोर तुलना
| कंट्रास्ट आयाम | मूल वस्तु को सीधे निकालें | पेज रेंडरिंग परिणाम |
|---|---|---|
| आपको मिलने वाली सामग्री | संसाधन भंडार में मूल भाग, जैसे मुख्य छवि प्रवाह | संश्लेषण निर्देशों द्वारा संसाधित दृश्य प्रभाव |
| पारदर्शिता | मुख्य छवि और SMask को अलग-अलग संग्रहीत किया जा सकता है और मैन्युअल रूप से असाइन किया जाना चाहिए | सॉफ्ट मास्क जोड़ा गया है, और पारदर्शी क्षेत्र सामान्य रूप से प्रदर्शित होता है |
| आकार और सीमा | यह आधार मानचित्र का पूर्ण आकार हो सकता है | CTM, /BBox और क्लिपिंग पथों द्वारा विवश |
| पुन: उपयोग की स्थिति | एक ही आधार मानचित्र को कई पृष्ठों पर साझा किया जा सकता है | प्रत्येक पृष्ठ केवल अपने स्वयं के भाग प्रस्तुत करता है |
संश्लेषण परीक्षण पर्यावरण और सीमा स्थिति से निपटना
बाहरी फाइलों पर भरोसा किए बिना निष्कर्षण तर्क को सत्यापित करने के लिए, SMask युक्त एक सिंथेटिक पीडीएफ का निर्माण करने की आवश्यकता है। निम्नलिखित कोड मेमोरी में परीक्षण दस्तावेज़ बनाने के लिए PyMuPDF का उपयोग करता है, जहां छवि वस्तुओं में स्वतंत्र सॉफ्ट मास्क होते हैं, जो वास्तविक दुनिया के परिदृश्य का अनुकरण करते हैं जहां "आइकन की पारदर्शी पृष्ठभूमि होती है लेकिन नीचे अलग-अलग स्ट्रीम में संग्रहीत होती है।
from io import BytesIO
from PIL import Image
import pymupdf
im = Image.new("RGBA", (16, 16), (255, 0, 0, 128))
raw = BytesIO()
im.save(raw, format="PNG")
with pymupdf.open() as doc:
page = doc.new_page(width=100, height=100)
page.insert_image(pymupdf.Rect(10, 10, 70, 70), stream=raw.getvalue())
images = page.get_images(full=True)
assert len(images) == 1
xref, smask = images[0][:2]
assert xref > 0 and smask > 0
assert doc.extract_image(xref)["width"] == 16
assert doc.extract_image(smask)["image"]
अपेक्षाओं का सही आउटपुट: प्रोग्राम को यह पहचानने में सक्षम होना चाहिए कि छवि SMask से जुड़ी है और मुख्य छवि डेटा को सफलतापूर्वक निकालना चाहिए।
कोड पूरी तरह से स्व-निहित है और इसके लिए किसी बाहरी इनपुट फ़ाइल की आवश्यकता नहीं है। यह मेमोरी में SMask के साथ PDF को संश्लेषित करता है और फिर सत्यापित करता है कि निष्कर्षण तर्क सही ढंग से मुखौटा संघों की पहचान करता है या नहीं। कोड में दो प्रमुख दावे हैं: एक निकाले गए डेटा की अखंडता की पुष्टि करना, और दूसरा SMask एसोसिएशन राज्यों की धारणा की पुष्टि करना।
यह कोड मेटाडेटा स्तर पर अखंडता सत्यापन पर केंद्रित है। वास्तविक उत्पादन में, यदि smask_xref != 0 का उपयोग किया जाता है, तो तकिया जैसे पुस्तकालयों को मुख्य छवि पर अल्फा चैनल के रूप में doc.extract_image(smask_xref) के परिणामों को चिपकाने की आवश्यकता होती है। ये दो दावे क्रमशः दो मुख्य अनुबंधों को कवर करते हैं: "डेटा निष्कर्षण" और "मास्क-साहचर्य दृश्यता", जो खाली दस्तावेज़ या एपीआई परिवर्तन होने पर झूठी सफलताओं को रोक सकता है।
निष्कर्षण परिणाम स्वीकृति और मैनुअल समीक्षा के बीच सीमाएँ
स्वचालित निष्कर्षण दृश्य पुष्टिकरण को पूरी तरह से प्रतिस्थापित नहीं कर सकता है। नीचे दी गई तालिका सामान्य असामान्य घटनाओं, रणनीतियों और स्थितियों को संभालती है जिन्हें मैन्युअल रूप से आंका जाना चाहिए।
| घटना का निरीक्षण करें | संभावित कारण | स्वचालित प्रसंस्करण निर्णय | ट्रिगर स्थितियों की मैनुअल समीक्षा |
|---|---|---|---|
| छवि पूरी तरह से काली या पूरी तरह से सफेद है | SMask को एक स्टैंडअलोन छवि के रूप में निकाला जाता है; रंग स्थान डिकोडिंग विफल रहा | SMask संघों की जाँच करें; रंग स्थान का समर्थन करने का प्रयास करें | सामग्री को वापस करने के बाद भी पहचाना नहीं जा सकता है; स्पॉट रंग या डिवाइस से संबंधित रंग शामिल हैं |
| छवि की दिशा उलट या फैली हुई है | CTM मैट्रिक्स में नकारात्मक स्केलिंग या गैर-समान परिवर्तन होते हैं | ज्यामितीय सुधार के लिए मैट्रिक्स पैरामीटर पढ़ना | सुधार के बाद, पाठ या चेहरे काफ़ी विकृत हो जाते हैं; जटिल वेक्टर क्लिपिंग पथ |
| कई छोटी छवियां एक बड़ी छवि में संयुक्त होती हैं | ब्लॉक कोडिंग (टाइलिंग पैटर्न) या स्ट्रिप स्टोरेज | BBox निर्देशांक के अनुसार काटें या शामिल हों | जोड़ों पर स्पष्ट सीम; तार्किक रूप से, यह एक स्वतंत्र शब्दार्थ इकाई होनी चाहिए |
| निष्कर्षण सफल रहा, लेकिन पृष्ठ दिखाई नहीं दे रहा है | OCG (वैकल्पिक सामग्री समूह) द्वारा छिपा हुआ; काटने के क्षेत्र के बाहर स्थित है | क्वेरी OCG स्थिति फ़िल्टरिंग; CropBox के साथ तुलना करें | परत तर्क जटिल है, जैसे कि घोंसला बनाना OCMD; डायनेमिक प्रपत्र फ़ील्ड्स |
| रिज़ॉल्यूशन बेहद कम या धुंधला है | मूल एम्बेडिंग एक लो-डेफिनिशन थंबनेल है | डीपीआई मेटाडेटा रिकॉर्ड करें और इसे निम्न गुणवत्ता के रूप में चिह्नित करें | मुख्य चार्ट या पाठ धुंधले और अपठनीय हैं; आपको स्रोत फ़ाइल को फिर से स्कैन करने की आवश्यकता है |
ध्यान दें कि "कोड डेमो" केवल एपीआई कॉल और डेटा प्रवाह की कनेक्टिविटी की पुष्टि करता है, और एंड-टू-एंड प्रदर्शन की गारंटी नहीं देता है। OCG नेस्टेड लॉजिक, कस्टम शेडर्स या एन्क्रिप्टेड दस्तावेज़ों का सामना करते समय, स्क्रिप्ट आउटपुट केवल संदर्भ के लिए होता है और इसे पीडीएफ रीडर के वास्तविक प्रतिपादन के आधार पर स्वीकार किया जाना चाहिए।
🎯 कौन सा तरीका आपको सूट करता है?
यदि आपको पारदर्शिता प्रभाव बनाए रखने की आवश्यकता है
सबसे पहले, जांचें कि क्या SMask मौजूद है, इसे अल्फा चैनल में मर्ज करें, और फिर बाद में प्रसंस्करण करें।
यदि आपको पृष्ठ पर केवल आंशिक छवि की आवश्यकता है
CTM और /BBox पढ़ें, आधार छवि को सीधे सहेजने के बजाय प्रदर्शन क्षेत्र द्वारा क्रॉप करें।
यदि आपकी छवि स्कैन की गई कॉपी है या लो-डेफिनिशन छवियों में एम्बेडेड है
सबसे पहले, डीपीआई मेटाडेटा रिकॉर्ड करें और गुणवत्ता को चिह्नित करें; यदि मुख्य सामग्री अस्पष्ट है, तो पुन: स्कैन के लिए स्रोत फ़ाइल पर वापस लौटें।
यदि दस्तावेज़ में परतें, एन्क्रिप्शन या जटिल क्लिपिंग है
स्क्रिप्ट आउटपुट को प्रारंभिक परिणाम के रूप में मानें, और अंततः अंतिम संदर्भ के रूप में पीडीएफ रीडर के रेंडरिंग प्रभाव का उपयोग करें।
❓ अक्सर पूछे जाने वाले प्रश्न (FAQ)
1. निकाली गई छवि के पारदर्शी क्षेत्र काले क्यों हो गए?
एक सामान्य कारण यह है कि पारदर्शी जानकारी SMask में संग्रहीत की जाती है, केवल मास्क को मर्ज किए बिना मुख्य छवि निकालती है।
2. निकाली गई छवि पृष्ठ पर आप जो देखते हैं उससे बहुत बड़ी है। क्या चल रहा है?
एक ही आधार मानचित्र का कई पृष्ठों द्वारा पुन: उपयोग किया जा सकता है, और प्रत्येक पृष्ठ केवल /BBox और मैट्रिक्स के माध्यम से आंशिक भाग प्रदर्शित करता है। प्रत्यक्ष निष्कर्षण से पूरा आधार मानचित्र प्राप्त होता है।
3. यदि कोड काम करता है, तो क्या इसका मतलब यह है कि निष्कर्षण परिणाम सीधे उपयोग किए जा सकते हैं?
नहीं। कोड डेमो केवल एपीआई कॉल और डेटा स्ट्रीम कनेक्टिविटी को सत्यापित करते हैं, और अंततः पाठक के वास्तविक रेंडरिंग परिणामों द्वारा स्वीकृति की आवश्यकता होती है।
4. निष्कर्षण सफल रहा, लेकिन छवि पृष्ठ पर दिखाई नहीं दे रही थी। क्या कारण हो सकता है?
छवियों को वैकल्पिक सामग्री समूहों (OCGs) द्वारा छिपाया जा सकता है या क्रॉपिंग क्षेत्र के बाहर स्थित किया जा सकता है, जिससे OCG स्थिति क्वेरी और क्रॉपबॉक्स के साथ तुलना की जा सकती है।
📝 सारांश
पीडीएफ में मूल छवि ऑब्जेक्ट और पेज डिस्प्ले दो अलग-अलग चीजें हैं, इसलिए उन्हें निकालने से पहले, आपको उनके रिश्ते को समझने की जरूरत है। SMask, मैट्रिक्स और क्लिपिंग जानकारी को एक साथ संसाधित करना, और उन्हें रेंडरिंग परिणामों के साथ सत्यापित करना विश्वसनीय परिणाम सुनिश्चित करता है।
अभी अनुभव करें: मूल स्वरूपण को संरक्षित करते हुए अनुवाद शुरू करने के लिए अपना दस्तावेज़ अपलोड करें


