2009-06-10 15 views
15

के साथ एक पीडीएफ को एक पारदर्शी पीएनजी में कनवर्ट करें, मैं भूतलस्क्रिप्ट का उपयोग करने के लिए,पारदर्शी पृष्ठभूमि के साथ पीएनजी फ़ाइलों के लिए पारदर्शी पृष्ठभूमि के साथ पीडीएफ फाइलों को रास्टराइज़ करने का प्रयास कर रहा हूं। मेरे पास अन्य लोगों से प्रश्नों के लिए उच्च और निम्न खोजे गए हैं, जो और पोस्ट किए गए समाधानों में से कोई भी नहीं है, जहां तक ​​मैं कह सकता हूं कि निर्दिष्ट करने के लिए नीचे -sDEVICE = pngalpha, मेरी टेस्ट फाइलों के साथ काम किया है। इस बिंदु पर मैं वास्तव में किसी भी सलाह या युक्तियों की सराहना करता हूं और अधिक अनुभवी हाथ प्रदान कर सकता है।GhostScript

मेरा परीक्षण पीडीएफ यहाँ स्थित है: http://www.kolossus.com/files/test.pdf

यह हो सकता है कि इस मुद्दे को इस फ़ाइल के साथ है, लेकिन मैं इसे संदेह है। जहां तक ​​मैं बता सकता हूं, इसमें कोई निर्दिष्ट पृष्ठभूमि नहीं है, और जब मैं फ़ोटोशॉप या इलस्ट्रेटर जैसे पारदर्शिता-जागरूक ऐप के साथ फ़ाइल खोलता हूं, तो सुनिश्चित करें कि यह एक पारदर्शी पृष्ठभूमि के साथ प्रदर्शित करता है। हालांकि, जब एडोब रीडर जैसे एप्लिकेशन के साथ खोला गया तो फ़ाइल को एक सफेद पृष्ठभूमि के साथ प्रस्तुत किया जाता है। मेरा मानना ​​है कि पीडीएफ को पीडीएफ के मुकाबले पीडीएफ प्रस्तुत करने वाले एप्लिकेशन के साथ और अधिक करना है - एडोब रीडर जैसे ऐप्स मानते हैं कि आप देखना चाहते हैं कि एक मुद्रित दस्तावेज़ कैसा दिखाई देगा और इसलिए हमेशा एक सफेद कैनवास दिखाएं कलाकृति - लेकिन मैं निश्चित नहीं हो सकता।

gs आदेश मैं उपयोग कर रहा हूँ है:

gs -dNOPAUSE -dBATCH -sDEVICE=pngalpha -r72 -sOutputFile=test.png test.pdf 

यह एक PNG सीमांकन बॉक्स फ़ाइल में कलाकृति के के बाहर पारदर्शी पिक्सेल है कि पैदा करता है, लेकिन सभी पिक्सल कि कलाकृति के अंदर हैं बाउंडिंग बॉक्स एक सफेद पृष्ठभूमि के खिलाफ rasterized हैं। यह मेरे लिए समस्या है, क्योंकि मेरी कलाकृति में छाया और एंटीअलाइज्ड किनारों को छोड़ दिया गया है, जिन्हें अंतिम आउटपुट में संरक्षित होने की आवश्यकता है, और केवल ImageMagick के साथ पोस्टप्रोसेस्ड नहीं किया जा सकता है। मेरे पीएनजी आउटपुट का एक नमूना अंत में पीडीएफ के समान स्थान पर है, अंत में .png के साथ (stackoverflow मुझे मेरी पोस्ट में एक से अधिक यूआरएल शामिल नहीं करने देगा)।

दिलचस्प बात यह है कि, मुझे -dBackgroundColor ध्वज का उपयोग करने से कोई प्रभाव नहीं दिखता है, यहां तक ​​कि यदि मैं इसे गैर-सफेद जैसे -DBackgroundColor = 16 # ff0000 पर सेट करता हूं। शायद इस झंडे के वाक्यविन्यास की मेरी समझ गलत है।

भी दिलचस्प बात यह है कि मुझे उप-पिक्सेल एंटीअलाइजिंग को सक्षम करने के लिए -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 झंडे का उपयोग करने से कोई प्रभाव नहीं दिखता है। मैं विशेष रूप से टेक्स्ट पर उप-पिक्सेल एंटीअलाइजिंग, को सक्षम करने के तरीके पर किसी भी सलाह की सराहना करता हूं।

