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)
    ]);

}
    原文作者:不知飞到哪
    原文地址: https://blog.csdn.net/qq_35923199/article/details/124689474
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