GraphicsMagick या ImageMagick का उपयोग करते हुए, मैं एक भरण रंग के साथ पारदर्शिता कैसे बदलूं?


5

GraphicsMagick का उपयोग करना, पारदर्शिता के साथ एक रंग को बदलना काफी आसान है ...

gm convert -transparent magenta src.png dst.png

दुर्भाग्य से, मैं सटीक विपरीत करने के लिए एक सरल तरीका नहीं समझ सकता। अगर मेरे पास अल्फा-चैनल पारदर्शिता के साथ एक छवि फ़ाइल है, तो मैं इसे निरंतर-रंग की पृष्ठभूमि पर कैसे बनाऊं तो अब निरर्थक अल्फा चैनल को छोड़ दें? पृष्ठभूमि का रंग उन पिक्सेल को प्रभावित करना चाहिए जो आंशिक रूप से पारदर्शी होने के साथ-साथ पूरी तरह से पारदर्शी थे।

मैंने + मैट विकल्प देखा है, लेकिन यह शाब्दिक रूप से अल्फा परत को त्यागता है - आम तौर पर रद्दी रंग के पिक्सल को छोड़कर जहां पारदर्शिता थी, उदा। उपयोग करने के लिए पृष्ठभूमि का रंग निर्दिष्ट करने के लिए -background विकल्प का उपयोग करना।

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

मैं वर्तमान में GraphicsMagick का उपयोग करता हूं, लेकिन कोई प्रतिबद्धता नहीं है - अगर यह चीजें आसान बनाता है तो मैं ImageMagick पर स्विच करूंगा।

संपादित करें

जब मैं कहता हूं "पृष्ठभूमि का रंग पिक्सेल को प्रभावित करना चाहिए जो आंशिक रूप से पारदर्शी होने के साथ-साथ पूरी तरह से पारदर्शी है।", मेरा मतलब है कि परिणाम स्पष्ट रूप से होना चाहिए जो मैं सामान्य रूप से एक ठोस रंग की पृष्ठभूमि पर एक पारदर्शी स्प्राइट को ब्लाइट करने से उम्मीद करूंगा। आंशिक रूप से पारदर्शी पिक्सल को मिश्रित किया जाना चाहिए।

इसका मतलब यह है कि अगर मैंने प्रक्रिया को उलट दिया है - पृष्ठभूमि रंग की कुंजी को पारदर्शिता में बदल दिया है - मैं मूल छवि के चारों ओर एक प्रभामंडल देखने की उम्मीद करूंगा, जहां पृष्ठभूमि का रंग पिक्सेल में मिश्रित होता है, इसलिए रंग कुंजी ठीक से मेल नहीं खाती और इसलिए वापस पारदर्शिता में परिवर्तित नहीं है। यह नहीं है कि ज्यादातर लोग उस कारण के लिए क्या चाहते हैं। हालांकि, मैं यही चाहता हूं, हालांकि, मैं बैकग्राउंड को ट्रांसपेरेंसी में नहीं बदलूंगा - अगर जरूरत पड़ी तो मैं ओरिजिनल ट्रांसपेरेंसी वाली ऑरिजनल इमेज भी ले लूंगा।

जवाबों:


6

GraphicsMagick का उपयोग करना, -background रंग —संत ० x ० आपकी प्रक्रिया में पहले दो चरणों को बदलने में सक्षम होना चाहिए (ImageMagick के लिए, यह होगा -mosaic के बजाय -extent )। मुझे तीसरे चरण के बारे में निश्चित नहीं है, लेकिन लगता है कि आप अभी चल रहे हैं +matte पहले दो चरणों से छवि पर, इसलिए अंतिम कॉल कुछ इस तरह दिखाई देगी:

gm convert -background  रंग  -संत 0x0 + मैट src.png dst.png 

या ImageMagick के लिए,

convert src.png -background  रंग  -मशीन + मैट dst.png 

हम्म - एक ठोस रंग पृष्ठभूमि पर शून्य छवियों के मोज़ेक के रूप में निर्मित एक पृष्ठभूमि छवि। चतुर। अभी तक परीक्षण नहीं किया गया है, लेकिन मुझे लगता है कि आप स्वीकार कर रहे होंगे।
Steve314

क्षमा करें - कोई स्वीकृति नहीं है क्योंकि यह काम नहीं किया। ग्राम शिकायत करता है कि इसे -mosaic के लिए एक छवि सूची की आवश्यकता है। इसके चारों ओर काम करने के लिए केवल एक छवि की आवश्यकता होती है, लेकिन यहां तक ​​कि उदा। दो बार एक ही स्रोत की छवि होने पर, आपको एक परिणाम मिलता है लेकिन यह पारदर्शिता के तहत निर्दिष्ट रंग की पृष्ठभूमि नहीं खींचता है। मैं लगभग एक साधारण के रूप में ही मिलता है gm convert केवल का उपयोग कर +matte विकल्प, मूल रूप से, जो भी उपयोग नहीं करता है -background यहां तक ​​कि अगर आप इसे निर्दिष्ट करते हैं - तो आपको बस रद्दी पिक्सेल मिलते हैं जो पहले पारदर्शिता द्वारा छिपे हुए थे।
Steve314

