• PHP pdf转化为图片(PNG)


     1 /**
     2  * 将pdf文件转化为多张png图片
     3  * @param string $pdf  pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
     4  * @param string $path 新生成图片所在路径 (/www/pngs/)
     5  *
     6  * @return array|bool
     7  */
     8 function pdf2png($pdf, $path)
     9 {
    10     if (!extension_loaded('imagick')) {
    11         return false;
    12     }
    13     if (!file_exists($pdf)) {
    14         return false;
    15     }
    16     $im = new Imagick();
    17     $im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
    18     $im->setCompressionQuality(100);
    19     $im->readImage($pdf);
    20     foreach ($im as $k => $v) {
    21         $v->setImageFormat('png');
    22         $fileName = $path . md5($k . time()) . '.png';
    23         if ($v->writeImage($fileName) == true) {
    24             $return[] = $fileName;
    25         }
    26     }
    27     return $return;
    28 }
    29 
    30 /**
    31  * 将pdf转化为单一png图片
    32  * @param string $pdf  pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
    33  * @param string $path 新生成图片所在路径 (/www/pngs/)
    34  *
    35  * @throws Exception
    36  */
    37 function pdf2png2($pdf, $path)
    38 {
    39     try {
    40         $im = new Imagick();
    41         $im->setCompressionQuality(100);
    42         $im->setResolution(120, 120);//设置分辨率 值越大分辨率越高
    43         $im->readImage($pdf);
    44 
    45         $canvas = new Imagick();
    46         $imgNum = $im->getNumberImages();
    47         //$canvas->setResolution(120, 120);
    48         foreach ($im as $k => $sub) {
    49             $sub->setImageFormat('png');
    50             //$sub->setResolution(120, 120);
    51             $sub->stripImage();
    52             $sub->trimImage(0);
    53             $width  = $sub->getImageWidth() + 10;
    54             $height = $sub->getImageHeight() + 10;
    55             if ($k + 1 == $imgNum) {
    56                 $height += 10;
    57             } //最后添加10的height
    58             $canvas->newImage($width, $height, new ImagickPixel('white'));
    59             $canvas->compositeImage($sub, Imagick::COMPOSITE_DEFAULT, 5, 5);
    60         }
    61 
    62         $canvas->resetIterator();
    63         $canvas->appendImages(true)->writeImage($path . microtime(true) . '.png');
    64     } catch (Exception $e) {
    65         throw $e;
    66     }
    67 }

    PS: 无论是转化为多张还是单张图片,都需要安装PHP的Imagick扩展。

    其实,这两个方法还可以再优化,比如可以自定义设置图片的分辨率,存放图片的地址不存在的时候,可以自动创建目录之类的。这些问题和转化图片,就不多写了。

  • 相关阅读:
    Day8 类的继承
    Day7 访问权限
    javascript性能优化
    JavaScript 基础:Babel 转译 class 过程窥探
    HTML5之新增的元素和废除的元素 (声明:内容节选自《HTML 5从入门到精通》)
    谈起音视频,前端能做些什么
    Safari不能保存session的处理方法
    一篇关于BEM命名规范
    H5新人福音~零配置搭建现代化的前端工程
    2018年,最经典的26个JavaScript面试题和答案!
  • 原文地址:https://www.cnblogs.com/ainiaa/p/9237284.html
Copyright © 2020-2023  润新知