关于PHP处理图片,相信你用的到

图一在这里插入图片描述这是我们产品给我的底部背景图

需要在下面这些地方P上自己的数据,从左到右,分别是:头像、用户名、课时、正确率、时长

图!二在这里插入图片描述其实这样一个图片我们说简单一点,就是将这些文字当作水印 做到底部图片上,然后将方形的头像处理一下再将两张图片合并一下就OK了

上代码!这里取数据的就不要了,大家根据自己的业务需求拿自己的数据。直接上图片处理的代码好了

	// 获取并处理头像,testPicture方法写在下面
	$avatar = imagecreatefrompng( $this->share_model->testPicture( $info->avatar,$uid ) );
	// 打开图片,配置图片路径 图一
   $src = BASE_PATH."data/wx/dibu.png";
	// 获取图片信息 ,获取到图片的尺寸、类型。有兴趣的同学可以输出自己看一下
   $info = getimagesize( $src );
   // 通过图像的编号来获取图像的类型
   $type = image_type_to_extension( $info[2],false );
   // 在内存中创建一个和图像类型一样的图像
   $fun = "imagecreatefrom{$type}";
   // 把图片复制到内存中
   $image = $fun( $src );
   // 设置字体
   $font = BASE_PATH."data/wx/font/fzltzch_GBK.ttf";
   // 设置字体颜色和透明度
   $color = imagecolorallocatealpha( $image,0,0,0,0 );
   // 写入文字
   imagettftext( $image,35,0,165,740,$color,$font,$realname );
   imagettftext( $image,35,0,$lessons_x,940,$color,$font,$lessons );
   imagettftext( $image,35,0,300,940,$color,$font,$correct_rate );
   imagettftext( $image,35,0,$duration_x,940,$color,$font,$duration );
	
	// 将处理过后的头像文字与背景图合并
	imagecopymerge( $image,$avatar,65,710,0,0,80,80,100 );
	
	$func = "image{$type}";
	$func( $image,BASE_PATH."data/wx/{$uid}.{$type}" );
	// 处理好的文件上传到OSS
	$this->oss_model->uploadFile( "wx/share/{$uid}/".date("Y-m-d").".png",BASE_PATH."data/wx/{$uid}.{$type}" );
    $url = DEF_OSS_DOMAIN."wx/share/{$uid}/".date("Y-m-d").".png";
    // 删除临时生成的文件
    @unlink( BASE_PATH."data/wx/{$uid}.png" );
    @unlink( BASE_PATH."data/wx/share/".md5( "{$uid}-share-avatar" ).".png" );
    // 销毁图像内存
    imagedestroy( $image );

因为头像是方形的,所以要给处理成圆形。


  // 图片处理圆角
  public function testPicture($url,$uid,$path = BASE_PATH.'data/wx/share/'){
    $w = 240;  $h= 240; // original size
    $original_path= $url;
    $dest_path = $path.md5( $uid."-share-avatar" ).'.png';
    $src = imagecreatefromstring(file_get_contents($original_path));
    $newpic = imagecreatetruecolor($w,$h);
    imagealphablending($newpic,false);
    $transparent = imagecolorallocatealpha($newpic, 255, 255, 255, 0);
    $r=$w/2;
    for($x=0;$x<$w;$x++) {
      for($y=0;$y<$h;$y++){
        $c = @imagecolorat($src,$x,$y);
        $_x = $x - $w/2;
        $_y = $y - $h/2;
        if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
          imagesetpixel($newpic,$x,$y,$c);
        }else{
          imagesetpixel($newpic,$x,$y,$transparent);
        }
      }
    }
    imagesavealpha($newpic, true);
    $fx = imagesx( $newpic );
    $fy = imagesy( $newpic );
    $small = imagecreatetruecolor( 80,80 );
    imagecopyresampled( $small,$newpic,0,0,0,0,80,80,$fx,$fy );
    imagepng( $small,$dest_path );
    imagedestroy($newpic);
    imagedestroy($src);
    // unlink($url);
    return $dest_path;
  }

OK,我们处理好的头像就是这样的 ⬇️

关于PHP处理图片,相信你用的到

来看一下成品哈 ⬇️

关于PHP处理图片,相信你用的到