关于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;
}