2012-03-05 22 views
5

मैं कल्पना का उपयोग कर php के साथ एक छवि के पारदर्शी क्षेत्रों को हटाने की कोशिश कर रहा हूँ। Imagick::trimImageइमेजिक में ट्रिमिंग रंग कैसे सेट करें?

किनारों कि छवि से पृष्ठभूमि रंग हैं निकालें:

छवि Magick trim तरीका प्रदान करता है। इमेजिक को ImageMagick संस्करण 6.2.9 या नए के खिलाफ संकलित किया गया है, तो यह विधि उपलब्ध है।

मैं रंग को कैसे सेट कर सकता हूं जो इमेजिक ट्रिम कर सकता है?

निम्न स्क्रिप्ट पृष्ठभूमि रंग को भूरे रंग में सेट करती है। हालांकि ट्रिम नीली पृष्ठभूमि रंग को हटा देता है जैसा कि आप नीचे देख सकते हैं।

$im = new Imagick("1.png"); 
// Set background color to grey 
$im->setImageBackgroundColor(new ImagickPixel("rgb(213,213,213)")); 
$im->trimImage(0); 
$im->writeImage('2.png'); 

enter image description here

वहाँ ट्रिम रंग सीमित करने के लिए कोई तरीका है?

Imagick मॉड्यूल संस्करण => 2.1.1-RC1

+0

मुझे लगता है कि प्रलेखन "पृष्ठभूमि रंग" की एक नहीं बल्कि हारने परिभाषा का उपयोग किया जा सकता है की तुलना में आप उम्मीद कर रहे हैं। ImageMagick में ट्रिम छवि के * कोने पिक्सेल * के रंग लेकर और वहां से काम करके पृष्ठभूमि को हटा देता है, मुझे विश्वास है। ऐसा लगता है कि आपके मामले में क्या हो रहा है। इसकी पुष्टि करने के लिए, [मैनुअल] (http://www.imagemagick.org/Usage/crop/#trim) से तीन-रंग उदाहरण का उपयोग करने का प्रयास करें - एक पंक्ति में रंग के तीन ठोस वर्गों के साथ एक छवि बनाएं, चलाएं अपनी ट्रिम करें, और देखें कि क्या आपको केवल केंद्र वर्ग के साथ छोड़ दिया गया है। –

+0

इस उदाहरण में, परिणामस्वरूप छवि वर्ग, नाइस है ... मैं इसे सुनिश्चित करना चाहता हूं कि यह वर्ग है। क्या कोई ऐसा कार्य है जो ऐसा कर सकता है .... अगर छवि आयताकार है और "निकालें" या पृष्ठभूमि आयताकार छवि उत्पन्न करती है, तो मुझे इसे वर्ग के लिए क्या करना है .... – menardmam

उत्तर

7

मैट Gibsons सुझाव मुझे सही समाधान करने के लिए नेतृत्व: http://www.imagemagick.org/Usage/crop/#trim_color

के रूप में मैट पहले से ही समझाया ट्रिम विधि कोने रंग लेता छवि ट्रिम करने के लिए। दस्तावेज़ीकरण से दिया गया समाधान एक वर्कअराउंड है: वे ट्रिम विधि को कॉल करने से पहले छवि के चारों ओर एक सीमा खींचते हैं।

$img = new Imagick("stripes.gif"); 
// Set the color to trim: 
$img->borderImage("#FF0000", 1, 1); 
$img->trimImage(0); 
$img->setImagePage(0, 0, 0, 0); 
$img->writeImage("test.jpg");' 

Demo

+0

कूल, खुशी है कि मेरा अनुमान सही था। –

-1

आप एक हेक्स कोड के रूप में अपने पृष्ठभूमि रंग निर्दिष्ट करने के बजाय इसके लिए एक ImagickPixel instantiating की कोशिश की है?

$im->setImageBackgroundColor(#D5D5D5); 
+0

धन्यवाद कार्ल लेकिन परिणाम रहता है वही। – jantimon

+0

setImageBackgroundColor: "अब पैरामीटर के रूप में रंग का प्रतिनिधित्व करने वाली स्ट्रिंग को अनुमति देता है। पिछले संस्करण केवल एक इमेजिक पिक्सेल ऑब्जेक्ट को अनुमति देते हैं।" – jantimon

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