PHP 生成长图之PECL的 Imagick库

环境配置:Windows 10 + PHP Version 7.3.4

ImageMagick版本:

 ImageMagick 拓展安装:http://pecl.php.net/package/imagick

注意:把扩展包中的“CORE_*.dll” 这些dll文件 放到 你的php.exe同级目录下

参考资料:

PHP手册:图像处理(ImageMagick)

代码示例:

<?php

set_time_limit(0);


function mb_str_split($str,$mb_str_length = 10){
    $arr = preg_split('/(?<!^)(?!$)/u', $str);
    $arr = array_chunk($arr,$mb_str_length);
    $str = [];
    foreach($arr as $value){
        $str[] = implode('',$value);
    }
    $str = implode("\n",$str);
    return ['convert_str' => $str,'convert_lines' => count($arr)];
}

$orderContent = file_get_contents('e:/order.txt');
$orderContent = json_decode($orderContent,true);



$textSize = 14;// 字体大小
$hangGao  = $textSize + 2;// 文字每行高度=字体大小+2

$image          = new Imagick();
$draw           = new ImagickDraw();
$testColor      = new ImagickPixel('#000000');
$imgBackground  = new ImagickPixel('#FFFFFF'); // Transparent

/* Font properties */
$draw->setFont('Microsoft-YaHei-Light-&-Microsoft-YaHei-UI-Light');// 调用 Imagick::queryFonts() 查看
$draw->setFontSize($textSize);
$draw->setFillColor($testColor);
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);
$draw->setStrokeWidth(5);



$heightTop          = 90;// 文件顶部高度
// 2 * $textSize + 30:表格表头和尾部的字体高度 + 30 空隙
// $orderContent['product_number'] *($hangGao * 3  + 10 ):SKU的行数 * (3倍字体高度 + 10的空隙)
$heightTable        = 3 * $textSize + 30 + $orderContent['product_number'] * ($hangGao * 3  + 10 );
$heightBottomSpace  = 100;// 100的留白,便于书写
$image->newImage(1200, $heightTop + $heightTable + $heightBottomSpace, $imgBackground);



// X轴偏移量
$columnIndex_X_0  = 50;
$columnIndex_X_1  = $columnIndex_X_0 + 95;// 图片规格是50X50
$columnIndex_X_2  = $columnIndex_X_1 + 65;// SKU
$columnIndex_X_3  = $columnIndex_X_2 + 110;// 包装类型
$columnIndex_X_4  = $columnIndex_X_3 + 80;// 产品名称
$columnIndex_X_5  = $columnIndex_X_4 + 210;// 下单数量
$columnIndex_X_6  = $columnIndex_X_5 + 60;// 单价
$columnIndex_X_7  = $columnIndex_X_6 + 80;// 运费
$columnIndex_X_8  = $columnIndex_X_7 + 70;// 优惠额
$columnIndex_X_9  = $columnIndex_X_8 + 70;// 入库数量
$columnIndex_X_10 = $columnIndex_X_9 + 50;// 不良品数量
$columnIndex_X_11 = $columnIndex_X_10 + 60;// 入库人
$columnIndex_X_12 = $columnIndex_X_11 + 85;// 入库时间

$line_space_width       = 3;// 内容与线的空隙
$line_offset_x_left     = 40;// 横线X轴起始坐标(左边距40)
$line_offset_x_right    = 1160;// 横线X轴终止坐标(右边距40)
$offset_y               = 50;// 起始Y轴偏移量(控制画笔纵向移动)

// 顶部
$draw->setFontSize(25);
$draw->annotation(520, $offset_y, '采购单');
$draw->setFontSize($textSize);
$offset_y += 25;
$draw->annotation($line_offset_x_left, $offset_y, '日期:'.$orderContent['create_time']);
$draw->annotation(550, $offset_y, '供应商:'.$orderContent['supplier_name']);
$offset_y += 15;
$draw->annotation($line_offset_x_left, $offset_y, '采购员:'.$orderContent['buyer_name']);
$draw->annotation(550, $offset_y, '收货地址:'.$orderContent['address']);

// 表头部分
$offset_y += 5;
$titleHeader = [0 => ['      PO','产品图片','      SKU','  包装类型',"\t\t\t\t\t\t产品名称","下单数量",'单价','运费','优惠额',"入库\n数量","不良品\n数量",'入库人','入库时间']];
$line_offset_y_top = $offset_y;// 竖线Y轴起始坐标
$line_offset_y_bottom = 0;// 竖线Y轴终止坐标
foreach($titleHeader as $key => $titleNameList){
    $columnIndex = 0;
    // (划线)表头上的横线
    $draw->line($line_offset_x_left, $offset_y, $line_offset_x_right, $offset_y);
    // 表头
    foreach ($titleNameList as $key2 =>$titleName){
        $offset_x = 'columnIndex_X_'.$columnIndex;
        $draw->annotation($$offset_x, $hangGao + $offset_y, $titleName);

        $columnIndex ++;
    }
}

