我需要将一些命令行imagick代码转换为php类。我不能在我们的生产盒上运行命令行脚本,所以我需要能够使用这些类,遗憾的是没有关于两者之间转换的文档。
有没有人知道如何使用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
答案 0 :(得分:2)
好的,这需要花费很多时间来解决,因为php.net上的文档并不是很好,并且没有任何地方可以解释ImageMagick命令行和Imagick php类中的函数之间的等效函数。 / p>
这是我执行上述操作的功能:
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;
}