PHP:需要将imagemagick命令转换为php脚本

时间:2017-03-30 22:13:32

标签: php imagemagick imagick

我使用此命令批量修改站点的图像。他们需要这个尺寸才能适合这个主题。

现在我也想在Facebook广告中使用这些图片,但必须调整它们的大小。我使用的命令(工作正常)是:

for i in `ls -1 *.jpg`; do convert $i -fuzz 10% -trim +repage -resize 980x1200 -background white -gravity center -extent 980x1200 $i; done

现在我需要创建一个执行相同操作的PHP脚本,但也会将图像作为响应返回。

我想出了以下内容:

<?php

/* Create the object and read the image in */
$im = new Imagick("image.jpg");

/* Trim the image with 10% fuzz */
$im->trimImage(10);

/* Repage */
$im->setImagePage(0, 0, 0, 0);

/* Resize */
$im->resizeImage(1200,628,Imagick::FILTER_LANCZOS,0);

/* Add Borders*/
$im->setImageBackgroundColor('White');
$im->setGravity('Centre');
$im->setImageExtent(1200,628);

/* Output the image */
header("Content-Type: image/" . $im->getImageFormat());
echo $im;
?>

不幸的是它似乎不起作用。它只是返回一个黑色矩形(看起来像脚本中使用的正确尺寸)。

2 个答案:

答案 0 :(得分:1)

运行此代码时出现的第一个错误:

  

PHP警告:Imagick :: setgravity()期望参数1为整数,第18行的resize.php中给出了字符串

请尝试使用imagick::GRAVITY_CENTER

下一期,Imagick::resizeImage()Imagick::setImageExtent()需要宽度,高度顺序的参数。

最后,尝试为Imagick::resizeImage()上的模糊设置非零值(如1)以解决黑色图像问题。

我不确定你是如何试图获得边框的,但你可能想看看Imagick::borderImage()

我不知道这是否会解决你所有的问题,但它应该让你更接近!

<?php

/* Create the object and read the image in */
$im = new Imagick("image.jpg");

/* Trim the image with 10% fuzz */
$im->trimImage(10);

/* Repage */
$im->setImagePage(0, 0, 0, 0);

/* Resize */
$im->resizeImage(628, 1200, Imagick::FILTER_LANCZOS, 1);

/* Add Borders*/
$im->setImageBackgroundColor('White');
$im->setGravity(Imagick::GRAVITY_CENTER);
$im->setImageExtent(628, 1200);

/* Output the image */
header("Content-Type: image/" . $im->getImageFormat());
echo $im;
?>

答案 1 :(得分:0)

你可以使用“shell_exec(你的命令)”在php中运行命令。尝试一次这可能对你有用。 请参阅http://php.net/manual/en/function.shell-exec.php