পিডিএফ থেকে তোলা ছবি পৃষ্ঠায় দেখা ছবি থেকে আলাদা কেন?
স্বচ্ছতা সহ চিত্রগুলি একটি প্রধান চিত্র এবং একটি নরম মুখোশ হিসাবে আলাদাভাবে সংরক্ষণ করা যেতে পারে। এর পরে, একটি RGBA PNG তৈরি করতে বালিশ ব্যবহার করুন, ইন-মেমরি পিডিএফ ঢোকান এবং মূল চিত্র এবং এসমাস্কের স্টক নিন। মূল ইমেজ বাইট এক্সট্র্যাক্ট করা সম্পূর্ণ স্বচ্ছতা প্রভাব প্রাপ্তির সমান নয়, বা পৃষ্ঠায় সমস্ত প্রদর্শন দৃষ্টান্ত পুনর্গঠনের সমান নয়।
আপনি পিডিএফ থেকে যে ছবিগুলি বের করেন তা প্রায়শই আপনি পৃষ্ঠায় যা দেখেন তার থেকে আলাদা দেখায়: সেগুলি হয় সম্পূর্ণ কালো, ভুল আকার, বা অনুপস্থিত ব্যাকগ্রাউন্ড বা ওয়াটারমার্ক। সমস্যাটি সাধারণত কোডের সাথে নয়, তবে আপনি পিডিএফ-এর ভিতরে মূল চিত্র অবজেক্টটি পড়ছেন এবং পৃষ্ঠাটি রেন্ডার করার সময় রচনার নির্দেশাবলী হারিয়েছেন।
এই নিবন্ধটি ডেভেলপার এবং ডকুমেন্ট প্রসেসরদের জন্য লেখা হয়েছে যাদের PDF ইমেজ পার্স করার জন্য স্ক্রিপ্ট ব্যবহার করতে হবে। এটি ওসিআর প্রিপ্রসেসিং এবং বিষয়বস্তু পুনর্গঠনের মতো পরিস্থিতির জন্য উপযুক্ত। পড়ার পরে, আপনি আসল বস্তু এবং পৃষ্ঠা প্রদর্শনের মধ্যে পার্থক্য বুঝতে পারবেন, কেন এসএমএস্ক (নরম মাস্ক) স্বচ্ছ অঞ্চলগুলিকে নষ্ট করে দেয় তা জানুন এবং সিন্থেটিক নমুনা ব্যবহার করে স্ব-পরীক্ষা পদ্ধতির একটি সেট আয়ত্ত করুন।
এই নিবন্ধটি প্রক্রিয়াকরণ পদ্ধতি প্রদর্শন করতে সিন্থেটিক নমুনা ব্যবহার করে। কোডটি একটি বিচ্ছিন্ন পরিবেশে উদাহরণ সহ পরীক্ষা করা হয়েছে এবং এটি সমস্ত বাস্তব ফাইল বা পণ্যের কার্যকারিতার গ্যারান্টি নয়। গুরুত্বপূর্ণ নথিগুলি প্রক্রিয়া করার আগে, দয়া করে মূলগুলি রাখুন এবং পাঠ্যের সীমানা এবং গ্রহণযোগ্য আইটেমগুলি অনুসারে সেগুলি পর্যালোচনা করুন৷
পিডিএফ ইমেজ নিষ্কাশন ফলাফল পৃষ্ঠার সাথে অসামঞ্জস্যপূর্ণ? এক বাক্যে উপসংহার
নিষ্কাশিত প্রধান চিত্র বাইট পৃষ্ঠায় সম্পূর্ণ প্রভাবের সমান নয়। SMask একই সময়ে প্রক্রিয়া করা প্রয়োজন, এবং পাঠকের প্রকৃত রেন্ডারিং ফলাফল গ্রহণযোগ্যতা বেঞ্চমার্ক হিসাবে ব্যবহৃত হয়।
| আপনার অবস্থা | প্রস্তাবিত অভ্যাস | কারণ |
|---|---|---|
| নিষ্কাশন ফলাফল একটি কঠিন রঙের আয়তক্ষেত্র, এবং স্বচ্ছ এলাকা কালো বা সাদা হয়ে যায় | smask_xref 0 কিনা তা পরীক্ষা করুন এবং SMask কে আলফা চ্যানেল হিসেবে মূল ছবিতে মার্জ করুন | স্বচ্ছতা সহ ছবিগুলি আলাদাভাবে প্রধান চিত্র এবং সফট মাস্ক হিসাবে সংরক্ষণ করা যেতে পারে। শুধুমাত্র মূল ছবি বের করলে স্বচ্ছতা তথ্য হারাবে। |
| যা নিষ্কাশন করা হয় তা হল সম্পূর্ণ বৃহৎ চিত্র, এবং এটির শুধুমাত্র একটি অংশ পৃষ্ঠায় প্রদর্শিত হয়। | CTM ম্যাট্রিক্স এবং /BBox পড়ুন, প্রদর্শন এলাকা অনুযায়ী ক্রপ করুন | একই বেসম্যাপ একাধিক পৃষ্ঠা দ্বারা পুনরায় ব্যবহার করা যেতে পারে, এবং প্রতিটি পৃষ্ঠা শুধুমাত্র তার আংশিক এলাকা প্রদর্শন করে। |
| চিত্র অভিযোজন বিপরীত বা বিকৃত হয় | জ্যামিতিক সংশোধনের জন্য ম্যাট্রিক্স পরামিতি পড়ুন, এবং ম্যানুয়ালি টেক্সট এবং মুখ চেক করুন | ট্রান্সফর্মেশন ম্যাট্রিক্সে নেতিবাচক স্কেলিং বা অ-ইউনিফর্ম ট্রান্সফর্মেশন থাকতে পারে |
| নিষ্কাশন সফল কিন্তু পাতা দেখা যাবে না | OCG স্ট্যাটাস জিজ্ঞাসা করুন এবং ক্রপবক্সের সাথে তুলনা করুন | ইমেজ একটি ঐচ্ছিক বিষয়বস্তু গ্রুপ দ্বারা বা ক্রপ এলাকার বাইরে লুকানো হতে পারে |
| ছবি ঝাপসা বা কম রেজোলিউশন | DPI মেটাডেটা লগ করুন এবং নিম্ন মানের হিসাবে চিহ্নিত করুন, প্রয়োজনে উত্স ফাইলগুলি পুনরায় স্ক্যান করুন৷ | মূল এম্বেড করা ছবি নিজেই একটি কম-রেজোলিউশন থাম্বনেল হতে পারে |
মূল বস্তু এবং রেন্ডারিং পাইপলাইনের মধ্যে পার্থক্য
পিডিএফ ফাইল একটি সম্পদ গুদাম মত গঠন করা হয়. `Document.extract_image(xref)` এই পদ্ধতিটি যা করে তা হল গুদাম থেকে যন্ত্রাংশগুলি যেমন আছে সেভাবে বের করা। পৃষ্ঠার প্রদর্শনকে একাধিক প্রক্রিয়ার মধ্য দিয়ে যেতে হবে: ট্রান্সফরমেশন ম্যাট্রিক্স (সিটিএম) স্কেলিং, ক্লিপিং পাথ (ক্লিপ পাথ) কাটিং, ট্রান্সপারেন্সি গ্রুপ (ট্রান্সপারেন্সি গ্রুপ) মিক্সিং এবং সফট মাস্ক (সফট মাস্ক) ওভারলে।
সবচেয়ে সাধারণ পার্থক্য এসমাস্ক থেকে আসে। একটি স্বচ্ছতা চ্যানেল সহ অনেক পিএনজি পিডিএফ-এর ভিতরে দুটি অংশে বিভক্ত: একটি RGB ইমেজ স্ট্রিম এবং একটি পৃথক গ্রে মাস্ক স্ট্রিম। আপনি যদি শুধুমাত্র মূল চিত্রটি বের করেন এবং সংশ্লিষ্ট SMask অবজেক্টটি বাতিল করেন, তাহলে আপনি স্বচ্ছতা ছাড়াই একটি আয়তক্ষেত্র পাবেন এবং মূল স্বচ্ছ এলাকাটি কালো বা সাদা হয়ে যাবে।
উপরন্তু, ভলিউম সংরক্ষণ করার জন্য, একই উচ্চ-রেজোলিউশন বেস ম্যাপ একাধিক পৃষ্ঠা দ্বারা পুনরায় ব্যবহার করা যেতে পারে, এবং প্রতিটি পৃষ্ঠা শুধুমাত্র বিভিন্ন /BBox এবং ম্যাট্রিক্সের মাধ্যমে এটির কিছু অংশ প্রদর্শন করে। প্রত্যক্ষ নিষ্কাশনের ফলে ব্যবহারকারীর দেখা ক্রপ করা টুকরোগুলির পরিবর্তে সম্পূর্ণ বৃহৎ চিত্র দেখাবে৷ এই "আপনি যা দেখেন তা আপনি যা পান তা নয়" একটি বিনিময় বিন্যাস হিসাবে PDF এর একটি অন্তর্নিহিত বৈশিষ্ট্য এবং এটি পার্সিং লাইব্রেরির ত্রুটি নয়।
নীচের টেবিলটি দুটি দৃষ্টিকোণ তুলনা করে:
📊 মূল তুলনা
| বৈসাদৃশ্য মাত্রা | মূল বস্তুটি সরাসরি এক্সট্রাক্ট করুন | পৃষ্ঠা রেন্ডারিং ফলাফল |
|---|---|---|
| বিষয়বস্তু পান | রিসোর্স গুদামে মূল অংশ, যেমন প্রধান চিত্র প্রবাহ | সংশ্লেষণ নির্দেশাবলী দ্বারা প্রক্রিয়াকরণের পরে ভিজ্যুয়াল প্রভাব |
| স্বচ্ছতা | মূল ছবি এবং SMask আলাদাভাবে সংরক্ষণ করা যেতে পারে এবং ম্যানুয়ালি সংযুক্ত করা প্রয়োজন। | নরম মুখোশগুলি ওভারলেড করা হয় এবং স্বচ্ছ অঞ্চলগুলি সাধারণত প্রদর্শিত হয়। |
| আকার এবং পরিসীমা | বেসম্যাপ পূর্ণ আকার হতে পারে | CTM, /BBox এবং ক্লিপিং পাথ দ্বারা সীমাবদ্ধ |
| পুনঃব্যবহারের পরিস্থিতি | একই বেসম্যাপ একাধিক পৃষ্ঠা দ্বারা ভাগ করা হতে পারে | প্রতিটি পৃষ্ঠা শুধুমাত্র তার নিজস্ব অংশ উপস্থাপন করে |
সিন্থেটিক পরীক্ষার পরিবেশ এবং সীমানা কেস প্রক্রিয়াকরণ
বাহ্যিক ফাইলের উপর নির্ভর না করে নিষ্কাশন যুক্তি যাচাই করার জন্য, SMask সম্বলিত একটি সিন্থেটিক PDF তৈরি করতে হবে। নিম্নলিখিত কোডটি মেমরিতে একটি পরীক্ষা নথি তৈরি করতে 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_xref != 0 ব্যবহার করা হয়, তাহলে বালিশের মতো লাইব্রেরিগুলিকে doc.extract_image(smask_xref) ফলাফলটি আলফা চ্যানেল হিসাবে মূল চিত্রে পেস্ট করতে ব্যবহার করা প্রয়োজন। দুটি দাবী যথাক্রমে "ডেটা বের করা যায়" এবং "মাস্ক অ্যাসোসিয়েশন দৃশ্যমান" এর দুটি মূল চুক্তিকে কভার করে, যা খালি নথি বা API পরিবর্তনের সময় মিথ্যা সাফল্য প্রতিরোধ করতে পারে।
নিষ্কাশন ফলাফল গ্রহণযোগ্যতা এবং ম্যানুয়াল পর্যালোচনা সীমানা
স্বয়ংক্রিয় নিষ্কাশন সম্পূর্ণরূপে চাক্ষুষ নিশ্চিতকরণ প্রতিস্থাপন করতে পারে না. নিম্নলিখিত সারণীটি সাধারণ অসঙ্গতি, পরিচালনার কৌশল এবং পরিস্থিতিগুলিকে সংক্ষিপ্ত করে যা মানুষের বিচারের উপর ছেড়ে দেওয়া উচিত।
| ঘটনা পর্যবেক্ষণ করুন | সম্ভাব্য কারণ | স্বয়ংক্রিয় প্রক্রিয়াকরণ সিদ্ধান্ত | ম্যানুয়াল পর্যালোচনা ট্রিগার শর্তাবলী |
|---|---|---|---|
| ছবি সব কালো বা সব সাদা | SMask একটি স্বতন্ত্র চিত্র হিসাবে নিষ্কাশন করা হয়েছিল; রঙ স্থান ডিকোডিং ব্যর্থ হয়েছে | এসমাস্ক অ্যাসোসিয়েশন চেক করুন; ফলব্যাক রঙ স্থান চেষ্টা করুন | প্রত্যাবর্তনের পরেও বিষয়বস্তু সনাক্ত করা যায় না; স্পট রং বা ডিভাইস-সম্পর্কিত রং জড়িত |
| চিত্র অভিযোজন বিপরীত বা প্রসারিত | CTM ম্যাট্রিক্সে নেতিবাচক স্কেলিং বা অ-ইউনিফর্ম ট্রান্সফর্মেশন রয়েছে | জ্যামিতিক সংশোধনের জন্য ম্যাট্রিক্স পরামিতি পড়ুন | টেক্সট বা মুখ সংশোধন করার পরে স্পষ্টতই বিকৃত হয়; জটিল ভেক্টর ক্লিপিং পাথ |
| একাধিক ছোট ছবি মিলে একটি বড় ছবিতে | টাইলিং প্যাটার্ন বা ডোরাকাটা স্টোরেজ | BBox স্থানাঙ্ক অনুযায়ী কাটা বা স্প্লাইস | splicing ফাঁক সুস্পষ্ট; যৌক্তিকভাবে এটি একটি স্বাধীন শব্দার্থিক ইউনিট হওয়া উচিত |
| নিষ্কাশন সফল কিন্তু পৃষ্ঠা দৃশ্যমান হয় না | OCG দ্বারা লুকানো (ঐচ্ছিক বিষয়বস্তু গ্রুপ); ফসলের এলাকার বাইরে | প্রশ্ন OCG অবস্থা ফিল্টার; ক্রপবক্স তুলনা করুন | জটিল স্তর যুক্তি, যেমন নেস্টেড OCMD; গতিশীল ফর্ম ক্ষেত্র |
| খুব কম রেজোলিউশন বা ঝাপসা | মূল এম্বেড একটি নিম্ন-সংজ্ঞা থাম্বনেইল | DPI মেটাডেটা লগ করুন, নিম্ন মানের হিসাবে চিহ্নিত করুন | অস্পষ্টতার কারণে মূল গ্রাফিক্স বা টেক্সট পড়া যায় না; উৎস নথি পুনরায় স্ক্যান করা প্রয়োজন. |
এটি লক্ষ করা উচিত যে "কোড প্রদর্শন" শুধুমাত্র API কল এবং ডেটা প্রবাহের সংযোগ যাচাই করে এবং এর মানে এই নয় যে এন্ড-টু-এন্ড ইফেক্ট স্ট্যান্ডার্ড পর্যন্ত। যখন OCG নেস্টেড লজিক, কাস্টম শেডার্স, বা এনক্রিপ্ট করা নথির সম্মুখীন হয়, তখন স্ক্রিপ্ট আউটপুট শুধুমাত্র রেফারেন্সের জন্য এবং পিডিএফ রিডার দ্বারা প্রকৃত রেন্ডারিংয়ের বিরুদ্ধে অবশ্যই গ্রহণ করা উচিত।
🎯 কোন পদ্ধতি আপনার জন্য উপযুক্ত?
যদি আপনি স্বচ্ছতা প্রভাব সংরক্ষণ করতে হবে
প্রথমে এসমাস্ক বিদ্যমান কিনা তা পরীক্ষা করুন, এটিকে একটি আলফা চ্যানেলে মার্জ করুন এবং তারপরে পরবর্তী প্রক্রিয়াকরণ করুন।
আপনার যদি পৃষ্ঠায় শুধুমাত্র আংশিক চিত্রের প্রয়োজন হয়
CTM এবং /BBox পড়ুন এবং সরাসরি বেস ইমেজ সেভ করার পরিবর্তে ডিসপ্লে এরিয়া অনুযায়ী ক্রপ করুন।
যদি আপনার ছবি একটি স্ক্যান বা লো-ডেফিনিশন এমবেড করা হয়
প্রথমে DPI মেটাডেটা রেকর্ড করুন এবং গুণমান চিহ্নিত করুন। মূল বিষয়বস্তু পরিষ্কার না হলে, উৎস ফাইলে ফিরে যান এবং আবার স্ক্যান করুন।
যদি নথিতে স্তর, এনক্রিপশন বা জটিল ক্রপিং থাকে
স্ক্রিপ্ট আউটপুটকে প্রাথমিক ফলাফল হিসাবে বিবেচনা করুন এবং PDF রিডারে চূড়ান্ত রেন্ডারিং প্রভাব প্রাধান্য পাবে।
❓ প্রায়শই জিজ্ঞাসিত প্রশ্ন (FAQ)
1. নিষ্কাশিত চিত্রের স্বচ্ছ এলাকা কালো হয়ে যায় কেন?
সাধারণ কারণ হল যে স্বচ্ছতার তথ্য SMask-এ সংরক্ষণ করা হয় এবং মুখোশ অন্তর্ভুক্ত না করে শুধুমাত্র প্রধান চিত্রটি বের করা হয়।
2. নিষ্কাশিত চিত্রটি আপনি পৃষ্ঠায় যা দেখছেন তার চেয়ে অনেক বড়। কি হচ্ছে?
একই বেসম্যাপ একাধিক পৃষ্ঠা দ্বারা পুনরায় ব্যবহার করা যেতে পারে। প্রতিটি পৃষ্ঠা শুধুমাত্র /BBox এবং ম্যাট্রিক্সের মাধ্যমে এর কিছু অংশ প্রদর্শন করে। সরাসরি নিষ্কাশন একটি সম্পূর্ণ বেসম্যাপ হবে.
3. কোডটি চলে। এর মানে কি নিষ্কাশিত ফলাফল সরাসরি ব্যবহার করা যেতে পারে?
পারে না কোড প্রদর্শন শুধুমাত্র API কল এবং ডেটা প্রবাহের সংযোগ যাচাই করে এবং পাঠকের প্রকৃত রেন্ডারিং ফলাফল চূড়ান্ত গ্রহণযোগ্যতার জন্য ব্যবহার করা প্রয়োজন।
4. নিষ্কাশন সফল, কিন্তু ছবি পাতায় দেখা যাবে না. কারণ কি হতে পারে?
ছবিটি একটি ঐচ্ছিক বিষয়বস্তু গোষ্ঠী (OCG) দ্বারা বা ক্রপ এলাকার বাইরে লুকানো হতে পারে। OCG স্ট্যাটাস জিজ্ঞাসা করা যেতে পারে এবং ক্রপবক্সের সাথে তুলনা করা যেতে পারে।
📝 সারাংশ
পিডিএফ-এ আসল ইমেজ অবজেক্ট এবং পেজ ডিসপ্লে ইফেক্ট হল দুটি স্তরের জিনিস, এবং এক্সট্রাকশনের আগে তাদের মধ্যে সম্পর্ক স্পষ্ট করতে হবে। এসমাস্ক, ম্যাট্রিক্স এবং ক্রপিং তথ্য একসাথে প্রক্রিয়া করুন এবং রেন্ডারিং ফলাফলগুলিকে গ্রহণযোগ্যতার জন্য ব্যবহার করুন, যাতে ফলাফলগুলি নির্ভরযোগ্য হয়।
এটি এখনই চেষ্টা করুন: অনুবাদ শুরু করতে নথিটি আপলোড করুন, মূল বিন্যাস বজায় রেখে৷


