本文实例讲述了PHP基于imagick扩展实现合成图片的两种方法。分享给大家供大家参考,具体如下:
方法一:compositeimages
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/** * function: 合成图片 * @param string $output_url 图片保存路径 * @param string $img_type 图片保存类型 * @param integral $line_num 每行显示图片数量 * @param array $logo_info 每张待合成图片的信息(要求所有尺寸统一) * @param array $img_list 待合成的图片绝对路径 * * @return void */ public function generate( $output_url , $img_type , $line_num , $logo_info , $img_list = array ()) { //计算图片有多少行 $lines = ceil ( count ( $img_list )/ $line_num ); $bg_width = ( $logo_info [ 'width' ] + $logo_info [ 'line_width' ]) * $line_num ; $bg_height = ( $logo_info [ 'height' ] + $logo_info [ 'line_height' ]) * $lines ; //构建画布 $canvas = new Imagick(); $canvas ->newimage( $bg_width , $bg_height , 'white' ); $canvas ->setimageformat( $img_type ); $i = $j = 0; foreach ( $img_list as $item ) { $im = new Imagick( $item ); $x = $logo_info [ 'line_width' ]*2 + $i * $logo_info [ 'width' ]; $y = $logo_info [ 'line_height' ]*2 + $j * $logo_info [ 'height' ]; // $canvas->compositeimage($im -> getimage(), Imagick::COMPOSITE_OVER, $x, $y); $canvas -> compositeimage( $im , $im ->getImageCompose(), $x , $y ); if (( $i + 1) % $line_num === 0) { $i = 0; $j ++; } else { $i ++; } // unset($im); $im -> destroy(); } $canvas ->writeimage( $output_url ); //销毁对象 $canvas -> destroy(); } |
方法二:combineimages
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/** * function: 合成图片 * @param string $output_url 图片保存路径 * @param string $img_type 图片保存类型 * @param integral $line_num 每行显示图片数量 * @param array $logo_info 每张待合成图片的信息(要求所有尺寸统一) * @param array $img_list 待合成的图片绝对路径 * * @return void */ public function generate( $output_url , $img_type , $line_num , $logo_info , $img_list = array ()) { //计算图片有多少行 $lines = ceil ( count ( $img_list )/ $line_num ); $bg_width = ( $logo_info [ 'width' ] + $logo_info [ 'line_width' ]) * $line_num ; $bg_height = ( $logo_info [ 'height' ] + $logo_info [ 'line_height' ]) * $lines ; //构建画布 $canvas = null; $canvas = new Imagick(); $canvas -> newimage( $bg_width , $bg_height , 'white' ); $i = $j = 0; foreach ( $img_list as $item ) { $im = null; $im = new Imagick( $item ); // $canvas -> readImage($item); $canvas -> addimage( $im ); $im -> clear(); $im -> destroy(); } // $canvas -> flattenImages(); $canvas -> combineImages( Imagick::CHANNEL_ALL ); $canvas -> writeimage( $output_url ); //销毁对象 $canvas -> clear(); $canvas -> destroy(); } |
个人认为方法二效率更高
附:windows下面php5.2.17和php5.3.18和php5.4.8各个版本的imagick组件下载
1、PHP5.2.17我安装成功了,用的星外PHP5.2.17直接安装程序,下载imagick版本如下:
点击此处本站下载。
已经包含imagemagick不需要安装任何东西,直接把php_imagick_st-Q16.dll复制到c:\php\ext目录
然后给php.ini扩展里面增加:extension=php_imagick_st-Q16.dll 最简单和绿色的方法
ps:还有诸如php_imagick_st-Q8.dll(8色),php_imagick_dyn-Q16.dll(需要安装imagemagick)就完全没必要管他们了
2、PHP5.3.18 必须安装 imagemagick 已经没有可用的单文件dll了
1)官方下载地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根据你的php安装模式下载 php_imagick
线程安全:
点击此处本站下载。
复制到c:\php\ext目录,增加扩展例如:extension=php_imagick_nts.dll
3、PHP5.4.8 必须安装 imagemagick 已经没有可用的单文件dll了
1)官方下载地址:
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.0-4-Q16-windows-dll.exe
2)根据你的PHP安装模式下载 php_imagick
无线程安全:
点击此处本站下载。
复制到c:\php\ext目录,增加扩展例如:extension=php_imagick.dll
以上安装本人都测试过,安装了重启iis或Apache服务器,然后查看phpinfo看看有没有 imagick 如果没有的话,请检查权限或者重新做一次。
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/littlebo01/article/details/41753089