php如何實(shí)現(xiàn)圖片合并功能
在實(shí)際的開(kāi)發(fā)中需要用到合并圖片的功能,比如實(shí)現(xiàn)微信中的頭像圖片合并功能。
這里主要是使用的gd庫(kù)去操作的,當(dāng)然還可以用ImageMagick去實(shí)現(xiàn)這個(gè)功能。
效果如下:
php代碼:
- $pics = array(
- '1.jpg'
- '2.jpg'
- '3.jpg'
- '4.jpg'
- '5.jpg'
- '6.jpg'
- '7.jpg'
- '8.jpg'
- '9.jpg'
- );
- $pic_list = array_slice($pics 0 9); // 只操作前9個(gè)圖片
- $bg_w = 200; // 背景圖片寬度
- $bg_h = 200; // 背景圖片高度
- $background = imagecreatetruecolor($bg_w$bg_h); // 背景圖片
- $color = imagecolorallocate($background 255 255 255); // 為真彩色畫(huà)布創(chuàng)建白色背景,再設(shè)置為透明
- imagefill($background 0 0 $color);
- imageColorTransparent($background $color);
- $pic_count = count($pic_list);
- $lineArr = array(); // 需要換行的位置
- $space_x = 3;
- $space_y = 3;
- $line_x = 0;
- switch($pic_count) {
- case 1: // 正中間
- $start_x = intval($bg_w/4); // 開(kāi)始位置X
- $start_y = intval($bg_h/4); // 開(kāi)始位置Y
- $pic_w = intval($bg_w/2); // 寬度
- $pic_h = intval($bg_h/2); // 高度
- break;
- case 2: // 中間位置并排
- $start_x = 2;
- $start_y = intval($bg_h/4) + 3;
- $pic_w = intval($bg_w/2) - 5;
- $pic_h = intval($bg_h/2) - 5;
- $space_x = 5;
- break;
- case 3:
- $start_x = 40; // 開(kāi)始位置X
- $start_y = 5; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/2) - 5; // 寬度
- $pic_h = intval($bg_h/2) - 5; // 高度
- $lineArr = array(2);
- $line_x = 4;
- break;
- case 4:
- $start_x = 4; // 開(kāi)始位置X
- $start_y = 5; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/2) - 5; // 寬度
- $pic_h = intval($bg_h/2) - 5; // 高度
- $lineArr = array(3);
- $line_x = 4;
- break;
- case 5:
- $start_x = 30; // 開(kāi)始位置X
- $start_y = 30; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/3) - 5; // 寬度
- $pic_h = intval($bg_h/3) - 5; // 高度
- $lineArr = array(3);
- $line_x = 5;
- break;
- case 6:
- $start_x = 5; // 開(kāi)始位置X
- $start_y = 30; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/3) - 5; // 寬度
- $pic_h = intval($bg_h/3) - 5; // 高度
- $lineArr = array(4);
- $line_x = 5;
- break;
- case 7:
- $start_x = 53; // 開(kāi)始位置X
- $start_y = 5; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/3) - 5; // 寬度
- $pic_h = intval($bg_h/3) - 5; // 高度
- $lineArr = array(25);
- $line_x = 5;
- break;
- case 8:
- $start_x = 30; // 開(kāi)始位置X
- $start_y = 5; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/3) - 5; // 寬度
- $pic_h = intval($bg_h/3) - 5; // 高度
- $lineArr = array(36);
- $line_x = 5;
- break;
- case 9:
- $start_x = 5; // 開(kāi)始位置X
- $start_y = 5; // 開(kāi)始位置Y
- $pic_w = intval($bg_w/3) - 5; // 寬度
- $pic_h = intval($bg_h/3) - 5; // 高度
- $lineArr = array(47);
- $line_x = 5;
- break;
- }
- foreach( $pic_list as $k=>$pic_path ) {
- $kk = $k + 1;
- if ( in_array($kk $lineArr) ) {
- $start_x = $line_x;
- $start_y = $start_y + $pic_h + $space_y;
- }
- $pathInfo = pathinfo($pic_path);
- switch( strtolower($pathInfo['extension']) ) {
- case 'jpg':
- case 'jpeg':
- $imagecreatefromjpeg = 'imagecreatefromjpeg';
- break;
- case 'png':
- $imagecreatefromjpeg = 'imagecreatefrompng';
- break;
- case 'gif':
- default:
- $imagecreatefromjpeg = 'imagecreatefromstring';
- $pic_path = file_get_contents($pic_path);
- break;
- }
- $resource = $imagecreatefromjpeg($pic_path);
- // $start_x$start_y copy圖片在背景中的位置
- // 00 被copy圖片的位置
- // $pic_w$pic_h copy后的高度和寬度
- // 最后兩個(gè)參數(shù)為原始圖片寬度和高度,倒數(shù)兩個(gè)參數(shù)為copy時(shí)的圖片寬度和高度
- imagecopyresized($background$resource$start_x$start_y00$pic_w$pic_himagesx($resource)imagesy($resource));
- $start_x = $start_x + $pic_w + $space_x;
- }
- header("Content-type: image/jpg");
- imagejpeg($background);
發(fā)表評(píng)論