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扩展。

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

 

posted @ 2018-06-28 10:05  浪淘沙(Jeff.Liu)  阅读(340)  评论(0编辑  收藏  举报