2013-03-06 15 views
14

मैं जीडी के साथ संयोजन में PHP में निम्नलिखित करना चाहता हूं। दुर्भाग्यवश, ImageMagick एक विकल्प नहीं है, लेकिन ऐसा लगता है कि में एक समाधान होने के लिए, मुझे लगता है कि यह नहीं लगता है।PHP/GD - पारदर्शी पृष्ठभूमि

मैं एक पारदर्शी पृष्ठभूमि के साथ एक पीएनजी बनाना चाहता हूं। फिर मैं उस पर एक आयत खींचना चाहता हूं, उस पर एक छवि कॉपी करना चाहता हूं, और कुछ पाठ जोड़ना चाहता हूं।

$image = ImageCreateTrueColor (800, 600); 
imagecolortransparent ($image, 0); //0 is pure black, the default fill color 
imagerectangle (...); 
//code to copy an image 
imagettftext ($image, ...); 
imagepng ($image); 

यह ठीक काम करता है, की नकल की छवि का वह हिस्सा छोड़कर काला हो सकता है, और/या पाठ काला हो सकता है: ऐसा करने का एक तरीका यह इस प्रकार है। यह तब भी पारदर्शी हो जाता है, जो कुछ मैं नहीं चाहता हूं।

imagefill ($image, 0,0, 0x7FFF0000); 
imagetransparent ($image, 0x7FFF0000); 

उपर्युक्त कोड मुझे कुछ ऑनलाइन मिला है, जो इसे लाल रंग से भरता है, फिर लाल पारदर्शी बनाता है। फिर, यह छवि में सभी लाल पारदर्शी बनने का कारण बनता है। मैं ऐसा रंग चुन सकता हूं जो होने की संभावना नहीं है, लेकिन मैं इसकी गारंटी नहीं दे सकता।

क्या मुझे कुछ याद आ रही है? क्या यह तय किया जा सकता है? आपके उत्तरों के लिए धन्यवाद!

उत्तर

26

imagecolortransparent शायद आप यहां नहीं चाहते हैं कि आप छवियों को विलय कर रहे हैं, क्योंकि सिंगल-रंग पारदर्शिता खराब है।

इसके बजाय, यह एक पारदर्शी भरने मुखौटा के साथ इतनी तरह की कोशिश: सच को सच रंग छवियों पर

<?php 
$image = imagecreatetruecolor(100, 100); 

// Transparent Background 
imagealphablending($image, false); 
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127); 
imagefill($image, 0, 0, $transparency); 
imagesavealpha($image, true); 

// Drawing over 
$black = imagecolorallocate($image, 0, 0, 0); 
imagefilledrectangle($image, 25, 25, 75, 75, $black); 

header('Content-Type: image/png'); 
imagepng($image); 
+0

imagealphablending चूक तो यह कुछ भी नहीं है अलग :) भी करता है, imagecreatetruecolor एक काले रंग की छवि, यही कारण है बनाता है कोड का पहला भाग imagecolortransparent (0) का उपयोग करता है; – Spinal

+0

उस स्थिति में, मैं आपकी समस्या को देखने में विफल रहता हूं। मैंने केंद्र में एक काला आयत खींचकर उपरोक्त परीक्षण किया, और यह पारदर्शिता के साथ बस ठीक काम कर रहा है। –

+0

वास्तव में? तो मेरे सेटअप के साथ शायद कुछ गलत है, क्योंकि अगर मैं निम्नलिखित कोड आज़माता हूं, तो मुझे इसके चारों ओर काले रंग के साथ एक नीला आयताकार मिलता है! $ image = imagecreatetruecolor (800,600); imagealphablending ($ छवि, सच); imagefilledrectangle ($ छवि, 50,50, 750, 550, imagecolorallocate ($ छवि, 0,0,128)); शीर्षलेख ('सामग्री-प्रकार: छवि/पीएनजी'); imagepng ($ छवि); – Spinal

संबंधित मुद्दे