LMLPHP后院

代码分享之使用ImageMagick将PDF转图片技术

maybe yes 发表于 2016-10-25 23:08

使用 PHP 扩展 Imagick 将 PDF 转成图片,实际上 Imagick 完全是一个客户端,调用的还是 ImageMagick 提供的功能。关于 Imagick 扩展,官方文档的示例很少,文档的描述也非常少,导致一般人看文档后仍然不知道怎么写代码。而官网的评论特别混乱,需要不断试错才知道正确的写法。

将 PDF 转换为图片代码分享

下面分享使用 PHP 扩展 Imagick 将 PDF 转为图片的代码示例,仅供参考:

function ConvertPdfToJpg($pdf){
    $im = new Imagick($pdf);
    $im->setResolution(100, 100);
    $count = $im->getNumberImages();

    $result = array();
    for ($i=0; $i<$count; $i++) {
        $im2 = new Imagick();
        $im2->setResolution(100, 100);
        $im2->readimage($pdf . '[' . $i . ']');
        $im2->setImageFormat('jpeg');

        $dir_name = 'businessplan/thumb/' . date('Ymd/H') . '/';
        $dir_path = UPLOAD_PATH . $dir_name;
        if (!is_dir($dir_path)) {
            mkdir($dir_path, 0755, true);
        }

        $filename = uniqid() . '.jpg';
        $im2->writeImage($dir_path . $filename);
        $im2->clear();
        $im2->destroy();
        $result[] = $dir_name . $filename;
    }
    $im->clear();
    $im->destroy();
    return $result;
}

上面的代码在功能上是没有问题的,从程序的写法上来看,感觉效率是不高的。每次遍历一张 PDF,都重新 new 了一个对象,然后通过这个对象去读取这一张 PDF 的内容(这样会不会重新加载整个 PDF 文档?);第一次为了计算 PDF 页数,也 new 了一个对象。不过实际运行下来,还是非常慢,一个十多页的 PDF,如果内容特别复杂,需要将近一分钟的时间,如果内容相对简单,十几秒可以转换完成。测试发现,降低 resolution 的值可以加快速度,设置为 30 的话图片的质量仍然能被接受。

解决 imagemagick no decode delegate for this image format

如果 ImageMagick 没有正确安装好,程序在运行的时候会报“NoDecodeDelegateForThisImageFormat”这样的错误。下面给出 CentOS 下的安装方法,如下示例:

$ yum -y groupinstall 'Development Tools'
$ yum -y install bzip2-devel freetype-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel zlib-devel ghostscript-devel djvulibre-devel libwmf-devel jasper-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel libxml2-devel librsvg2-devel OpenEXR-devel php-devel
$ wget http://www.imagemagick.org/download/ImageMagick.tar.gz
$ tar -xvzf ImageMagick.tar.gz
$ cd ImageMagick*
$ ./configure
$ make
$ make install
$ convert --version

安装完成后,使用 convert --version 来检测 ImageMagick 是否安装成功。

更多参考

参考链接https://www.vultr.com/docs/install-imagemagick-on-centos-6

2020-08-06 23:50:16 1596729016 0.027658