PHP生成二维码海报

最近有一个小任务是生成海报 - 以供用户分享引流,无奈对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');
}

猜你喜欢

转载自www.cnblogs.com/xuweiqiang/p/9956498.html
今日推荐