// 表格内容
$offset_y += $hangGao * 2 + 10;
foreach($orderContent['data'] as $key => $orderItemVal){
    if($key == 0){
        // (划线)
        $draw->line($line_offset_x_left, $offset_y, $line_offset_x_right, $offset_y);
    }

    $columnIndex = 0;
    $convertLines = 1;// 一行内容中文本最大占用行数
    for($i = 0;$i <= 12;$i ++ ){// 12.表格总共12列
        $offset_x = 'columnIndex_X_'.$i;

        $valueName = '';
        switch ($i){
            case 0:
                $valueName = $orderItemVal['purchase_number'];
                break;
            case 1:
                $url = $orderItemVal['product_img_url'];
                $glasses = new Imagick();
                $glasses->readImageBlob(file_get_contents('http://yibaistore.yibainetwork.com/end/upload/image/Thumb_no_logo/1711220216828/1711220216828-1.jpg'));
                $glasses->resizeImage(50, 50, 1, 0, true);
                $image->compositeImage($glasses, Imagick::COMPOSITE_DEFAULT, $$offset_x, $hangGao * ($key) + $offset_y + 5);
                break;
            case 2:
                $valueName = $orderItemVal['sku'];
                break;
            case 3:
                $valueName      = $orderItemVal['purchase_packaging'];
                $convertResult  = mb_str_split($valueName,6);// 6.每行只展示6个汉字
                $valueName      = $convertResult['convert_str'];
                break;
            case 4:
                $convertResult  = mb_str_split($orderItemVal['product_name'],14);
                $valueName      = $convertResult['convert_str'];
                $convertLines   = $convertResult['convert_lines'];
                if($convertLines < 3) $convertLines = 3;// 控制最低高度,由产品名称和图片高度决定
                break;
            case 5:
                $valueName = $orderItemVal['purchase_amount'];
                break;
            case 6:
                $valueName = $orderItemVal['purchase_unit_price'];
                break;
            case 7:
                $valueName = $orderItemVal['freight'];
                break;
            case 8:
                $valueName = $orderItemVal['discount'];
                break;
            case 9:
                $valueName = $orderItemVal['instock_qty'];
                break;
            case 10:
                $valueName = $orderItemVal['bad_qty'];
                break;
            case 11:
                $valueName      = $orderItemVal['instock_user_name'];
                $convertResult  = mb_str_split($valueName,3);
                $valueName      = $convertResult['convert_str'];
                break;
            case 12:
                $valueName = $orderItemVal['instock_date'];
                $valueName = str_replace(' ',"\n",$valueName);
                break;
        }

        if($i == 1) continue;

        $draw->annotation($$offset_x, $hangGao * ($key + 1) + $offset_y + $line_space_width, $valueName);

    }

    if($convertLines > 1){
        $offset_y += $textSize * ($convertLines);// Y周偏移量
    }

    $innerOffsetY = $hangGao * ($key + 1) + $offset_y + $line_space_width;
    // (划线)
    $draw->line($line_offset_x_left, $innerOffsetY, $line_offset_x_right, $innerOffsetY);// 每一行的下划线
}

$line_offset_y_bottom = $innerOffsetY;// 竖线Y轴实际终止坐标
$offset_y = $line_offset_y_bottom + $textSize + 5;

// (划线)表格Y轴竖线
for($i = 0;$i <= 12;$i ++ ) {// 12.表格总共12列
    $offset_x = 'columnIndex_X_'.$i;
    if($i == 0){
        $draw->line($line_offset_x_left, $line_offset_y_top, $line_offset_x_left, $offset_y);// 每一行的下划线
    }elseif($i == 12){
        $draw->line($$offset_x - $line_space_width, $line_offset_y_top, $$offset_x - $line_space_width, $line_offset_y_bottom);// 每一行的下划线
        $draw->line($line_offset_x_right, $line_offset_y_top, $line_offset_x_right, $offset_y);// 每一行的下划线
    }else{
        if($i == 1 or $i == 11){
            $draw->line($$offset_x - $line_space_width, $line_offset_y_top, $$offset_x - $line_space_width, $line_offset_y_bottom);// 每一行的下划线
        }else{
            $draw->line($$offset_x - $line_space_width, $line_offset_y_top, $$offset_x - $line_space_width, $offset_y);// 每一行的下划线
        }

    }
}