अंत में, मैं GPL Ghostscript 8.64 उपयोग कर रहा हूँ मैक ओएस 10.5.7 पर, और प्रतिपादन कार्यप्रवाह मैं की स्थापना के लिये कोशिश कर रहा हूँ PrinceXML द्वारा पीडीएफ़ आउटपुट से पारदर्शी PNG छवियों उत्पन्न करने के लिए है। मैं ImageMagick का उपयोग करने के बजाय सीधे रास्टराइजेशन के लिए घोस्टस्क्रिप्ट को बुला रहा हूं क्योंकि ImageMagick पीडीएफ रास्टरराइजेशन के लिए घोस्टस्क्रिप्ट को प्रतिनिधि करता है और मुझे सीधे जीएस को कॉल करके बेहतर रास्टरराइजेशन को नियंत्रित करने में सक्षम होना चाहिए।

आपकी मदद के लिए धन्यवाद।

-Jon वोल्फ

उत्तर

2

डर मैं आपको बता नहीं सकता Ghostscript कर सकते हैं, लेकिन मैं एक सुझाव है क्या।अपने पीडीएफ को एक काले और सफेद पृष्ठभूमि दोनों के साथ प्रस्तुत करने का प्रयास करें। किसी भी पिक्सेल जो दो छवियों में समान होता है, स्पष्ट रूप से अपारदर्शी (यानी, अल्फा == 1.0) होना था। अलग-अलग पिक्सल में एक गैर-शून्य अल्फा होता है जिसे सफेद पृष्ठभूमि पिक्सेल से काले पृष्ठभूमि पिक्सेल को घटाकर गणना की जा सकती है। कुछ परिशुद्धता दें या लें, किसी भी लाल, हरे या नीले रंग का मान अल्फा मान होगा।

2

घोस्टस्क्रिप्ट केवल पारदर्शीता को संभाल सकता है अगर निर्माण समय पर "ट्रांसपर" विकल्प चुना गया था। अपने Ghostscript सही संस्करण मानते हुए है, तो आप कमांडलाइन पर एक पैरामीटर जोड़ सकते हैं:

... -c "0 .setopacityalpha" -f c:/path/to/file/to/be/converted.pdf 

(आप रेंज [0..1] में अस्पष्टता के लिए वेरिएंट उपयोग कर सकते हैं)।

इसके अलावा, आप अपने Ghostscript रूप से बनाए गए .png परिवर्तित करने की कोशिश की है (इस मामले में कि पृष्ठभूमि वास्तव में पारदर्शी के बजाय सफेद है) एक पारदर्शी पृष्ठभूमि ImageMagick के convert या GraphicMagick के gm convert आदेशों का उपयोग करते हैं?

convert -background transparent test.png test_transp.png 

BTW, मामले एक्रोबेट या AcroReader सफेद के रूप में सभी पेज पृष्ठभूमि दिखाने में: इस डिफ़ॉल्ट भी वास्तव में पारदर्शी पृष्ठभूमि के लिए सेटिंग है यहाँ एक उदाहरण है। आप इसे एप्लिकेशन के सेटअप विकल्पों में बदल सकते हैं: आईआईआरसी सेटिंग 'पेज डिस्प्ले' विकल्पों के अंदर थी और नामित किया गया था। जैसे 'पारदर्शिता रास्टर्स दिखाएं'। (अगर मैंने इसे विस्तार से देखा, तो संभवत: यह बहुत अधिक मदद नहीं करेगा - एडोब हर नई रिलीज में चारों ओर सभी विकल्पों को स्थानांतरित करता रहता है। बस अपने आस-पास चारों ओर पोक करें, अब आप पाएंगे कि आप जानते हैं कि यह वहां है।)

18

मैं आपके अनुभव को -dTextAlphaBits=4 और -dGraphicsAlphaBits=4 झंडे के साथ साझा करता हूं। वे सभी ग्रंथों पर काम नहीं करते हैं। मैं जिस "फिक्स" के साथ आया था, वह छवि को वांछित आकार में 4 बार प्रस्तुत करना था, और उसके बाद छवि को स्केल करना था। सौभाग्य से ghostscript में gigapixel पीएनजी फ़ाइलों को प्रस्तुत करने में कोई समस्या नहीं है।

