方法一:compositeimages
/** * 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
/** * 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(); }