2012-11-05 16 views
13

के साथ लिखें, मैं एक छवि लिखने के लिए ImageMagick कमांड "कन्वर्ट" का उपयोग करने वाली एक स्क्रिप्ट को फिर से बनाने का प्रयास करता हूं। लेकिन मैं इमेगिक (संस्करण 6.6.2-10) का उपयोग करके PHP में ऐसा करना चाहता हूं।इमेजिक: मास्क

convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc 

मुझे पता चला है कि मानकों का पालन के लिए खड़े:

convert {background} {overlay} [{mask}] [-compose {method}] -composite {result} 

पीएचपी Imagick मुझे एक लिखें विधि देता है, लेकिन एक मुखौटा पैरामीटर के बिना

आदेश इस प्रकार है: http://www.php.net/manual/en/imagick.compositeimage.php

मुझे another question मिला और यह कोशिश करता है (लेकिन परिणामस्वरूप एक ही छवि नहीं है):

// load images 
$a1 = new Imagick('a1.png'); 
$a3 = new Imagick('a3.png'); 
$a4 = new Imagick('a4.png'); 

// mask the overlay 
$a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); 

// compose overlay to background 
$a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND); 
$a1->setImageBackgroundColor(new ImagickPixel('none')); 
$a1->setOption('compose:args', '312x26.6776'); 
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); 

तो मेरा सवाल यह है: क्या यह मुखौटा का उपयोग करके एक छवि लिखने का सही तरीका है? या यहाँ क्या गलत है?

visualizing मुझे क्या करना चाहते हैं, यहाँ कुछ इनपुट छवियाँ हैं मदद करने के लिए:

इनपुट छवि a1 (पृष्ठभूमि):

a1

इनपुट छवि a3 (ओवरले):

a3

इनपुट छवि ए 4 (मुखौटा):

a4

क्या मैं परिणाम होना चाहते हैं:

correct output

मेरे php कोड क्या बनाता है: पहले से

wrong output

धन्यवाद! माइकल

+1

कारण है कि आप एक ओर जहां इस कोड स्निपेट झंडा COMPOSITE_OVERLAY – artragis

उत्तर

2

का उपयोग कर compositeImage विधि और Imagick :: COMPOSITE_COPYOPACITY

0

इस कोड का प्रयास करें का प्रयास करें: [सहित

// x-displacement 
$a3->setImageArtifact('compose:args', "312x0"); 
$a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); 

// y-displacement 
$a4->setImageArtifact('compose:args', "0x26.6776"); 
$a1->compositeImage($a4, Imagick::COMPOSITE_DISPLACE, 0, 0); 
+4

का उपयोग नहीं करते समाधान हो सकता है एक स्पष्टीकरण] (// meta.stackexchange.com/questions/114762/explaining-entirely- कोड-आधारित-उत्तर) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – yivi

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