laravel框架使用QrCode生成带背景图的二维码

效果图:

 代码:



use SimpleSoftwareIO\QrCode\Facades\QrCode;

class UserController extends BaseController {
    //生成二维码
    public function qrcode(Request $request) {
        $info = $request->all();
      
        $file = DIRECTORY_SEPARATOR . "uploads" . DIRECTORY_SEPARATOR . "qrcode" . DIRECTORY_SEPARATOR ;
        if (!file_exists(public_path($file))) {
            mkdir(public_path($file), 0777, true);
        }
        $recuid = $info['recuid'];
        $path = $file . DIRECTORY_SEPARATOR . $recuid . ".png";
        $img = public_path("/images/1.jpg");

        $url = "https://www.baidu.com?pid=" . $recuid; //扫描二维码要跳转的地址
        QrCode::format('png')->errorCorrection('L')
            ->merge($img, .3, true)
            ->size(200)->generate($url, public_path($path));
        $qrcode['path'] = get_domain().$path;
        // 图片合成
        $bg = imagecreatefrompng(public_path("/images/2.png"));// 提前准备好的海报图  必须是PNG格式
        $qrcodes = imagecreatefrompng(public_path($path)); //二维码
        $x = imagesx($bg); //二维码开始位置的x坐标
        $y = imagesy($bg); //二维码开始位置的x坐标
        imagecopyresampled($bg, $qrcodes, 200, 350, 0, 0, imagesx($qrcodes), imagesx($qrcodes), imagesx($qrcodes), imagesx($qrcodes));
        $res = imagepng($bg, public_path($path)); //合并图片
        return response()->json($qrcode);
    }
}
//案例一:将活动背景图片和动态二维码图片合成一张图片
//图片一
$path_1 = 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png';
//图片二
$path_2 = 'http://tb1.bdstatic.com/tb/static-client/img/webpage/wap_code.png';
//创建图片对象
//imagecreatefrompng($filename)--由文件或 URL 创建一个新图象
$image_1 = imagecreatefrompng($path_1);
$image_2 = imagecreatefrompng($path_2);
//合成图片
//imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分
//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
imagecopymerge($image_1, $image_2, 0, 0, 0, 0, imagesx($image_2), imagesy($image_2), 100);
// 输出合成图片
//imagepng($image[,$filename]) — 以 PNG 格式将图像输出到浏览器或文件
$merge = 'merge.png';
var_dump(imagepng($image_3,'./merge.png'));


//案例二:将活动背景图片设置透明,然后和动态二维码图片合成一张图片
// 图片一 
$path_1 = 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png';
// 图片二
$path_2 = 'http://tb1.bdstatic.com/tb/static-client/img/webpage/wap_code.png';
//创建图片对象
$image_1 = imagecreatefrompng($path_1);
$image_2 = imagecreatefrompng($path_2);
//创建真彩画布
//imagecreatetruecolor(int $width, int $height)--新建一个真彩色图像
$image_3 = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));
//为真彩画布创建白色背景
//imagecolorallocate(resource $image, int $red, int $green, int $blue)
$color = imagecolorallocate($image_3, 255, 255, 255);
//imagefill(resource $image ,int $x ,int $y ,int $color)
//在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)
imagefill($image_3, 0, 0, $color);
//设置透明
//imagecolortransparent(resource $image [,int $color])
//将image图像中的透明色设定为 color
imageColorTransparent($image_3, $color);
//复制图片一到真彩画布中(重新取样-获取透明图片)
//imagecopyresampled(resource $dst_image ,resource $src_image ,int $dst_x ,int $dst_y ,int $src_x , int $src_y ,int $dst_w ,int $dst_h ,int $src_w ,int $src_h)
// dst_image:目标图象连接资源
// src_image:源图象连接资源
// dst_x:目标 X 坐标点
// dst_y:目标 Y 坐标点
// src_x:源的 X 坐标点
// src_y:源的 Y 坐标点
// dst_w:目标宽度
// dst_h:目标高度
// src_w:源图象的宽度
// src_h:源图象的高度
imagecopyresampled($image_3, $image_1, 0, 0, 0, 0, imagesx($image_1), imagesy($image_1), imagesx($image_1), imagesy($image_1));
//与图片二合成
//imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分
// //将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
imagecopymerge($image_3, $image_2, 0, 0, 0, 0, imagesx($image_2), imagesy($image_2), 100);  
// 输出合成图片
var_dump(imagepng($image_3,'./merge1.png'));

二维码扩展包的安装及使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值