अद्यतन

Ghostscript (संस्करण 9 तक) भी प्रमुख समस्याओं आनंद लेने के लिए जब पारदर्शी PNG के प्रतिपादन ऊपर 2.500.000 (अर्थात 10 पिक्सेल बफर के एमबी) एक पिक्सेल गिनती के साथ लगता है। पारदर्शी पृष्ठभूमि अचानक सफेद हो जाती है।

भूतस्क्रिप्ट के स्रोत को ड्रिलिंग, मैंने पाया कि जब पिक्सेल बफर आकार 10 एमबी से अधिक हो जाता है, तो यह एक अलग स्मृति आवंटन योजना में बदल जाता है। अधिक विशेष रूप से, छवि pngalpha के बजाय डिवाइस image32 का उपयोग करके प्रस्तुत की जाती है। pngalpha चालक को लागू करने के तरीके को देखते हुए, जीएस ने pngalpha_fill_rectangle() का उपयोग न करने का निर्णय लिया है, तो इसका पूरा उद्देश्य गायब हो जाता है।

सौभाग्य से, इस पैरामीटर को रनटाइम पर कॉन्फ़िगर करने के लिए -dMaxBitmap=N नामक एक स्विच है। 1 999-01-15 में एक पूरी तरह से अलग बग के लिए कामकाज में इसका उल्लेख किया गया है, http://pages.cs.wisc.edu/~ghost/doc/AFPL/5.50/relnotes/index.htm देखें।

-dMaxBitmap=2147483647 जोड़ना मेरे लिए बहुत सारी समस्याओं का समाधान करता है। 64 बिट सिस्टम पर, यह संख्या अधिक हो सकती है।

एक सच्चे ठीक निश्चित रूप से pngalpha ड्राइवर rework करने के लिए इतना है कि यह कोई फर्क नहीं पड़ता वास्तविक कोड पथ 0x7f000000 लिए पृष्ठभूमि रंग सेट करता है, लेकिन सबसे प्रणालियों ऊपर चाल काम करने के लिए बोर्ड पर पर्याप्त राम है किया जाएगा।

+0

बस इस उत्तर के लिए धन्यवाद कहना चाहता था। मैं 'जीएस 9.02' के साथ एक पीडीएफ को रास्टराइज़ करने की कोशिश कर रहा हूं, जो पारदर्शी भरने के साथ दो पीडीएफ का ओवरले है ('pdftk' के साथ किया गया); जब मैंने '-150' के साथ रास्टरराइज किया, तो मुझे केवल शीर्ष परत दिखाई दे रही है, जबकि नीचे लगभग अदृश्य है। इसे पढ़ने के बाद, मैंने '-dMaxBitmap = 2147483647' की कोशिश की, दुर्भाग्य से यह मेरे लिए काम नहीं किया - लेकिन फिर मैंने संकल्प को कम करना शुरू कर दिया, जब तक कि मुझे यह नहीं मिला कि '-r80' (मेरे मामले के लिए), आखिर में रंग प्रस्तुत किए जाते हैं ठीक से - जिसका शायद मतलब है कि यह वही स्मृति बग है। सौभाग्य से, 'गिंप' मेरे लिए काम किया। चीयर्स! – sdaau

+1

बस कहना चाहता था कि पारदर्शी पीएनजी मेरे लिए ठीक काम करता है। मैं विंडोज पर GhostScript 9.19 और लिनक्स पर 9.06 का उपयोग कर रहा हूं। मैं इन विकल्पों का उपयोग कर रहा हूं: '-q -dquIET -dSAFER -dBATCH -dNOPAUSE -DNOPROMPT -dMaxBitmap = 500000000 -dAlignToPixels = 0 -dGridFitTT = 2 -sDEVICE = pngalpha -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -r150'। मुझे नहीं पता कि उनमें से कोई भी कोई फर्क नहीं पड़ता है, यह सिर्फ मेरे लिए बॉक्स से बाहर काम करता है, इसलिए मैंने इसके साथ खेल नहीं लिया। – TheStoryCoder