सफेद पृष्ठभूमि के साथ पीएनजी छवियों में पारदर्शिता को बदलें


293

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

एक गैर-कार्यशील छवि मैजिक कमांड का एक उदाहरण है:

convert img1.png -background white -flatten img1-white.png

जिसके परिणामस्वरूप त्रुटि होती है।

धन्यवाद!


मेरे विशिष्ट मामले में PDF (ए) बनाने के लिए (अपाचे) एफओ प्रोसेसर से गुजरने पर पीएनजी में पारदर्शिता परत का विरोध हुआ। PDF / A पारदर्शिता की अनुमति नहीं देता है। मैंने जिस हैक का इस्तेमाल किया है, उसकी जगह JPG चालू करना है।
विवानी

3
"जिसके परिणामस्वरूप त्रुटि हुई।" त्रुटि संदेश क्या है?
हारून मैकडैड

वह आदेश ठीक काम करना चाहिए। यदि ऐसा नहीं होता है, तो आपके पास Imagemagick या libpng की छोटी गाड़ी स्थापित हो सकती है या आपके संस्करण बहुत पुराने हैं। Imagemagick और libpng का आपका संस्करण क्या है?
fmw42

जवाबों:


253

यह मेरे लिए काम करता है:

convert -flatten img1.png img1-white.png

दस्तावेज़ीकरण संदर्भ:


3
किसी तरह यह मेरे लिए काम नहीं करता है ... मैंने "-ट्रांसपेरेंट-कलर व्हाइट" की कोशिश की, लेकिन एक अपवाद / चेतावनी मिली।
विलियम निउ

1
यह पता चला है कि मुझे सफेद करने के लिए -बैकग्राउंड भी सेट करना होगा। मुझे भी कलर्स.एक्सएमएल डाउनलोड करना था, जो गायब था।
विलियम नीउ

9
नीचे मेरे जवाब की जाँच करें। इस एक के 2 साल बाद इसे जोड़ा गया।
रोक क्रालज

42
बहु-पृष्ठ दस्तावेज़ों को परिवर्तित करने का प्रयास करें -flatten। यह पृष्ठों को एक पृष्ठ में समतल करेगा।
टिम एस।

8
यदि आप इसे अपने फ़ोल्डर से सभी फ़ाइलों पर करना चाहते हैं, तो आप इसे इस तरह से कर सकते हैं: mogrify -flatten *.pngबस मामले में, बैकअप करने के लिए मत भूलना। यहाँ अधिक जानकारी: imagemagick.org/script/mogrify.php
troyane

372
-background white -alpha remove -alpha off

उदाहरण:

convert image.png -background white -alpha remove -alpha off white.png

whiteकिसी भी अन्य रंग को आप चाहते हैं के साथ बदलने के लिए स्वतंत्र महसूस करें । Imagemagick प्रलेखन -alpha removeऑपरेशन के बारे में यह कहता है :

यह ऑपरेशन सरल और तेज़ है, और बिना किसी अतिरिक्त मेमोरी उपयोग, या अन्य साइड इफेक्ट्स की आवश्यकता के बिना काम करता है जो वैकल्पिक पारदर्शिता हटाने की तकनीकों से जुड़ा हो सकता है। यह इस प्रकार छवि पारदर्शिता को हटाने का पसंदीदा तरीका है।


3
ऐसा लगता है कि -background whiteइसकी आवश्यकता नहीं है (हालांकि यह अन्य रंगों के लिए है)।
स्किप्पी ले ग्रैंड गौरू

5
@SkippyleGrandGourou: इसकी जरूरत है, क्योंकि पीएनजी के लिए पारदर्शिता कम करने वाला रंग हमेशा सफेद नहीं होता है।
रोख क्राल्ज

3
स्वीकार किए गए उत्तर से बेहतर (जो एक से अधिक परत के मामले में सही काम नहीं करता है)
axkibe

5
परिणामी छवि में अभी भी एक अल्फा चैनल होगा। यह खाली होगा लेकिन यह अभी भी रहेगा। चैनल ऐड को पूरी तरह से हटाने के लिए -alpha off
जोस

2
काम नहीं करता है। मैंने पारदर्शी पृष्ठभूमि और बीच में लाल बिंदु के साथ एक नया पीएनजी बनाया। हमेशा एक काले रंग की पृष्ठभूमि का उत्पादन किया, कोई फर्क नहीं पड़ता कि मैं किस रंग को निर्दिष्ट करता हूं। convert image.png -background white -alpha off white.pngएक काली पृष्ठभूमि के साथ एक छवि का उत्पादन किया। convert image.png -background "#00ff33" -alpha off 00ff33.pngएक काले रंग की पृष्ठभूमि का निर्माण किया
McNulty

46

छवि को समतल करना और पृष्ठभूमि छवि को लागू करना ImageMagick में सीधे आगे है

हालाँकि, आदेशों का क्रम बहुत महत्वपूर्ण है

पारदर्शी छवि पर किसी भी पृष्ठभूमि को लागू करने और इसे समतल करने के लिए, पहले इसे समतल करने की तुलना में पृष्ठभूमि को लागू करें। रिवर्स काम नहीं करता है।

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

