去评论
dz插件网

微信群九宫格头像

迪巴拉
2024/01/01 21:54:13
  1.     /**
  2.      * 根据图片数组  拼接成九宫格式拼图
  3.      * @param  array   $pic_list [带拼成的图片数组]
  4.      * @param  integer $bg_w     [背景图片宽度]
  5.      * @param  integer $bg_h     [背景图片高度]
  6.      * @param  string  $format   [阿里云图片获取参数]
  7.      * @return [type]            [返回一个拼接好的图片(路径)]
  8.      */
  9.     public function make_group_avatar($pic_list = array(),$bg_w = 500,$bg_h=500,$format="?x-oss-process=image/resize,w_80,h_80"){
  10.         // $pic_list       = array(
  11.         //      'http://res.qhhznt.com/rm6666/image/201708/1502870752784.jpg',
  12.         //      'http://res.qhhznt.com/rm8888/image/201708/1502866491478.jpg',
  13.         //      'http://res.qhhznt.com/rm102003/image/20180112/15157540161.jpg',
  14.         //     // 'http://res.qhhznt.com/rm102016/image/201708/1502875655353.jpg',
  15.         //     // 'http://res.qhhznt.com/rm102021/image/201708/1503049660444.jpg',
  16.         //     // 'http://res.qhhznt.com/rm102032/image/201710/1506844817016.jpg',
  17.         //     // 'http://res.qhhznt.com/rm102060/image/201709/1505301716128.jpg',
  18.         //     // 'http://res.qhhznt.com/rm102061/image/201709/1506126876343.jpg',
  19.         //     // 'http://res.qhhznt.com/rm102063/image/201710/1508984047181.jpg',
  20.         // );
  21.    
  22.         $pic_list   = array_slice($pic_list, 0, 9); // 只操作前9个图片      
  23.         $background = imagecreatetruecolor($bg_w, $bg_h); // 背景图片  
  24.         //int imagecolorallocate ( resource $image , int $red , int $green , int $blue ) 为一幅图像分配颜色
  25.         $color   = imagecolorallocate($background, 202, 201, 201); // 为真彩色画布创建白色背景,再设置为透明
  26.         imagefill($background, 0, 0, $color);           //区域填充  
  27.         imageColorTransparent($background, $color);     // 将某个颜色定义为透明色
  28.         $pic_count  = count($pic_list);
  29.         $lineArr    = array();  // 需要换行的位置
  30.         $space_x    = 3;
  31.         $space_y    = 3;
  32.         $line_x  = 0;
  33.         switch($pic_count) {
  34.             case 1: // 正中间
  35.                 $start_x = intval($bg_w/4);  // 开始位置X
  36.                 $start_y = intval($bg_h/4);  // 开始位置Y
  37.                 $pic_w   = intval($bg_w/2); // 宽度
  38.                 $pic_h   = intval($bg_h/2); // 高度
  39.                 break;
  40.             case 2: // 中间位置并排
  41.                 $start_x = 2;
  42.                 $start_y = intval($bg_h/4) + 3;
  43.                 $pic_w   = intval($bg_w/2) - 5;
  44.                 $pic_h   = intval($bg_h/2) - 5;
  45.                 $space_x = 5;
  46.                 break;
  47.             case 3:
  48.                 $start_x = 124;   // 开始位置X
  49.                 $start_y = 5;    // 开始位置Y
  50.                 $pic_w   = intval($bg_w/2) - 5; // 宽度
  51.                 $pic_h   = intval($bg_h/2) - 5; // 高度
  52.                 $lineArr = array(2);
  53.                 $line_x  = 4;
  54.                 break;
  55.             case 4:
  56.                 $start_x = 4;    // 开始位置X
  57.                 $start_y = 5;    // 开始位置Y
  58.                 $pic_w   = intval($bg_w/2) - 5; // 宽度
  59.                 $pic_h   = intval($bg_h/2) - 5; // 高度
  60.                 $lineArr = array(3);
  61.                 $line_x  = 4;
  62.                 break;
  63.             case 5:
  64.                 $start_x = 85.5;   // 开始位置X
  65.                 $start_y = 85.5;   // 开始位置Y
  66.                 $pic_w   = intval($bg_w/3) - 5; // 宽度
  67.                 $pic_h   = intval($bg_h/3) - 5; // 高度
  68.                 $lineArr = array(3);
  69.                 $line_x  = 5;
  70.                 break;
  71.             case 6:
  72.                 $start_x = 5;    // 开始位置X
  73.                 $start_y = 85.5;   // 开始位置Y
  74.                 $pic_w   = intval($bg_w/3) - 5; // 宽度
  75.                 $pic_h   = intval($bg_h/3) - 5; // 高度
  76.                 $lineArr = array(4);
  77.                 $line_x  = 5;
  78.                 break;
  79.             case 7:
  80.                 $start_x = 166.5;   // 开始位置X
  81.                 $start_y = 5;    // 开始位置Y
  82.                 $pic_w   = intval($bg_w/3) - 5; // 宽度
  83.                 $pic_h   = intval($bg_h/3) - 5; // 高度
  84.                 $lineArr = array(2,5);
  85.                 $line_x  = 5;
  86.                 break;
  87.             case 8:
  88.                 $start_x = 80.5;   // 开始位置X
  89.                 $start_y = 5;    // 开始位置Y
  90.                 $pic_w   = intval($bg_w/3) - 5; // 宽度
  91.                 $pic_h   = intval($bg_h/3) - 5; // 高度
  92.                 $lineArr = array(3,6);
  93.                 $line_x  = 5;
  94.                 break;
  95.             case 9:
  96.                 $start_x = 5;    // 开始位置X
  97.                 $start_y = 5;    // 开始位置Y
  98.                 $pic_w   = intval($bg_w/3) - 5; // 宽度
  99.                 $pic_h   = intval($bg_h/3) - 5; // 高度
  100.                 $lineArr = array(4,7);
  101.                 $line_x  = 5;
  102.                 break;
  103.         }
  104.         foreach( $pic_list as $k=>$pic_path ) {
  105.             $kk = $k + 1;
  106.             if ( in_array($kk, $lineArr) ) {
  107.                 $start_x    = $line_x;
  108.                 $start_y    = $start_y + $pic_h + $space_y;
  109.             }
  110.             $resource   = imagecreatefromjpeg($pic_path.$format);
  111.             // $start_x,$start_y copy图片在背景中的位置
  112.             // 0,0 被copy图片的位置   $pic_w,$pic_h copy后的高度和宽度
  113.             imagecopyresized($background,$resource,$start_x,$start_y,0,0,$pic_w,$pic_h,imagesx($resource),imagesy($resource)); // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度
  114.             $start_x    = $start_x + $pic_w + $space_x;
  115.         }
  116.         $fname= date('YmdHis').rand(100,999).'.jpg';
  117.   
  118.         // 保存图像为 $imagePath.'$fname'.'.jpg'
  119.         $imagePath = './public/uploads/group_temp/' . $fname;
  120.         $this->create_dirs($imagePath);
  121.    
  122.         // header("Content-type: image/jpg");
  123.         // imagejpeg($background);die;//直接生成图片查看
  124.         $res = imagejpeg($background, $imagePath);
  125.         if (false === $res) {
  126.             return false;
  127.         }
  128.         // 释放内存
  129.         imagedestroy($background);
  130.         
  131.         return $imagePath;   
  132.     }