// 尾部
$draw->annotation($columnIndex_X_2, $offset_y - $line_space_width, '      产品总数');
$draw->annotation($columnIndex_X_3, $offset_y - $line_space_width, $orderContent['product_number']);
$draw->annotation($columnIndex_X_4, $offset_y - $line_space_width, '                     总数量');
$draw->annotation($columnIndex_X_5, $offset_y - $line_space_width, $orderContent['total']);
$draw->annotation($columnIndex_X_6, $offset_y - $line_space_width, $orderContent['total_price']);
$draw->annotation($columnIndex_X_7, $offset_y - $line_space_width, $orderContent['total_freight']);
$draw->annotation($columnIndex_X_8, $offset_y - $line_space_width, $orderContent['total_discount']);
$draw->annotation($columnIndex_X_9, $offset_y - $line_space_width, ' RMB');
$draw->line($line_offset_x_left, $offset_y, $line_offset_x_right, $offset_y);// 每一行的下划线

// 输出图片文件
$image->flattenImages();
$image->setImageFormat('png');
$image->drawImage($draw);

header("Content-Type: image/{$image->getImageFormat()}");
echo $image->getImageBlob();
exit;

order.txt 文件内容:

base_decode 解压后放入order.txt文件即可

eyJwcm9kdWN0X251bWJlciI6MTAsInRvdGFsIjo1MiwidG90YWxfcHJpY2UiOiIxODIwLjAwMCIsInN1cHBsaWVyX25hbWUiOiJcdTVlN2ZcdTVkZGVcdTUzNGVcdTUzNDdcdTY3MGRcdTk5NzBcdTY3MDlcdTk2NTBcdTUxNmNcdTUzZjgiLCJidXllcl9uYW1lIjoiXHU2NzRlXHU4NDBkMjA3MjEyIiwiY3JlYXRlX3RpbWUiOiIyMDIyLTEwLTE4IDE0OjM4OjU2IiwiYWRkcmVzcyI6Ilx1NWU3Zlx1NGUxY1x1NzcwMSBcdTRlMWNcdTgzOWVcdTVlMDIgIFx1ODY0ZVx1OTVlOFx1OTU0NyBcdTY1YjBcdTgwNTRcdTc5M2VcdTUzM2FcdTlhZDhcdTc5ZDFcdTRlMDBcdThkZWZcdTRlYmZcdTZjZjBcdTc1MzVcdTdlYmZcdWZmMDhcdTY2MTNcdTRmNzBcdTdmNTFcdTdlZGNcdTU2ZmRcdTUxODVcdTRlZDNcdWZmMDkiLCJkYXRhIjpbeyJpZCI6IjEyNTA0OTc4IiwicHVyY2hhc2VfbnVtYmVyIjoiUEZCMTEyOTA4MjAiLCJza3UiOiIxNzExMjIwMjE2ODE1IiwicHJvZHVjdF9pbWdfdXJsIjoiaHR0cDpcL1wvcHJvZHVjdC55aWJhaW5ldHdvcmsuY29tXC9lbmRcL3VwbG9hZDNcL2ltYWdlXC9UaHVtYl9ub19sb2dvXC8xNzExMjIwMjE2ODE1XC8xNzExMjIwMjE2ODE1LTEuanBnIiwicHJvZHVjdF9uYW1lIjoiXHVmZjA4XHU2NzBkXHU4OGM1XHU3ZWM0XHVmZjA5XHU2NWY2XHU1YzFhXHU0ZjExXHU5NWYyXHU0ZmVlXHU4ZWFiXHU2NjNlXHU3NjI2XHU2YjI3XHU3ZjhlXHU1OTczXHU4OGM1XHU4ZmRlXHU0ZjUzXHU4OGU0XHU5ZWQxXHU4MjcyWFhMIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6OSwiaW5zdG9ja19xdHkiOiI5IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1ODRkZFx1Nzk2NVx1NjU4NyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTk6NTE6MzMiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5NzkiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MjYiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MjZcLzE3MTEyMjAyMTY4MjYtMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTUxOWJcdTdlZmZcdTgyNzJTIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NywiaW5zdG9ja19xdHkiOiI3IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1ODRkZFx1Nzk2NVx1NjU4NyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6MDE6MTEiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODAiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MTQiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkXC9pbWFnZVwvVGh1bWJfbm9fbG9nb1wvMTcxMTIyMDIxNjgxNFwvMTcxMTIyMDIxNjgxNC0xLmpwZyIsInByb2R1Y3RfbmFtZSI6Ilx1ZmYwOFx1NjcwZFx1ODhjNVx1N2VjNFx1ZmYwOVx1NjVmNlx1NWMxYVx1NGYxMVx1OTVmMlx1NGZlZVx1OGVhYlx1NjYzZVx1NzYyNlx1NmIyN1x1N2Y4ZVx1NTk3M1x1ODhjNVx1OGZkZVx1NGY1M1x1ODhlNFx1OWVkMVx1ODI3MlhMIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NywiaW5zdG9ja19xdHkiOiI3IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1OTBiOVx1NTNlY1x1NjU4YyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6NDA6NTAiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODEiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MjciLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MjdcLzE3MTEyMjAyMTY4MjctMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTUxOWJcdTdlZmZcdTgyNzJNIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NSwiaW5zdG9ja19xdHkiOiI1IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1ODRkZFx1Nzk2NVx1NjU4NyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6MDA6MjkiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODIiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MTMiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MTNcLzE3MTEyMjAyMTY4MTMtMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTllZDFcdTgyNzJMIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NSwiaW5zdG9ja19xdHkiOiI1IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1N2ZjMVx1NTkyOVx1NjY3NiIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6MjA6MzAiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODMiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MTIiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MTJcLzE3MTEyMjAyMTY4MTItMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTllZDFcdTgyNzJNIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NSwiaW5zdG9ja19xdHkiOiI1IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1ODRkZFx1Nzk2NVx1NjU4NyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6MDA6MjkiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODQiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MTEiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MTFcLzE3MTEyMjAyMTY4MTEtMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTllZDFcdTgyNzJTIiwicHVyY2hhc2VfdW5pdF9wcmljZSI6IjM1LjAwMCIsInB1cmNoYXNlX2Ftb3VudCI6NSwiaW5zdG9ja19xdHkiOiI1IiwiYmFkX3F0eSI6IjAiLCJpbnN0b2NrX3VzZXJfbmFtZSI6Ilx1ODRkZFx1Nzk2NVx1NjU4NyIsImluc3RvY2tfZGF0ZSI6IjIwMjItMTAtMTkgMTc6MDA6NTAiLCJmcmVpZ2h0IjoiMC4wMDAiLCJkaXNjb3VudCI6IjAuMDAwIiwibGFiZWxfcGRmIjoiIiwiYmFyY29kZV9wZGYiOiIiLCJwdXJjaGFzZV9wYWNrYWdpbmciOiJQRVx1ODg4Ylx1NTMwNVx1ODhjNSIsIm5vX2luc3RvY2tfcXR5IjowfSx7ImlkIjoiMTI1MDQ5ODUiLCJwdXJjaGFzZV9udW1iZXIiOiJQRkIxMTI5MDgyMCIsInNrdSI6IjE3MTEyMjAyMTY4MzAiLCJwcm9kdWN0X2ltZ191cmwiOiJodHRwOlwvXC9wcm9kdWN0LnlpYmFpbmV0d29yay5jb21cL2VuZFwvdXBsb2FkM1wvaW1hZ2VcL1RodW1iX25vX2xvZ29cLzE3MTEyMjAyMTY4MzBcLzE3MTEyMjAyMTY4MzAtMS5qcGciLCJwcm9kdWN0X25hbWUiOiJcdWZmMDhcdTY3MGRcdTg4YzVcdTdlYzRcdWZmMDlcdTY1ZjZcdTVjMWFcdTRmMTFcdTk1ZjJcdTRmZWVcdThlYWJcdTY2M2VcdTc2MjZcdTZiMjdcdTdmOGVcdTU5NzNcdTg4YzVcdThmZGVcdTRmNTNcdTg4ZTRcdTUxOWJcdTdlZmZcdTgyNzJYWEwiLCJwdXJjaGFzZV91bml0X3ByaWNlIjoiMzUuMDAwIiwicHVyY2hhc2VfYW1vdW50IjozLCJpbnN0b2NrX3F0eSI6IjMiLCJiYWRfcXR5IjoiMCIsImluc3RvY2tfdXNlcl9uYW1lIjoiXHU5MGI5XHU1M2VjXHU2NThjIiwiaW5zdG9ja19kYXRlIjoiMjAyMi0xMC0xOSAxNzo0MDoyMSIsImZyZWlnaHQiOiIwLjAwMCIsImRpc2NvdW50IjoiMC4wMDAiLCJsYWJlbF9wZGYiOiIiLCJiYXJjb2RlX3BkZiI6IiIsInB1cmNoYXNlX3BhY2thZ2luZyI6IlBFXHU4ODhiXHU1MzA1XHU4OGM1Iiwibm9faW5zdG9ja19xdHkiOjB9LHsiaWQiOiIxMjUwNDk4NiIsInB1cmNoYXNlX251bWJlciI6IlBGQjExMjkwODIwIiwic2t1IjoiMTcxMTIyMDIxNjgyOSIsInByb2R1Y3RfaW1nX3VybCI6Imh0dHA6XC9cL3Byb2R1Y3QueWliYWluZXR3b3JrLmNvbVwvZW5kXC91cGxvYWRcL2ltYWdlXC9UaHVtYl9ub19sb2dvXC8xNzExMjIwMjE2ODI5XC8xNzExMjIwMjE2ODI5LTEuanBnIiwicHJvZHVjdF9uYW1lIjoiXHVmZjA4XHU2NzBkXHU4OGM1XHU3ZWM0XHVmZjA5XHU2NWY2XHU1YzFhXHU0ZjExXHU5NWYyXHU0ZmVlXHU4ZWFiXHU2NjNlXHU3NjI2XHU2YjI3XHU3ZjhlXHU1OTczXHU4OGM1XHU4ZmRlXHU0ZjUzXHU4OGU0XHU1MTliXHU3ZWZmXHU4MjcyWEwiLCJwdXJjaGFzZV91bml0X3ByaWNlIjoiMzUuMDAwIiwicHVyY2hhc2VfYW1vdW50IjozLCJpbnN0b2NrX3F0eSI6IjMiLCJiYWRfcXR5IjoiMCIsImluc3RvY2tfdXNlcl9uYW1lIjoiXHU3ZmMxXHU1OTI5XHU2Njc2IiwiaW5zdG9ja19kYXRlIjoiMjAyMi0xMC0xOSAxNzoyMDowNiIsImZyZWlnaHQiOiIwLjAwMCIsImRpc2NvdW50IjoiMC4wMDAiLCJsYWJlbF9wZGYiOiIiLCJiYXJjb2RlX3BkZiI6IiIsInB1cmNoYXNlX3BhY2thZ2luZyI6IlBFXHU4ODhiXHU1MzA1XHU4OGM1Iiwibm9faW5zdG9ja19xdHkiOjB9LHsiaWQiOiIxMjUwNDk4NyIsInB1cmNoYXNlX251bWJlciI6IlBGQjExMjkwODIwIiwic2t1IjoiMTcxMTIyMDIxNjgyOCIsInByb2R1Y3RfaW1nX3VybCI6Imh0dHA6XC9cL3Byb2R1Y3QueWliYWluZXR3b3JrLmNvbVwvZW5kXC91cGxvYWRcL2ltYWdlXC9UaHVtYl9ub19sb2dvXC8xNzExMjIwMjE2ODI4XC8xNzExMjIwMjE2ODI4LTEuanBnIiwicHJvZHVjdF9uYW1lIjoiXHVmZjA4XHU2NzBkXHU4OGM1XHU3ZWM0XHVmZjA5XHU2NWY2XHU1YzFhXHU0ZjExXHU5NWYyXHU0ZmVlXHU4ZWFiXHU2NjNlXHU3NjI2XHU2YjI3XHU3ZjhlXHU1OTczXHU4OGM1XHU4ZmRlXHU0ZjUzXHU4OGU0XHU1MTliXHU3ZWZmXHU4MjcyTCIsInB1cmNoYXNlX3VuaXRfcHJpY2UiOiIzNS4wMDAiLCJwdXJjaGFzZV9hbW91bnQiOjMsImluc3RvY2tfcXR5IjoiMyIsImJhZF9xdHkiOiIwIiwiaW5zdG9ja191c2VyX25hbWUiOiJcdTkwYjlcdTUzZWNcdTY1OGMiLCJpbnN0b2NrX2RhdGUiOiIyMDIyLTEwLTE5IDE3OjQxOjExIiwiZnJlaWdodCI6IjAuMDAwIiwiZGlzY291bnQiOiIwLjAwMCIsImxhYmVsX3BkZiI6IiIsImJhcmNvZGVfcGRmIjoiIiwicHVyY2hhc2VfcGFja2FnaW5nIjoiUEVcdTg4OGJcdTUzMDVcdTg4YzUiLCJub19pbnN0b2NrX3F0eSI6MH1dLCJ0b3RhbF9mcmVpZ2h0IjoiMC4wMDAiLCJ0b3RhbF9kaXNjb3VudCI6IjAuMDAwIn0=

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值