जो भी कारण हो, मेरे लिए यह ठीक रहा। सुनिश्चित नहीं हैं कि आपका मूल प्रयास क्यों काम नहीं किया।
एंथनी

23

मेरे लिए काम करने वाला एकमात्र जवाब सभी का मिश्रण था:

convert in.png -background white -alpha remove -flatten -alpha off out.png

4
कूल, कि काम किया। मुझे वास्तव में सफेद की तुलना में एक और रंग की आवश्यकता थी और आप सफेद का उपयोग ... -background "#010203" ...करने के बजाय उपयोग कर सकते हैं ।
एलेक्सिस विलके

यहाँ कैसे एक निर्देशिका में सभी फ़ोल्डर्स में एक ही छवि को बदलने के लिए हैmogrify -background white -flatten */*.png
जूलियन

-alpha removeयह मेरे लिए क्या था
स्टीफन ड्रैगनेव

13

पारदर्शी के बजाय सफेद के साथ एक निर्देशिका में सभी फ़ोल्डरों में एक ही छवि को बदलने का तरीका यहां बताया गया है:

mogrify -background white -flatten */*.png


10

का उपयोग करते हुए -flatten ने मुझे पूरी तरह से पागल बना दिया क्योंकि-mogrify फसल के साथ संयोजन में -flatten और आकार बदलने का काम नहीं करता है। आधिकारिक और मेरे लिए केवल सही तरीका अल्फा चैनल को "हटाना" है।

-एलपीए हटाओ-जालफा बंद (जेपीजी के साथ की जरूरत नहीं)

दस्तावेज़ देखें: http://www.imagemagick.org/Usage/masking/#remove


तो कमांड कैसे बनेगी? यह यहाँ काम नहीं किया:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
कुंभ राशि

मैं केवल अल्फा निकालना चाहता था। JPG में कनवर्ट करें यह अच्छा और आसान है। पारितोषिक के लिए धन्यवाद।
रोजर सीएस वर्नरसन

यह ऊपर का एकमात्र समाधान है जो मेरे लिए काम करता है। अब आईट्यून्स स्टोर मेरी छवि से खुश है।
बिल चेसविक

7

अल्फा निकालें की धारा ImageMagick उपयोग मार्गदर्शिका उपयोग करने का सुझाव -alpha removeविकल्प, जैसे:

convert in.png  -background white  -alpha remove  out.png

... -backgroundआपके चयन के रंग का उपयोग करना ।

गाइड बताता है:

यह ऑपरेशन सरल और तेज़ है, और बिना किसी अतिरिक्त मेमोरी उपयोग, या अन्य साइड इफेक्ट्स की आवश्यकता के बिना काम करता है जो वैकल्पिक पारदर्शिता हटाने की तकनीकों से जुड़ा हो सकता है। यह इस प्रकार छवि पारदर्शिता को हटाने का पसंदीदा तरीका है।

यह अतिरिक्त रूप से नोट जोड़ता है:

ध्यान दें कि पारदर्शिता को हटाए जाने के दौरान अल्फा चैनल चालू रहेगा, लेकिन अब पूरी तरह से अपारदर्शी होगा। यदि आपको अब अल्फा चैनल की आवश्यकता नहीं है तो आप इसे निष्क्रिय करने के लिए अल्फा बंद का उपयोग कर सकते हैं।

इस प्रकार, यदि आपको अल्फा चैनल की आवश्यकता नहीं है, तो आप -alpha offविकल्प को जोड़कर अपनी आउटपुट छवि का आकार छोटा कर सकते हैं , जैसे:

convert in.png  -background white  -alpha remove  -alpha off  out.png

इमेजेज सेक्शन से रिमूवल ट्रांसपेरेंसी में वर्णित पारदर्शिता को हटाने के लिए अक्सर इस्तेमाल की जाने वाली तकनीकों पर अन्य विवरण हैं ।

-flattenपारदर्शिता को हटाने के लिए एक तकनीक के रूप में उपयोग करने के लिए एक महत्वपूर्ण चेतावनी का उल्लेख उस खंड में शामिल है :

हालांकि, यह "मोग्रिफ़" या कई छवियों के अनुक्रम के साथ काम नहीं करेगा, मूल रूप से क्योंकि "-flatten" ऑपरेटर वास्तव में एक छवि में कई छवियों को मर्ज करने के लिए डिज़ाइन किया गया है।

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


5

ऐसा प्रतीत होता है कि आपकी कमांड सही है, इसलिए समस्या PNG () के लिए अनुपलब्ध समर्थन के कारण हो सकती है। आप convert -list configureनिम्न के साथ जांच कर सकते हैं या बस कोशिश कर सकते हैं :

sudo yum install libpng libpng-devel

1
हाँ धन्यवाद; इस (पुराने) के अंक में "graphicks जादुई करिश्मों" एक बग है, जो था एक कांटा / रीराइट / "छवि जादुई करिश्मों 'की जो कुछ भी।
नुकीले

