1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php 合成图片 合成圆形图片

php 合成图片 合成圆形图片

时间:2020-04-16 11:12:41

相关推荐

php 合成图片 合成圆形图片

合成图片方法

<?phpclass Share {/** 生成分享图片* */function cre_share_study_img(){$auth = json_decode(base64_decode($_GET['auth']),true);$url = trim(strip_tags($auth['url']));$uid = max(0,strip_tags($auth['id'])); //120618218;if(empty($url) || !$uid){exit();}$userInfo = get_user_info($uid);if(empty($userInfo) ){exit();}$avatar = $userInfo['avatar'];$nickname = $userInfo['nickname'];$bg_img = ROOT_PATH.'/static/study/study_bg.png';$imgArr=getimagesize($bg_img);$bg_width = $imgArr[0];$required_memory = $imgArr[0] * $imgArr[1] * $imgArr['bits'];$new_limit=memory_get_usage() + $required_memory + 20000000;ini_set("memory_limit", $new_limit);$image = imagecreatefrompng($bg_img);$black = imagecolorallocate($image, 61, 61, 61); // 黑色$font = ROOT_PATH.'/static/redpacket/msyh.ttc';$text = "{$nickname} 的书屋";$text_len = (strlen($text) + mb_strlen($text,'utf-8')) / 2;$text_begin = ($bg_width-($text_len*16))/2;imagettftext($image, 26, 0, $text_begin, 380, $black, $font,$text);// 头像$is_icon = $this->put_file_from_url_content($avatar,ROOT_PATH.'/static/study/user_temp.png');if($is_icon){ // 保存网络图片成功执行合并头像$icon_img = $this->radius_img($is_icon);header('Content-type: image/png;');$is_icon_png = ROOT_PATH.'/static/study/user.png';imagepng($icon_img,$is_icon_png);imagedestroy($icon_img);$imgsarr = getimagesize($is_icon_png);$icon_width = $imgsarr[0];if (strstr($imgsarr['mime'], 'jpeg')){$icon_img = imagecreatefromjpeg($is_icon_png);}else{$icon_img = imagecreatefrompng($is_icon_png);}unlink($is_icon);unlink($is_icon_png);$avatarWidth = 155;imagecopyresampled($image, $icon_img, ($bg_width-$avatarWidth)/2, 165, 0, 0, $avatarWidth, $avatarWidth, $icon_width, $icon_width);//合成头像到}//合成二维码到$qrcode = $this->cre_qrcode($url);$imgsarr = getimagesize($qrcode);$icon_width = $imgsarr[0];$qrcode = imagecreatefrompng($qrcode);$code_img_w = 360;imagecopyresampled($image, $qrcode, ($bg_width-$code_img_w)/2, 595, 0, 0, $code_img_w, $code_img_w,$icon_width, $icon_width);header('Content-type: image/png;');imagepng($image);imagedestroy($image);ini_restore ("memory_limit");}// 生成二维码function cre_qrcode($url='',$tmp_qr = ROOT_PATH.'/static/study/qr_code.png'){vendor('Phcode.phpqrcode');$errorCorrectionLevel = 3;//容错级别$matrixPointSize = 10;//生成图片大小//生成二维码图片QRcode::png($url, $tmp_qr, $errorCorrectionLevel, $matrixPointSize, 2);return $tmp_qr;}// 把图片转换成 圆形private function radius_img($imgpath = './public/qrcode/qrcode.jpg', $radius = 0){$ext = pathinfo($imgpath);$src_img = null;switch ($ext['extension']){case 'jpg':$src_img = imagecreatefromjpeg($imgpath);break;case 'png':$src_img = imagecreatefrompng($imgpath);break;case 'gif':$src_img = imagecreatefromgif($imgpath);break;}$wh = getimagesize($imgpath);$w = $wh[0];$h = $wh[1];$radius = $radius == 0 ? (min($w, $h) / 2) : $radius;$img = imagecreatetruecolor($w, $h);//这一句一定要有imagesavealpha($img, true);//拾取一个完全透明的颜色,最后一个参数127为全透明$bg = imagecolorallocatealpha($img, 255, 255, 255, 127);imagefill($img, 0, 0, $bg);$r = $radius; //圆 角半径for ($x = 0; $x < $w; $x++){for ($y = 0; $y < $h; $y++){$rgbColor = imagecolorat($src_img, $x, $y);if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))){//不在四角的范围内,直接画imagesetpixel($img, $x, $y, $rgbColor);}else{//在四角的范围内选择画//上左$y_x = $r; //圆心X坐标$y_y = $r; //圆心Y坐标if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))){imagesetpixel($img, $x, $y, $rgbColor);}//上右$y_x = $w - $r; //圆心X坐标$y_y = $r; //圆心Y坐标if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))){imagesetpixel($img, $x, $y, $rgbColor);}//下左$y_x = $r; //圆心X坐标$y_y = $h - $r; //圆心Y坐标if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))){imagesetpixel($img, $x, $y, $rgbColor);}//下右$y_x = $w - $r; //圆心X坐标$y_y = $h - $r; //圆心Y坐标if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))){imagesetpixel($img, $x, $y, $rgbColor);}}}}return $img;}/*** 异步将远程链接上的内容(图片或内容)写到本地* @param unknown $url 远程地址* @param unknown $saveName保存在服务器上的文件名* @param unknown $path保存路径* @return boolean*/function put_file_from_url_content($url='',$path='/static/study/user_temp') {//方法一://推荐用该方法$header = array('User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/0101 Firefox/45.0','Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding: gzip, deflate',);// $url='/mmopen/vi_32/Q0j4TwGTfTKkGpNuUhaBniatRsiaG7ksqmhUWzkk40kTRS6icQS7kJcsfxcibQo7vDFcKibr7NHb9YIXiaXsEtLcdL6A/0';$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);curl_setopt($curl, CURLOPT_ENCODING, 'gzip');curl_setopt($curl, CURLOPT_HTTPHEADER, $header);$data = curl_exec($curl);$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);curl_close($curl);if ($code == 200) {//把URL格式的图片转成base64_encode格式的!$imgType = 'image/jpeg';if(function_exists('get_headers')){$imghttp = get_headers($url,true);$imgType = $imghttp['Content-Type'];};$imgBase64Code = "data:{$imgType};base64," . base64_encode($data);$img_content = $imgBase64Code;//图片内容if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result)) {$type = $result[2];//得到图片类型png?jpg?gif?if($type == 'jpeg'){$type = 'jpg';}$path = "{$path}.{$type}";if (file_put_contents($path, base64_decode(str_replace($result[1], '', $img_content)))) {return $path;}}}return false;}}

注意 背景图片,字体,二维码图片,头像图片都必须先存在

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。