【php】GD库生成属性标签图

  • 标签图生成方法
php 复制代码
   public static function createLabelImage($labelList,$fileName=""){

        $initImageFun = function($width,$height){
            $image = imagecreatetruecolor($width, $height);
            $backgroundColor = imagecolorallocate($image, 255, 255, 255);
            imagefilledrectangle($image, 0, 0, $width, $height, $backgroundColor);
            return $image;
        };

        //是否包含中文字符
        $containsChineseFun = function ($str) {
            if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $str)) {
                return true;
            } else {
                return false;
            }
        };
		//属性描述填充 超出长度自动换行
        $decFillImageFun = function($image,$textDesc2,&$yHeight,$textColor,$maxlen=15,$xDecStart=185,$fontSize=25){
            $fontDec = "./static/admin/font/msyh.ttc";
            $length2 = mb_strlen($textDesc2, 'UTF-8');
            $lenNum = ceil($length2/$maxlen);
            for($i=0;$i<$lenNum;$i++){
                $yHeightLen = $yHeight+50*$i;
                imagettftext($image, $fontSize, 0, $xDecStart, $yHeightLen, $textColor, $fontDec, mb_substr($textDesc2,$i*$maxlen,$maxlen));
                if($i == $lenNum-1){
                    $yHeight = $yHeightLen;
                }
            }
        };

        //计算画布总高度
        $calculateHeightFun = function($labelList,$yHeightStart,$lengHeight){
            $totalHeight = $yHeightStart;
            foreach ($labelList as $row){
                $length2 = mb_strlen($row['desc'], 'UTF-8');
                $maxlen = 15;
                $lenNum = ceil($length2/$maxlen);
                $totalHeight += ($lenNum-1)*50 + $lengHeight;
            }
            return $totalHeight;
        };
		
        $fontSize = 25;
        $xTitleStart = 10;
        $lenHeight = 80;
        $yHeightStart = 50;
        $width = 700;
        $totalHeight = $calculateHeightFun($labelList,$yHeightStart,$lenHeight);
        $image = $initImageFun($width,$totalHeight);//创建画布handle
        $textColor = imagecolorallocate($image, 0, 0, 0);
        //字体文件 微软雅黑加粗
        $fontTitle = "./static/admin/font/msyhbd.ttc";

        $yHeight = $yHeightStart;
        foreach ($labelList as $row){
            $textTitle = $row['title'].":";
            imagettftext($image, $fontSize, 0, $xTitleStart, $yHeight, $textColor, $fontTitle, $textTitle);

            if($containsChineseFun($row['desc'])){
                $decFillImageFun($image,$row['desc'],$yHeight,$textColor);
            }else{
                $decFillImageFun($image,$row['desc'],$yHeight,$textColor,30);
            }
            $yHeight = $yHeight+$lenHeight;
        }
		
		//标签保存目录
        $imagePath = './static/storage/goods_label/';
        if (!file_exists($imagePath)) {
            mkdir($imagePath, 0777, true);
        }
        if(empty($fileName)){
            $fileName = time().'_'.rand(1000,9999);
        }
        $imageFullName = $imagePath.$fileName.'.jpg';
        imagepng($image, $imageFullName);

        imagedestroy($image);
        unset($yHeight);

        return $imageFullName;
    }
  • 调用示例
php 复制代码
		$goodsLabel = [];
        $goodsLabel[] = [
            "title" => "IMEI/SN",
            "desc"  => $info['is_rand_ship']?"随机发货":$info['barcode']
        ];
        $goodsLabel[] = [
            "title" => "质检报告",
            "desc"  => $checkList["verdict"]
        ];
        $goodsLabel[] = [
            "title" => "包装清单",
            "desc"  => $checkList["packlist"]
        ];

        $fileName = $info['barcode'] ? $info['barcode'] : $info['goods_id'];
        \app\Common::createLabelImage($goodsLabel,$fileName);
  • 标签图片
相关推荐
niucloud-admin6 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
ESDWAN6 小时前
企业网络监控应该监测哪些目标?网关、网络节点还是业务系统?
服务器·网络·php
呆呆虫127 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
中科三方9 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
云边云科技_云网融合11 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
李纲明14 小时前
WordPress 媒体库上传图片失败:先核 PHP 体积与目录权限,再查安全插件与对象存储
php·上传·wordpress·媒体库·devdiy
海域云SeaArea_14 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
niucloud-admin15 小时前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
honsor17 小时前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
开源推荐官17 小时前
多门店 O2O 商城选型复盘:从开发视角对比主流开源系统
java·架构·开源·php