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

本文介绍了一种使用PHP进行图片处理的方法,包括将方形头像转化为圆形,并将其与底部背景图合并,同时在图片上添加如用户名、课时等水印信息。通过代码示例,展示了如何获取图片信息、设置字体、颜色及透明度,以及如何利用GD库进行图片操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

需要在下面这些地方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,我们处理好的头像就是这样的 ⬇️

在这里插入图片描述

来看一下成品哈 ⬇️

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值