अरे! माफ़ करना। मैंने एक काम के समाधान के साथ अपना जवाब संपादित किया है। मैंने ग्राफ़िक्समैगिक और इमेजमैजिक समाधानों को संभालने की गलती की, जो वे हैं, की तुलना में अधिक विनिमेय थे।
kate

सफलता! - या स्पष्ट सफलता, वैसे भी। मैं इस समय केवल परीक्षण करने के लिए वास्तविक पारदर्शिता के साथ एक छवि नहीं पा सकता था, इसलिए एक का उपयोग कर -transparent बनाया, लेकिन यह किसी भी अर्ध-पारदर्शी पिक्सेल नहीं देता है फिर भी, फिलहाल यह ठीक लगता है - धन्यवाद और स्वीकार किया गया।
Steve314

मैंने पाया कि निम्नलिखित कमांड दोनों ग्राफिक्समैजिक और इमेजमैजिक ('ग्राम' के साथ या उसके बिना) के लिए काम करता है: ग्राम कन्वर्ट -गेमेट्री 50x50! -ग्राउंड सफेद-सघन 0x0 + मैट in.png out.jpg
PowerKiKi

1

आप जो खोज रहे हैं, वह लगभग -ओपैके के वर्णन पर फिट बैठता है, लेकिन एक मोड़ के साथ। एक निरंतर-रंग की पृष्ठभूमि को मानते हुए, नीचे दी गई कमांड आपके लिए काम कर सकती है (मेरे पास केवल परीक्षण करने के लिए इमेजमैजिक है)।

gm convert -channel matte -threshold 0% -channel RGB -fill  [आपकी पृष्ठभूमि का रंग]  पारदर्शी पारदर्शी -चैनल मैट -थ्रेशोल्ड 100% src.png dst.png 

-channel matte -threshold 0% पूरी तरह से पारदर्शी किसी भी पारदर्शिता के साथ पिक्सेल सेट करता है, -channel RGB -fill [आपकी पृष्ठभूमि का रंग] पारदर्शी पारदर्शी दिए गए रंग को भरने के साथ पूरी तरह से पारदर्शी पिक्सेल बदलता है, और -channel matte -threshold 100% सभी पिक्सेल से पारदर्शिता निकालता है।


दिलचस्प और +1, लेकिन मैं इस बारे में स्पष्ट नहीं था कि मुझे क्या चाहिए - प्रश्न को संपादित देखें। जैसा कि आप कहते हैं, "-opaque पारदर्शी" पूरी तरह से पारदर्शी पिक्सेल की जगह लेता है, इसलिए जब भी मैं मूल सीमा को छोड़ता हूं तो मुझे आंशिक रूप से पारदर्शी पिक्सेल का बैकग्राउंड कलर में ब्लेंडिंग नहीं मिलेगा। सपना समाधान (मान्य नहीं) कुछ ऐसा होगा gm convert -bgfill magenta +matte src.png dst.png-draw Rectangle ठीक होगा, अगर केवल एक था -compose Under पूरक के लिए -compose Over
Steve314

1

यह मुझे ऐसा लगता है जैसे आप पृष्ठभूमि पर पारदर्शी (या आंशिक रूप से) छवि को मिश्रित करना चाहते हैं, अल्फा सम्मिश्रण के साथ। यह पन्ना सुझाव है कि कोड:

composite smile.gif rose: rose-over.png

आधार है। दिए गए उदाहरणों में, यह एक छवि को दूसरे पर मिश्रित करता है।

अब, यदि आप एक ठोस पृष्ठभूमि के रंग के साथ पारदर्शिता के साथ एक छवि मिश्रण करना चाहते हैं, तो आप या तो पृष्ठभूमि के साथ एक दूसरी छवि (यदि यह स्थिर है), या एक ही आयामों की एक बुनियादी एकल-रंग / बाढ़ से भरी छवि बना सकते हैं क्रम। यदि आप शेल या किसी प्रकार की स्क्रिप्ट (पर्ल, पीएचपी, आदि) का उपयोग कर रहे हैं, तो आप इस पर कैसे निर्भर करते हैं।


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

मुझे नहीं पता कि मैंने कभी देखा है कि आप क्या करने की कोशिश कर रहे हैं। आप कुछ विधि खोजने में सक्षम हो सकते हैं, लेकिन अल्फा सम्मिश्रण यह हार्डवेयर में कैसे किया जाता है, इसलिए विधि के लिए कुछ है। मैं शर्त लगा सकता हूँ अगर आप एक और तरीका ढूंढते हैं, तो यह एक कॉल में कुछ इस तरह से लपेटता है।
ssube

इससे पहले कि मैं इसे पढ़ता हूँ - मुझे कुछ याद आया rose: वाक्य - विन्यास। यह वही हो सकता है जो मैं एक के बाद एक साधारण कॉल में देख रहा था।
Steve314

आह - गुलाब: एक गुलाब की एक अंतर्निहित छवि को संदर्भित करता है, न कि एक ठोस गुलाब रंग। एक शर्म - एक ठोस रंग निर्दिष्ट करने में सक्षम होने के नाते जैसे कि यह एक छवि थी एक बहुत ही सरल समाधान होगा।
Steve314
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.