0

我需要將一些命令行imagick代碼轉換爲php類。我不能在我們的生產箱上運行命令行腳本,所以我需要能夠使用這些類,遺憾的是沒有關於在兩者之間轉換的文檔。PHP GD或Imagick class Image Magick Conversion

有誰知道我該如何使用imagick類來做到這一點?

$color_mask ="convert -size $dimensions xc:#$color -fill white"; 

/* create the silver mask */ 
$silver_mask ="convert -size $dimensions xc:#e6e7e8 -fill white"; 

/* resize the image to the $larger_dim before cropping it to the dimensions to get that "zoomed in" effect */ 
$thumb = "convert images/$im -thumbnail $larger_dim^ ". 
" -gravity center -extent $dimensions PNG:-"; 

/* screen the resized thumbnail and the color mask */ 
$masked = "convert $thumb $color_mask -compose Screen -gravity center -composite PNG:-"; 

/* multiply the masked thumb with the silver mask */ 
$final = "convert $masked $silver_mask -compose Multiply -gravity center -composite PNG:-"; 

/* Output the image*/ 
header("Content-Type: image/png"); 
passthru($final, $retval); 

我也很樂意在GD中做同樣的事情,我剛剛在GD中獲得了質量權利方面的問題。

TIA

回答

2

好吧,這把搞清楚作爲php.net的文檔的頗有幾分都不是很大,並且沒有任何地方,解釋了ImageMagick的命令行和功能之間的等效功能Imagick的PHP類。

這裏是我的功能來實現上述:

public static function getColorImg($img, $color, $filename) { 

if (class_exists('Imagick')) { 

    // Create the blue overlay 
    $blue = new Imagick(); 

    // Create a plain colour image in the selected color 
    $blue->newImage($dimensions['width'], $dimensions['height'], new ImagickPixel($color)); 
    $blue->setImageFormat('png'); 

    // Create the plain grey image 
    $grey = new Imagick(); 
    $grey->newImage($dimensions['width'], $dimensions['height'], new ImagickPixel($silver)); 
    $grey->setImageFormat('png'); 

    // Now grab the actual image and change it's size to the larger image 
    $image = new Imagick($img); 
    $image->setImageFormat('png'); 
    $image->thumbnailImage($larger_dim['width'], $larger_dim['height'], TRUE); 
    // now zoom it in 
    $image->cropThumbnailImage($dimensions['width'], $dimensions['height']); 
    // Screen takes multiple commands in the php class. Negate the two images 
    $image->negateImage(false); 
    $blue->negateImage(false); 
    // Then multipy them. 
    $image->compositeImage($blue, imagick::COMPOSITE_MULTIPLY, 0, 0); 
    // Re nagate the image so that it looks back to normal. 
    $image->negateImage(false); 
    // Now multiply it with the silver image 
    $image->compositeImage($grey, imagick::COMPOSITE_MULTIPLY, 0, 0); 
    // Write out the file as original file name with the prefix 
    if ($image->writeImage($filename)) { 
    $return = $filename; 
    } 
    else { 
    $return = FALSE; 
    } 
} 
else { 
    $return = FALSE; 
} 

return $return; 
}