PHP GD或Imagick类图像Magick转换

时间:2014-01-10 23:08:57

标签: imagemagick gd image-manipulation imagick imagemagick-convert

我需要将一些命令行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

1 个答案:

答案 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;
}