【问题标题】:Convert and blur an uploaded image in PHP with Imagick使用 Imagick 在 PHP 中转换和模糊上传的图像
【发布时间】:2014-04-15 20:12:28
【问题描述】:

我对 PHP 很陌生,这是我第一次尝试使用 Imagick,所以为了实现我的目标,我编写的脚本肯定有很多错误。 :-)

我想做的事:

  1. 将上传的图片转换为 JPEG 格式并调整其大小;
  2. 制作一个模糊版本;
  3. 将两张图片移动到某个目录。

我写了一个应该做的函数,但是,正如你猜到的,它根本没有做任何事情:

function convertAndBlur($inputIMG, $dst, $width, $quality) {
   $img = new Imagick($inputIMG);
   $img->scaleImage($width, 0, true); // keep aspect ratio
   $img->setImageFormat('jpeg');
   $img->setImageCompressionQuality($quality);
   $img->writeImage($dst . ".jpg");

   $imgBlur = new Imagick($img);
   $imgBlur->blurImage(5,3);

   $imgBlur->writeImage($dst . "_blur.jpg");

   $img->clear(); $img->destroy();
   $imgBlur->clear(); $imgBlur->destroy(); 
}

函数是这样调用的:

$picture = $_FILES["picture"]["tmp_name"];
$pictureName = "foo";

if(!is_image($picture)) { die("not an image"); }

$picturePath = "uploads/" . $pictureName;

convertAndBlur($picture, $picturePath, 1000, 90);

这肯定会让你们中的一些人翻白眼,但同样,这对我来说是完全未知的领域。谁能帮帮我?谢谢!

【问题讨论】:

  • 是否显示任何错误消息?首先引起我注意的是if(!is_image($picture)) { die("not an image"; } 行中缺少)
  • 我的错,这是一个错字。实际代码中并没有丢失它。 :-) 没有错误信息,脚本什么也不做。
  • 我可以发现几件事情(例如is_image() 不是一个函数,我不确定Imagick 的构造函数可以接受它自己的一个实例),但是你的生活如果启用错误报告会容易得多。看看this answer
  • is_image() 是我之前做的一个自定义函数。我启用了错误报告,看来您是对的:Can not process empty Imagick object 在线 $imgBlur->blurImage(5,3);。然后如何处理相同的图像以获得两个不同的版本? :-/ 谢谢!
  • 鉴于Imagick 会抱怨,如果你不给它一个图像,我不会费心事前检查。再次直接从$inputIMG阅读怎么样?

标签: php oop upload imagemagick imagick


【解决方案1】:

Imagick 的构造函数不能将Imagick 的实例作为参数。要创建另一个对象,请尝试使用$imgBlur = clone $img; 代替$imgBlur = new Imagick($img);,这将创建$img 的副本。阅读有关克隆 Imagick 对象 here 的更多信息。

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2018-04-07
    • 2011-05-11
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多