2013-03-08 6 views
6

का उपयोग करके जेपीजी पर ओवरले पीएनजी मेरे पिछले कुछ घंटों में जेपीजी पृष्ठभूमि के शीर्ष पर एक पारदर्शी पृष्ठभूमि के साथ पीएनजी लोगो प्राप्त करने का प्रयास किया गया है। मैंने कई तरीकों से और कई ग्लोबल्स के साथ भी कोशिश की है, लेकिन मुझे लगता है कि परिणाम प्राप्त करने में सक्षम नहीं है।इमेजिक

"सबसे पहले प्रयास":

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

आप देख सकते हैं, जगुआर लोगो सब काला है।


"दूसरा प्रयास"

$overlay = new Imagick('overlay.png'); 
$image = new Imagick('background.jpg'); 

$image->setImageColorspace($overlay->getImageColorspace()); 
$image->compositeImage($overlay, Imagick::COMPOSITE_DEFAULT, 10, 10); 
$image->writeImage('background.jpg'); //replace original background 

$overlay->destroy(); 
$image->destroy(); 

enter image description here

यह एक जगुआर लोगो की तरह यह होना चाहिए है, लेकिन पृष्ठभूमि सब अब में गड़बड़ है।


मैं Imagick::setImageMatte साथ की कोशिश की और overlay to a white background जोड़ने की कोशिश की है (सोचा था कि मैं एक पारदर्शी पृष्ठभूमि की आवश्यकता है) और अभी भी इसे ठीक तरह से छवि प्रदर्शित नहीं करेगा। मैंने उपर्युक्त स्निपेट के कई अन्य बदलावों की कोशिश की है, लेकिन वे सभी पीएनजी को पूरी तरह से या आंशिक काला बनाने लगते हैं।

मुझे क्या याद आ रही है या गलत कर रहा है? क्या कोई मुझे सही दिशा में एक झुकाव दे सकता है? कृपया ध्यान दें कि इसे PHP में करने की आवश्यकता है।

बहुत बहुत धन्यवाद!

उत्तर

10

मैं एक बड़ा मूर्ख हूँ! बाहर निकलता है मैं छवियों को सीएमवाईके से आरजीबी में परिवर्तित करना भूल गया। भविष्य में इसका सामना करने वाले किसी भी व्यक्ति के लिए, मेरी अक्षमता से सीखें!

2

मैं एक और पीएनजी के शीर्ष पर पारदर्शिता के साथ एक पीएनजी ओवरले करने की कोशिश कर रहा था। मैंने इस लाइन का उपयोग the PHP docs से किया था।

$src1->compositeImage($src2, Imagick::COMPOSITE_MATHEMATICS, 0, 0); 

लेकिन मुझे एक ही समस्या मिल रही थी। ओवरले केवल काले रंग के माध्यम से आया था। इसे बदलने के लिए रंगों को ठीक करना प्रतीत होता था।

$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 0, 0); 
संबंधित मुद्दे