最近有一个小任务是生成海报 - 以供用户分享引流,无奈对GD库并不熟悉,只得网上找轮子,其中涉及到的问题有:
1、二维码添加到海报背景图之中
PHP操作图片使用GD库,添加文字以及图片:
2、将微信头像转为圆形
<?php /** * 将图片转为圆形 * @param [string] $img 原始图片地址 * @param [string] $save_img 生成后的圆形图片存储路径 * @author xu * @copyright 2018-11-14 */ function circular_img($img,$save_img){ $ext=pathinfo($img); $src_img = null; switch ($ext['extension']) { case 'jpg': $src_img=imagecreatefromjpeg($img); break; case 'png': $src_img=imagecreatefrompng($img); break; } $wh= getimagesize($img); $w=$wh[0]; $h=$wh[1]; $w=min($w,$h); $h= $w; $img = imagecreatetruecolor($w, $h); //这一句一定要有 imagesavealpha($img, true); //拾取一个完全透明的颜色,最后一个参数127为全透明,并可以设定背景色 $bg = imagecolorallocatealpha($img, 255, 255, 255, 127); imagefill($img, 0, 0, $bg); $r = $w / 2; //圆半径 $y_x = $r; //圆心X坐标 $y_y = $r; //圆心Y坐标 for ($x = 0; $x < $w; $x++) { for ($y = 0; $y < $h; $y++) { $rgbColor = imagecolorat($src_img, $x, $y); if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r)) < ($r * $r))) { imagesetpixel($img, $x, $y, $rgbColor); } } } imagejpeg ($img,$save_img,90); imagedestroy($img); return true; } $res = circular_img('old.jpg','new.jpg'); var_dump($res);
3、往微信公众平台生成的二维码中间加入公众号logo
<?php /** * 二维码内部新增LOGO * @param [string] $QR 二维码地址 * @param [string] $logo 公众号logo * @param [string] $save_img 存储地址 * @return 已订阅返回true 没有订阅返回false */ function createQRLogo($QR,$logo,$save_img) { $errorCorrectionLevel = 'L';//容错级别 $matrixPointSize = 6;//生成图片大小 $QR = imagecreatefromstring(file_get_contents($QR)); $logo = imagecreatefromstring(file_get_contents($logo)); $QR_width = imagesx($QR);//二维码图片宽度 $QR_height = imagesy($QR);//二维码图片高度 $logo_width = imagesx($logo);//logo图片宽度 $logo_height = imagesy($logo);//logo图片高度 $logo_qr_width = $QR_width / 5; $scale = $logo_width/$logo_qr_width; $logo_qr_height = $logo_height/$scale; $from_width = ($QR_width - $logo_qr_width) / 2; //重新组合图片并调整大小 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); //保存图片 imagejpeg ($QR,$save_img,90); imagedestroy($QR); return true; } createQRLogo('qrcode.png','logo.jpg','new.jpg');
4、远程下载图片到本地
/** * 下载远程文件到本地 * @param [string] $url 文件远程地址 * @param [string] $file_path 文件本地存储路径 * @author xu * @copyright 2018-11-14 */ function download($url, $file_path) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $file = curl_exec($ch); curl_close($ch); $handle = @fopen($file_path, 'a'); fwrite($handle, $file); fclose($handle); } $images = [ 'http://thirdwx.qlogo.cn/mmopen/abc.png', ]; foreach ( $images as $url ) { download($url,'a.jpg'); }