PDF文件转换为图片(JPG/PNG)–使用ImageMagick实现pdf转图片

PDF文件转换为图片

安装扩展

imagick

  • 下载: PECL :: Package :: imagick (php.net)
  • 安装: 解压后把 php_imagick.dll 复制到配置的扩展目录中(默认是php根目录下的ext文件夹)
  • 配置: 在 php.ini 文件,增加 extension=php_imagick.dll

ImageMagick

  • 下载: ImageMagick – Download
  • 安装: 执行安装后将安装目录下的 CORE_RL_.dll 这些文件拷贝到php根目录下

Ghostscript

完成上述扩展后重启

代码示例

# PDF转图片
public function pdf2img($pdf_path_folder, $pdf_name, $new_type = 'png')
{
    $pdf_path = $pdf_path_folder . $pdf_name;
    $file_name_no_suff = str_replace(strrchr($pdf_name, "."),"",$pdf_name); // 文件名(无后缀)
    $new_type = $new_type == 'jpg' || $new_type == 'png' ? $new_type : 'jpg';
    $img_path = $pdf_path_folder . $file_name_no_suff . '.' .$new_type;
    try {
        // 识别 PDF 为 前景图片 $img_front;
        $img_front = $pdf_path_folder . $file_name_no_suff . '_fimg.' .$new_type;
        $im = new \Imagick();
        $im -> setResolution(300, 300); // 设置图像的分辨率
        $im -> readImage($pdf_path);
        $im -> setImageFormat($new_type);
        $im -> setImageCompression(\Imagick::COMPRESSION_JPEG); 
        $im -> setImageCompressionQuality(100);
        $im -> writeImage($img_front);
        $im -> clear();
        $im -> destroy();
        // 读取 前景图片 $img_front;
        $readImage = new \Imagick();
        $readImage -> readImage($img_front);
        // 生成背景图片(白底)
        $blankPage = new \Imagick();
        $blankPage -> newPseudoImage($readImage->getImageWidth(), $readImage->getImageHeight(), "canvas:white");
        // 设置合并的位置
        $blankPage -> compositeImage($readImage, \Imagick::COMPOSITE_ATOP, 0, 0);
        // 合并
        $blankPage = $blankPage->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
        $blankPage -> writeImage($img_path);
        $blankPage -> destroy();
    } catch (Exception $e) {
        var_dump(iconv("gbk",'utf-8',$e ->getMessage()));
    }
    return $img_path;
}
THE END