当前位置: 首页 > 后端技术 > PHP

LatticePHP-使用PHP生成Lattice

时间:2023-03-29 16:20:39 PHP

GettingStartedWhatisLatticePHP是一个用于PHP生成Lattice的LatticeGeneration软件包。由于嵌入式语言一般都需要位图生成,而PHP用得很少,所以自己开发了这个冷门软件包,希望对大家有所帮助。项目已经开源:Github地址环境PHP>=7.1安装使用composer安装composer需要zmxy/lattice或者去github仓库下载源文件,自己手动导入先createacanvasuseLattice\LatticePck\格子;$width=296;$height=128;$格子=新格子();$lattice->createBlankImage($width,$height);这样,我们创建一个296X128的画布,然后写$lattice->text('LatticePHP-使用PHP生成位图',[0,0]);效果如下绘制矩形useLattice\LatticePck\LatticeImg;LatticeImg::Rectangle($lattice,50,50,[50,50],0,1);效果下面的二维码使用了Lattice\LatticePck\LatticeImg;$order="http://weixin.qq.com/r/BRy0rI7EoNPfrcrP90kX";LatticeImg::QrCode($lattice,$order,[0,12,'center'],"public/",0);输出HTML看效果使用Lattice\LatticePck\LatticeOutput;$latticeOutput=(newLatticeOutput($lattice));echo$latticeOutput->getHTML();完成Demorerequire'vendor/autoload.php';useLattice\LatticePck\Lattice;useLattice\LatticePck\LatticeImg;useLattice\LatticePck\LatticeOutput;$width=296;$height=128;$lattice=newLattice();$latticeOutput=(newLatticeOutput($lattice));$lattice->createBlankImage($width,$height);//坐标$x=6;$y=6;$lattice->text('LatticePHP-使用PHP生成位图图片',[$x,$y,'top-center']);//LatticeImg::Rectangle($lattice,50,50,[50,50],0,1);$order="http://weixin.qq.com/r/BRy0rI7EoNPfrcrP90kX";LatticeImg::QrCode($lattice,$order,[0,12,'center'],"public/",0);echo$latticeOutput->getHTML();你正在做的代码文档画布在任何操作之前至少创建一个画布使用Lattice\LatticePck\Lattice;$width=296;$height=128;$lattice=newLattice();$lattice->createBlankImage($width,$height);/***创建一张空白图片*@paramint$width*@paramint$height*@paramint$colorfillcolor0.white1.black*/fontgetdotmatrixfont普通字体不能直接使用,因为添加锐角和美化要生成位图,必须使用位图字体。但是这方面的市场很小,所以做的人很少,只有少数会收取高额费用。这里提供了一个生成位图字体的工具。需要注意的是,如果源字体不是市售的,则不能商用此位图字体,请尊重版权。本文将使用免费的TimesNewRoman进行演示。点阵工具下载主要是设置字体大小和字体宽高(比如一般来说16号字体的宽高都是16)。格式化bin并保存。在代码中使用Lattice\LatticePck\Lattice;$fontDraw=Lattice::getFontDraw();$fontDraw->setFont('./font/st16_16',16,8);这里第一个参数是字体路径,第二个是中文宽度,第三个是英文宽度,因为英文比中文短一半,所以设置为8。(设置英文宽度主要是去掉多余的空格,否则会影响美观)/***设置字体大小*@paramstirng$fontFileName字体文件路径*@paramint$font_v中文宽度*@paramint$font_e英文宽度*@returnvoid*/ColorLatticePHP使用1黑色为0,白色为0(您可以考虑稍后添加其他颜色)。本质上,位图是01010101的字符串。颜色反转$lattice->colorReflection($textArr);/***颜色反转*@paramarray$textArrlatticearray*@returnvoid*/可以传入$lattice->image,因为这是整个画布,这样做会反转整个画布的颜色。坐标偏移所有绘制的图片都需要设置X、Y坐标和偏移命令,例如:[$x,$y,'top-center']除了top-center,还有top-right,top-left,bottom-你应该明白center,bottom-left,bottom-right,center-right,center,center-left的意思。Top-center表示Y轴在顶部,X轴在中间,依此类推。文本使用Lattice\LatticePck\Lattice;$格子=新格子();$lattice->text('LatticePHP-使用PHP生成点阵图',[$x,$y,'top-center']);/***写入文字*@paramstring$texttext*@paramarray$xyxy坐标和偏移说明*@paramint$color字体颜色1.black0.white*@paramint$spacing字间距*@paramint$font_bold1加粗0不加粗*@paramint$heightSpacing1去除上下空格0不去除*@paramint$getType1获取点阵数组*@returnarray*/参数$getType表示返回一个结构体组成的01数组。例如:图形点使用Lattice\LatticePck\LatticeImg;LatticeImg::point($lattice,[0,12]);/***创建点*@paramLattice$latticeLattice对象*??@paramarray$xyXY坐标偏移指令*@paramint$colorpointcolor1.black0.white默认为1*@returnvoid*/lineuseLattice\LatticePck\LatticeImg;LatticeImg::Line($lattice,[[1,1],[8,8]]);/***创建线*@paramLattice$latticeLatticeobject*@paramarray$xyXYcoordinates[[1,1],[8,8]]不支持偏移命令*@paramint$colorlinecolor1.黑色0.白色默认为1*@returnvoid*/rectangleuseLattice\LatticePck\LatticeImg;LatticeImg::Rectangle($lattice,$width,$height,[$x,$y]);/***创建矩形*@paramLattice$latticeLatticeobject*@paramint$widthwidth*@paramint$heightheight*@paramarray$xyXYcoordinateoffset*@paramint$fillColorfillcolor0.white1.Black*@paramint$borderSize边框大小*@paramint$borderColor边框颜色*@returnvoid*/insertacustomimageuseLattice\LatticePck\LatticeImg;$lattice->insertImg($lattice,$filePath,[$x,$y]);/***插入图像(仅黑白)*@paramLattice$latticelatticeclass*@paramstring$filePath图像文件路径*@paramarray$xy坐标偏移*@paramint$modemode0.Readonlywhite,therestareblack1.readonlyblack,restarewhite2.readbothblackandwhite,restaregray(用2表示),默认模式为1*@returnvoid*@throwsException*/Barcodebecause条码类型有很多,所以LatticePHP内置了CodeItNow生成条码,先生成图片,再插入一维码使用Lattice\LatticePck\LatticeImg;$order="112233";LatticeImg::BarCode($lattice,$order,[$x,$y,'top-center']);/***条码生成条码代码*@paramLattice$latticelatticeclass*@paramstring$textcontentstring*@paramarray$xyxycoordinates*@paramstring$barcodeType默认条码格式BarcodeType::Code128*@paramint$thickness高度和厚度默认18*@paramint$thick厚度比例默认为1*@paramint$fillColor条形码颜色默认为1*@parambool$delete是否自动删除生成的图片默认true*@paramstring$filePath文件pathdefaultspublic/images/(记得带/)在最后*@paramstring$fileName文件名默认时间戳+随机数*@returnvoid*/二维码useLattice\LatticePck\LatticeImg;$order="http://weixin.qq.com/r/BRy0rI7EoNPfrcrP90kX";LatticeImg::QrCode($lattice,$order,[$x,$y,'center']);/***条码生成二维码*@paramLattice$latticelatticeclass*@paramstring$textstring*@paramarray$xyxy坐标*@paramint$size大小默认为100*@parambool$delete是否自动删除删除生成的图片默认true*@paramstring$filePathDefaultpublic/images/(记得在最后包含/)*@paramstring$fileName生成的二维码文件名默认时间戳+随机数*@returnvoid*@throwsException*/Outputcanvas有时候我们需要预览画布,可以使用LatticeOutput工具类输出useLattice\LatticePck\Lattice;useLattice\LatticePck\LatticeOutput;$width=296;$height=128;$lattice=newLattice();$latticeOutput=(newLatticeOutput($lattice));$lattice->createBlankImage($width,$height);$order="http://weixin.qq.com/r/BRy0rI7EoNPfrcrP90kX";LatticeImg::QrCode($lattice,$order,[0,12,'中心']);输出HTMLEcho$latticeOutput->getHTML();输出数组可以通过

