V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sakura10032
V2EX  ›  PHP

PHP imagemagick 扩展问题

  •  
  •   Sakura10032 · 2019-05-10 08:54:36 +08:00 via Android · 4131 次点击
    这是一个创建于 2026 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近要使用 pdf 转图片,然后就去搜索引擎,按照步骤一步一步来,啥都装好了,imagemagick 也能用了,然后就复制网上的函数。列如:

    $PDF 是 pdf 的地址,$PATH 是输出地址

    setResolution(120,120);        $IM->setCompressionQuality(100);        $IM->readImage($PDF);        foreach($IM as $Key => $Var){            $Var->setImageFormat('png');            $Filename = $Path.'/'.md5($Key.time()).'.png';            if($Var->writeImage($Filename)==true){                $Return[]= $Filename;            } 然后我发现执行到这一步的时候报错,报的 500, $IM->readImage($PDF);我还发现,我把$PDF 的地址换成不是 pdf 的文件就可以,比如 png,jpeg,jpg,就换成 pdf 就不可以。 有大佬可以帮忙看一下嘛?        }        return $Return;     }
    15 条回复    2019-05-10 23:59:17 +08:00
    Sakura10032
        1
    Sakura10032  
    OP
       2019-05-10 08:55:14 +08:00 via Android
    <?php

    function pdf2png($PDF,$Path){

           if(!extension_loaded('imagick')){

               returnfalse;

           }

           if(!file_exists($PDF)){

               returnfalse;

           }

           $IM =new imagick();

           $IM->setResolution(120,120);

           $IM->setCompressionQuality(100);

           $IM->readImage($PDF);

           foreach($IM as $Key => $Var){

               $Var->setImageFormat('png');

               $Filename = $Path.'/'.md5($Key.time()).'.png';

               if($Var->writeImage($Filename)==true){

                   $Return[]= $Filename;

               }

           }

           return $Return;

        }
    Sakura10032
        2
    Sakura10032  
    OP
       2019-05-10 08:56:09 +08:00 via Android
    @Sakura10032 函数 1l 的
    rmb1222
        3
    rmb1222  
       2019-05-10 09:19:05 +08:00 via iPhone
    /etc/ImageMagick-6/policy.xml 最底下 disable 的删掉。这里转换依赖的是 ghostscript 但它有严重安全问题,所以大部分发行版都默认禁用了。
    Sakura10032
        4
    Sakura10032  
    OP
       2019-05-10 09:47:04 +08:00 via Android
    @rmb1222 我用的是 win ……所以不知道怎么找……能救救孩子吗?
    1000172
        5
    1000172  
       2019-05-10 10:16:13 +08:00
    这个我好久之前做过的,我记得这个对于 php 版本和系统要求比较苛刻,稍后找找从前代码,如果找到再回复你
    Sakura10032
        6
    Sakura10032  
    OP
       2019-05-10 10:26:38 +08:00 via Android
    @1000172 好的,感谢
    codespots
        7
    codespots  
       2019-05-10 10:28:11 +08:00
    @Sakura10032 楼主,我很久以前也遇到过这个问题,没解决。看你能不能找到合适的解决方案,mark
    alpha2016
        8
    alpha2016  
       2019-05-10 10:41:58 +08:00
    记得这个扩展版本,imagick 版本和 php 版本完全对应才行,包括 64 位系统一类的扩展,很久之前踩过坑,版本一致对应了,直接就好了
    Sakura10032
        9
    Sakura10032  
    OP
       2019-05-10 10:44:14 +08:00 via Android
    @alpha2016 我版本都是对应的,我第一个试的是 php7.3 nts 64 c15 不行,然后换成 php5.6 ts 86 c11,还是不行,都是报 500 都是这行代码执行不了,就是读不了 pdf 文件
    Sakura10032
        10
    Sakura10032  
    OP
       2019-05-10 10:48:21 +08:00 via Android
    @alpha2016 这个扩展其他的文件可以读,就 pdf 读不了
    ben1024
        11
    ben1024  
       2019-05-10 13:04:15 +08:00
    盲猜,版本降到 7.2 或 7.1
    1000172
        12
    1000172  
       2019-05-10 14:06:23 +08:00
    找到从前上线使用的代码,附上一段核心的:
    $IM =new imagick();
    $IM->setResolution(120,120);
    $IM->setCompressionQuality(100);
    $IM->readImage($PDF);
    foreach($IM as $Key => $Var){
    $Var->setImageFormat('png');
    $Filename = $savePath.md5($Key.time()).'.png';
    if($Var->writeImage($Filename)==true){
    $Return[]= $Filename;
    }
    }

    安装包里 gs904w32.exe ,ImageMagick-windows-dll.exe ,php_imagick-ts-vc9-x86.zip 的插件都需要用
    zhouren93
        13
    zhouren93  
       2019-05-10 14:07:09 +08:00
    我最近也在用 PDF 转图片,win 的话可以试试 xpdf。
    alpha2016
        14
    alpha2016  
       2019-05-10 18:24:08 +08:00
    @Sakura10032 得和你的 php 版本,线程安全的配置,电脑位数保持一致,然后 imagick 软件的版本和扩展的版本也一致,或者是转成 pdf 没有开启 php 的相关扩展?
    Sakura10032
        15
    Sakura10032  
    OP
       2019-05-10 23:59:17 +08:00 via Android
    问题已解决。
    @alpha2016
    @1000172 我现在用的就是.exe
    @westooy
    我的 php 版本是 7.3 的,接着对应的扩展版本是对应的,接着问题就是出在 imagick 这个软件,网上的很多软件是有问题的,我下载的是一个不需要安装的,然后我换成了最新版本的 dll 的.exe 文件,然后把软件里面的 dll 文件拷到 php 根目录里面。就可以调用了。
    总的来说,问题出在了 imagick 这个软件,要是不行的就换,好像最新的 php7.2,7.3 都可以。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:04 · PVG 17:04 · LAX 01:04 · JFK 04:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.