zip压缩、生成二维码、制作二维码标签

需要ZipArchive,GD,simplesoftwareio/qrcode

public function batch_print(Request $request)
{
    // TODO
    $query = Product::whereNull('deleted_at');
    if ($request->input('ids') === 'all') {

    } else {
        $id_array = explode(',', $request->input('ids'));
        if (!empty($id_array)) {
            $query->whereIn('id', $id_array);
        }
    }
    // 数据源
    $list = $query->get();
    // 定义二维码文件存储路径
    $filepath = alias('@base/public/uploadfiles/product_qrcodes');
    // 创建路径,设置权限
    if (!file_exists($filepath)) {
        mkdir($filepath, 0777, true);
    }
    
    // 压缩包文件名
    $zip_name = 'uploadfiles/product_qrcodes/' . time() . '.zip';
    // 压缩文件路径
    $zip_path = alias('@base/public/' . $zip_name);
    // 建立压缩包实例
    $zip = new \ZipArchive();
    
    // 制作标签时,用到的字体
    $font = public_path('fonts/fangsong_GB2312.ttf');

    // 创建压缩包
    if ($zip->open($zip_path, \ZipArchive::CREATE) === TRUE) {
        foreach ($list as $k => $v) {
            // 二维码文件名
            $qrcode_png = $filepath . '/' . $v['product_sn'] . '.png';
            $content = $v['product_sn'];
            // 生成二维码
            (new Generator())->format('png')->size(300)->margin(0)->generate($content, $qrcode_png);
            // 创建标签空白文件
            $bg_img = imagecreate(340, 420);
            // 创建标签中使用的颜色,这里是白色
            $white = imagecolorallocate($bg_img, 255, 255, 255);
            //填充标签背景
            imagefill($bg_img, 0, 0, $white);
            
            // 打开二维码png图片资源
            $qr = imagecreatefrompng($qrcode_png);
            // 复制二维码图片资源到标签上,并在标签上设置定位
            imagecopy($bg_img, $qr, 20, 20, 0, 0, 300, 300);
            // 创建标签中使用的颜色,这里是黑色
            $black = imagecolorallocate($bg_img, 0, 0, 0);
            // 文字内容
            $text = [
                $v['product_name'],
                $v['product_sn'],
                '¥' . $v['sale_price']
            ];
            // 居中时,计算x轴的位置
            foreach ($text as $tk => $t){
                // 获取ttf文字区域的定位点数值
                $font_bbox = imagettfbbox(15, 0, $font, $t);
                // 计算文字居中时,文字区域在标签上的起点坐标
                $x = (340 - ($font_bbox[2] - $font_bbox[0])) / 2;
                // 将文字定位在标签区域上
                imagettftext($bg_img, 15, 0, $x, $tk*24+350, $black, $font, $t);
            }
            
            // 生成png图片,这里是替换原来的二维码图片
            imagepng($bg_img, $qrcode_png);
            // 将图片加入到压缩包中,并设置在压缩包中的文件名
            $zip->addFile($qrcode_png, $v['product_name'] . '_' . $v['product_sn'] . '.png');
        }
        $zip->close();
    }
    return response_json(1, [
        'fileurl' => get_file_url($zip_name)
    ]);

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知飞到哪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值