【问题标题】:Fatal error: Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat致命错误:未捕获的异常“ImagickException”和消息“NoDecodeDelegateForThisImageFormat”
【发布时间】:2014-09-11 06:39:58
【问题描述】:

我无法使 imagick 与本地 xampp 一起工作。

错误

Fatal error: Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat

代码

$im = new imagick();
$im->setResolution(300, 300);
$im->readimage($base_dir . 'files/PDF/test.pdf');
$im->setIteratorIndex($i);
$im->setImageFormat('jpeg');
$newimgname = time();
$im->resizeImage(500, 500, Imagick::FILTER_LANCZOS, 1);
$im->cropImage(100, 100, 0, 0);
$thumbnail = $im->getImageBlob();

【问题讨论】:

  • 与this post有重复
  • 欢迎来到 StackOverflow。请简要说明您正在尝试做什么、您尝试解决此问题的内容以及您期望的输出结果。
  • 哇,今天的人群很激烈。 @JeremyMiller这不是重复的,这与PDF有关。 @James Massey 这个问题很简短,但实际上是完整的。
  • @Danack 很相关,但是你的回答很有针对性,也很有帮助。 +1

标签: php imagick


【解决方案1】:

Imagick 调用 ImageMagick 库来完成它对图像的所有处理。 Image Magick 库本身并不实际处理 PDF,它调用 GhostScript 来处理它们并生成 Image Magick 然后读取的 PNG 或 Jpeg。

NoDecodeDelegateForThisImageFormat 表示 Image Magick 无法调用它认为应该将解码委托给 GhostScript 的委托程序。

解决方案是通过 yum 或 apt 安装 GhostScript,它“应该”工作。

如果它仍然不起作用,您应该检查 PDF 条目的 Image Magick (http://www.imagemagick.org/source/delegates.xml) 代表文件中的内容,并确保它可以从命令提示符调用 - 即检查 Image Magick 是否会也能找到。

【讨论】:

  • 我已经在我的 windows(8.1) 机器上安装了 GhostScript 最新版本。还没有运气!
  • 如果 GS 安装在 Windows 上的 C:\ghostscript 上,如何对 Image Magick 说,在哪里可以找到 GhostScript?
【解决方案2】:

来自我的服务器管理员: 您可能想尝试使用 GraphicsMagick 作为 Image Magick 的替代品。

Graphics Magick Homepage

【讨论】:

    【解决方案3】:

    即使在安装 GhostScript 之后,在从 AWS 切换到 Azure 后,我们也无法让 imagick 代码工作,出现 Delegate 错误。我们最终将 PHP 代码转换为 Image Magick 命令行,使用函数 execInBackground 运行命令 (PHP.net Exec() Page)

    注意:命令行单独使用 exec 不起作用。 php脚本不会正常终止。

    //from PHP.net 
    function execInBackground($cmd) { 
        if (substr(php_uname(), 0, 7) == "Windows"){ 
            pclose(popen("start /B ". $cmd, "r"));  
        } 
        else { 
            exec($cmd . " > /dev/null &");   
        } 
    }
    
    //create a thumbnail from the first page of PDF
    //old php code
    /*
    $image_magick = new imagick(); 
    $image_magick->setbackgroundcolor('white');
    $image_magick->readImage($file_path . "[0]");
    $image_magick = $image_magick->flattenImages();
    $image_magick->setResolution(300,300);
    $image_magick->thumbnailImage(102, 102, true);
    $image_magick->setImageFormat('jpg');
    $image_magick->writeImage($thumbnail_path);
    */
    
    //command line syntax
    $cmd = "magick convert " . chr(34) . $file_path . "[0]" . chr(34) . " -background white -flatten -resample " . chr(34) . "300x300" . chr(34) . " -thumbnail " . chr(34) . "102x102" . chr(34) . " -format jpg -write " . chr(34) . $thumbnail_path . chr(34);
    execInBackground($cmd);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多