@ मैं देख रहा हूँ! जिज्ञासा से बाहर, इस मुद्दे का वास्तविक कारण क्या था (जो केवल एक संस्करण में था)?
एलेस्टेयर

वास्तव में मैं वास्तव में नहीं जानता; यह सिर्फ एक बग था। मैं ग्राफिक्स मैजिक का अनुचर नहीं हूं, इसलिए मुझे उनके कोड में कोई जानकारी नहीं है। मुझे लगता है कि मुझे कुछ बिंदु पर फिर से प्रयास करने की आवश्यकता है।
पॉइन्टी जूल

ubuntu के पास यह नहीं है? यहाँ libpng12-0 है, लेकिन फिर भी काम नहीं करता है :(
कुंभ राशि

मैं libpng12-0स्थापित और काम के साथ Ubuntu 13.04 का उपयोग कर रहा हूं । यदि आप इसे चलाते हैं तो क्या आप png को देख सकते हैं? convert -list configure | grep \png
एलिस्टेयर

5

यह वास्तव में आपके प्रश्न का उत्तर नहीं है, लेकिन मैंने आपका प्रश्न पाया कि अल्फा चैनल को कैसे हटाया जाए, यह जानने की कोशिश कर रहा हूं, इसलिए मैंने इस उत्तर को यहां जोड़ने का फैसला किया:

यदि आप imagemagick का उपयोग करके अल्फा चैनल को हटाना चाहते हैं, तो आप इस कमांड का उपयोग कर सकते हैं:

mogrify -alpha off ./*.png

3

वेल्ड यह ऐसा लगता है कि "इमेज मैजिक" पर "ग्राफिक्स मैजिक" स्थापित करने के मेरे फैसले में कुछ खुरदुरे किनारे हैं - जब मैं वास्तविक क्रेफ़्टी पुरानी "इमेज मैजिक" को फिर से इंस्टॉल करता हूं, तो उपरोक्त कमांड पूरी तरह से अच्छी तरह से काम करता है।

संपादित करें , एक लंबे समय के बाद - इन दिनों में से एक मैं यह देखने के लिए जांच करूंगा कि क्या "ग्राफिक्स मैजिक" ने इस मुद्दे को तय किया है।


2

मुझे या तो जरूरत थी: दोनों -alpha backgroundऔर -flatten, या -fill

मैंने पारदर्शी पृष्ठभूमि और बीच में लाल बिंदु के साथ एक नया पीएनजी बनाया।

convert image.png -background green -alpha off green.png विफल: यह काले रंग की पृष्ठभूमि के साथ एक छवि का उत्पादन किया

convert image.png -background green -alpha background -flatten green.png सही हरे रंग की पृष्ठभूमि के साथ एक छवि का उत्पादन किया।

बेशक, एक और फाइल के साथ जिसका मैंने नाम बदला image.png, वह कुछ भी करने में विफल रही। उस फ़ाइल के लिए, मैंने पाया कि पारदर्शी पिक्सेल का रंग "# d5d5d5" था, इसलिए मैंने उस रंग को हरे रंग से भर दिया:

convert image.png -fill green -opaque "#d5d5d5" green.png पारदर्शी पिक्सल को सही हरे रंग से बदल दिया।


वर्तमान ImageMagick के साथ उचित आदेश होगा convert image.png -background green -alpha background -alpha off green.pngया convert image.png -background green -alpha background -alpha remove green.pngया convert image.png -background green -flatten green.png
fmw42

1

गैर-कमांड लाइन विकल्प: विंडोज पेंट में पीएनजी फ़ाइल खोलें और सहेजें पर क्लिक करें।


0

यह सिर्फ 2 के शीर्ष पर पारदर्शिता के साथ 1 रखने के लिए एक छवि बनाता है

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

मूल रूप से इस पोस्ट पर टिप मिला


0

वास्तव में अल्फ़ा चैनल को फ़ाइल से हटाने के लिए, अल्फ़ा ऑफ़ विकल्प का उपयोग करें :

convert in.png -background white -alpha off out.png

1
वास्तव में, आपके द्वारा दिया गया लिंक कहता है: "यह वास्तव में छवि से जुड़े अल्फा चैनल को नष्ट या नष्ट नहीं करता है, यह बस उस प्रभाव को बंद कर देता है जो चैनल छवि पर है।" अल्फा चैनल को वास्तव में हटाने के लिए, मेरा उत्तर देखें।
रोक क्रालज

0

मैंने इस प्रश्न और उत्तर को देखा, जो वास्तव में मेरी मदद करते हैं, लेकिन तब मुझे इसे बहुत सारी फ़ाइलों के लिए करने की आवश्यकता थी, इसलिए यदि आपके पास एक फ़ोल्डर में कई छवियां (PNG छवियां) हैं और आप इसे सभी के लिए करना चाहते हैं:

find ./ -name "*.png" -exec convert {} -flatten {} \;

-1

यह बंद है, नाल्फा हटा! किसी भी आइकन में एक अल्फा चैनल होने पर iOS ऐप स्टोर अपलोड विफल हो जाता है !!

यहाँ यह कैसे करना है: mogrify -alpha * .png बंद करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.