杰克工作室 发表于 2024-1-1 20:37

微信群九宫格头像

<pre>
&nbsp; &nbsp; /**
&nbsp; &nbsp; &nbsp;* 根据图片数组&nbsp; 拼接成九宫格式拼图
&nbsp; &nbsp; &nbsp;* @param&nbsp; array&nbsp; &nbsp;$pic_list [带拼成的图片数组]
&nbsp; &nbsp; &nbsp;* @param&nbsp; integer $bg_w&nbsp; &nbsp; &nbsp;[背景图片宽度]
&nbsp; &nbsp; &nbsp;* @param&nbsp; integer $bg_h&nbsp; &nbsp; &nbsp;[背景图片高度]
&nbsp; &nbsp; &nbsp;* @param&nbsp; string&nbsp; $format&nbsp; &nbsp;[阿里云图片获取参数]
&nbsp; &nbsp; &nbsp;* @return &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [返回一个拼接好的图片(路径)]
&nbsp; &nbsp; &nbsp;*/
&nbsp; &nbsp; public function make_group_avatar($pic_list = array(),$bg_w = 500,$bg_h=500,$format=&quot;?x-oss-process=image/resize,w_80,h_80&quot;){
&nbsp; &nbsp; &nbsp; &nbsp; // $pic_list&nbsp; &nbsp; &nbsp; &nbsp;= array(
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &#39;http://res.qhhznt.com/rm6666/image/201708/1502870752784.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &#39;http://res.qhhznt.com/rm8888/image/201708/1502866491478.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &#39;http://res.qhhznt.com/rm102003/image/20180112/15157540161.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102016/image/201708/1502875655353.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102021/image/201708/1503049660444.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102032/image/201710/1506844817016.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102060/image/201709/1505301716128.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102061/image/201709/1506126876343.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;// &#39;http://res.qhhznt.com/rm102063/image/201710/1508984047181.jpg&#39;,
&nbsp; &nbsp; &nbsp; &nbsp; // );
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $pic_list&nbsp; &nbsp;= array_slice($pic_list, 0, 9); // 只操作前9个图片&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $background = imagecreatetruecolor($bg_w, $bg_h); // 背景图片&nbsp;&nbsp;
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; //int imagecolorallocate ( resource $image , int $red , int $green , int $blue ) 为一幅图像分配颜色
&nbsp; &nbsp; &nbsp; &nbsp; $color&nbsp; &nbsp;= imagecolorallocate($background, 202, 201, 201); // 为真彩色画布创建白色背景,再设置为透明
&nbsp; &nbsp; &nbsp; &nbsp; imagefill($background, 0, 0, $color);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//区域填充&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; imageColorTransparent($background, $color);&nbsp; &nbsp; &nbsp;// 将某个颜色定义为透明色
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $pic_count&nbsp; = count($pic_list);
&nbsp; &nbsp; &nbsp; &nbsp; $lineArr&nbsp; &nbsp; = array();&nbsp; // 需要换行的位置
&nbsp; &nbsp; &nbsp; &nbsp; $space_x&nbsp; &nbsp; = 3;
&nbsp; &nbsp; &nbsp; &nbsp; $space_y&nbsp; &nbsp; = 3;
&nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 0;
&nbsp; &nbsp; &nbsp; &nbsp; switch($pic_count) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 1: // 正中间
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = intval($bg_w/4);&nbsp; // 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = intval($bg_h/4);&nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/2); // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/2); // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 2: // 中间位置并排
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 2;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = intval($bg_h/4) + 3;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/2) - 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/2) - 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $space_x = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 3:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 124;&nbsp; &nbsp;// 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 5;&nbsp; &nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/2) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/2) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(2);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 4;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 4:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 4;&nbsp; &nbsp; // 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 5;&nbsp; &nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/2) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/2) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(3);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 4;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 5:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 85.5;&nbsp; &nbsp;// 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 85.5;&nbsp; &nbsp;// 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/3) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/3) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(3);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 6:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 5;&nbsp; &nbsp; // 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 85.5;&nbsp; &nbsp;// 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/3) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/3) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(4);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 7:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 166.5;&nbsp; &nbsp;// 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 5;&nbsp; &nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/3) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/3) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(2,5);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 8:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 80.5;&nbsp; &nbsp;// 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 5;&nbsp; &nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/3) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/3) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(3,6);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 9:
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x = 5;&nbsp; &nbsp; // 开始位置X
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y = 5;&nbsp; &nbsp; // 开始位置Y
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_w&nbsp; &nbsp;= intval($bg_w/3) - 5; // 宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $pic_h&nbsp; &nbsp;= intval($bg_h/3) - 5; // 高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $lineArr = array(4,7);
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $line_x&nbsp; = 5;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; foreach( $pic_list as $k=&gt;$pic_path ) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $kk = $k + 1;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ( in_array($kk, $lineArr) ) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x&nbsp; &nbsp; = $line_x;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_y&nbsp; &nbsp; = $start_y + $pic_h + $space_y;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $resource&nbsp; &nbsp;= imagecreatefromjpeg($pic_path.$format);
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // $start_x,$start_y copy图片在背景中的位置
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 0,0 被copy图片的位置&nbsp; &nbsp;$pic_w,$pic_h copy后的高度和宽度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; imagecopyresized($background,$resource,$start_x,$start_y,0,0,$pic_w,$pic_h,imagesx($resource),imagesy($resource)); // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $start_x&nbsp; &nbsp; = $start_x + $pic_w + $space_x;
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $fname= date(&#39;YmdHis&#39;).rand(100,999).&#39;.jpg&#39;;
&nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; // 保存图像为 $imagePath.&#39;$fname&#39;.&#39;.jpg&#39;
&nbsp; &nbsp; &nbsp; &nbsp; $imagePath = &#39;./public/uploads/group_temp/&#39; . $fname;
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;create_dirs($imagePath);
&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; // header(&quot;Content-type: image/jpg&quot;);
&nbsp; &nbsp; &nbsp; &nbsp; // imagejpeg($background);die;//直接生成图片查看
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; $res = imagejpeg($background, $imagePath);
&nbsp; &nbsp; &nbsp; &nbsp; if (false === $res) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;
&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; // 释放内存
&nbsp; &nbsp; &nbsp; &nbsp; imagedestroy($background);
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; return $imagePath;&nbsp; &nbsp;
&nbsp; &nbsp; }&nbsp;</pre>
页: [1]
查看完整版本: 微信群九宫格头像