标签进行格式化输出echo'
';print_r($latticeOutput->getImageArray());输出十六进制将图片的01二进制转十六进制echo$latticeOutput->toHexa();/***将二进制数据转为十六进制字符串函数(并反转)*@paramarray$olbImage点阵数组默认为整个画布*@parambool$strrev是否??反转图像(图像上下颠倒)*@returnstring$_32hexa*/Other截取有时候你插入一个超过整个画布的图像不会报错,但肯定会影响你的程序。您需要使用此方法来拦截画布。$格子->拦截();这将拦截画布之外的元素。Stringwrap默认情况下,字符串超过了不会换行,可以用这个函数换行$address="我是一个很长的地址,会被换行哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦”;$addressArray=LatticeFont::strWrap($address,48,2);/***字符串换行分割*@paramstring$str字符串要换行分割*@paramint$length一行的长度,英文长度默认12*@paramint$hans_length一个汉字是多少个英文宽度等于(GBK编码为2,UTF-8编码为3)默认2*@paramstring$append末尾附加字符字符串默认为空*@returnarray字符串拆分后的数组*/ABABAB合并字符串使用Lattice\Utils\CString;CString::MergeBetween('AAAAA','BBBBB');/***以类似于ABABAB的模式方式组合两个字符串结果。*@paramstring$str1StringA*@paramstring$str2StringB*@returnstring合并后的字符串*/