PHP imagemagick 扩展问题

2019-05-10 08:54:36 +08:00
 Sakura10032

最近要使用 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;     }
3911 次点击
所在节点    PHP
15 条回复
Sakura10032
2019-05-10 08:55:14 +08:00
<?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
2019-05-10 08:56:09 +08:00
@Sakura10032 函数 1l 的
rmb1222
2019-05-10 09:19:05 +08:00
/etc/ImageMagick-6/policy.xml 最底下 disable 的删掉。这里转换依赖的是 ghostscript 但它有严重安全问题,所以大部分发行版都默认禁用了。
Sakura10032
2019-05-10 09:47:04 +08:00
@rmb1222 我用的是 win ……所以不知道怎么找……能救救孩子吗?
1000172
2019-05-10 10:16:13 +08:00
这个我好久之前做过的,我记得这个对于 php 版本和系统要求比较苛刻,稍后找找从前代码,如果找到再回复你
Sakura10032
2019-05-10 10:26:38 +08:00
@1000172 好的,感谢
codespots
2019-05-10 10:28:11 +08:00
@Sakura10032 楼主,我很久以前也遇到过这个问题,没解决。看你能不能找到合适的解决方案,mark
alpha2016
2019-05-10 10:41:58 +08:00
记得这个扩展版本,imagick 版本和 php 版本完全对应才行,包括 64 位系统一类的扩展,很久之前踩过坑,版本一致对应了,直接就好了
Sakura10032
2019-05-10 10:44:14 +08:00
@alpha2016 我版本都是对应的,我第一个试的是 php7.3 nts 64 c15 不行,然后换成 php5.6 ts 86 c11,还是不行,都是报 500 都是这行代码执行不了,就是读不了 pdf 文件
Sakura10032
2019-05-10 10:48:21 +08:00
@alpha2016 这个扩展其他的文件可以读,就 pdf 读不了
ben1024
2019-05-10 13:04:15 +08:00
盲猜,版本降到 7.2 或 7.1
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
2019-05-10 14:07:09 +08:00
我最近也在用 PDF 转图片,win 的话可以试试 xpdf。
alpha2016
2019-05-10 18:24:08 +08:00
@Sakura10032 得和你的 php 版本,线程安全的配置,电脑位数保持一致,然后 imagick 软件的版本和扩展的版本也一致,或者是转成 pdf 没有开启 php 的相关扩展?
Sakura10032
2019-05-10 23:59:17 +08:00
问题已解决。
@alpha2016
@1000172 我现在用的就是.exe
@westooy
我的 php 版本是 7.3 的,接着对应的扩展版本是对应的,接着问题就是出在 imagick 这个软件,网上的很多软件是有问题的,我下载的是一个不需要安装的,然后我换成了最新版本的 dll 的.exe 文件,然后把软件里面的 dll 文件拷到 php 根目录里面。就可以调用了。
总的来说,问题出在了 imagick 这个软件,要是不行的就换,好像最新的 php7.2,7.3 都可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/562725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX