摘要:在线编辑使用到的插件根据信息绘制二维码插件用于颜色选择,绑定事件更改二维码的颜色用于将格式的二维码转换成的,之后使用方法生成二维码图片的编码数据,通过发送给后端热敏打印机打印二维码图片要转成格式。
在线编辑
使用到的 js 插件:
qrcodesvg
根据信息绘制二维码插件
colorPicker
用于颜色选择,js绑定事件更改二维码(svg)的颜色
canvg
用于将svg格式的二维码转换成 html5 的 canvas ,之后使用 toDataURL 方法生成二维码图片的 base64 编码数据 ,通过 Ajax 发送给后端
热敏打印机打印二维码图片要转成BMP格式。转换图片到BMP的类:
BMP * * { Description :- * class that resize and convert jpg, gif or png to bmp * } * for more info contact with me (mahabub1212@yahoo.com) * you can modify or use or redistribute this class. */ class ToBmp{ // new image width var $new_width; // new image height var $new_height; // image resources var $image_resource; function image_info($source_image){ $img_info = getimagesize($source_image); switch ($img_info["mime"]){ case "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); break; } case "image/gif": { $this->image_resource = imagecreatefromgif ($source_image); break; } case "image/png": { $this->image_resource = imagecreatefrompng ($source_image); break; } default: {die("图片错误");} } } public function imagebmp($file_path = ""){ if(!$this->image_resource) die("图片错误"); $picture_width = imagesx($this->image_resource); $picture_height = imagesy($this->image_resource); if(!imageistruecolor($this->image_resource)){ $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height); imagecopy($tmp_img_reource,$this->image_resource, 0, 0, 0, 0, $picture_width, $picture_height); imagedestroy($this->image_resource); $this->image_resource = $tmp_img_reource; } if((int) $this->new_width >0 && (int) $this->new_height > 0){ $image_resized = imagecreatetruecolor($this->new_width, $this->new_height); imagecopyresampled($image_resized,$this->image_resource,0,0,0,0,$this->new_width,$this->new_height,$picture_width,$picture_height); imagedestroy($this->image_resource); $this->image_resource = $image_resized; } $result = ""; $biBPLine = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width * 3 : $picture_width * 3; $biStride = ($biBPLine + 3) & ~3; $biSizeImage = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $biStride * $this->new_height : $biStride * $picture_height; $bfOffBits = 54; $bfSize = $bfOffBits + $biSizeImage; $result .= substr("BM", 0, 2); $result .= pack ("VvvV", $bfSize, 0, 0, $bfOffBits); $result .= ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? pack ("VVVvvVVVVVV", 40, $this->new_width, $this->new_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0) : pack ("VVVvvVVVVVV", 40, $picture_width, $picture_height, 1, 24, 0, $biSizeImage, 0, 0, 0, 0); $numpad = $biStride - $biBPLine; $h = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_height : $picture_height; $w = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width : $picture_width; for ($y = $h - 1; $y >= 0; --$y) { for ($x = 0; $x < $w; ++$x) { $col = imagecolorat ($this->image_resource, $x, $y); $result .= substr(pack ("V", $col), 0, 3); } for ($i = 0; $i < $numpad; ++$i) { $result .= pack ("C", 0); } } if($file_path == ""){ header("Content-type: image/bmp"); echo $result; } else { $fp = fopen($file_path,"wb"); fwrite($fp,$result); fclose($fp); //============= } return ; } }
使用方法
$ToBMP = new ToBmp(); $ToBMP->image_info($path_to_img); $ToBMP->new_width = 255; $ToBMP->new_height = 255; $output_path = realpath(PATH."test.bmp"); $ToBMP->imagebmp($output_path);
BMP格式根据文件头信息不同数据组成结构也不同
我的是24位BMP,去除头文件54个字节后,每三个字节(RGB)表示一个点。
合并RGB(三字节合并为一字节)后二值化像素点(得到 1bit ,即该点是黑或白。之所以要二值化是因为我的热敏打印机打印黑白不打印彩色)。
每 8bit 拼接成1字节后用 "xx" 的16进制形式表示。数据根据打印机给的接口发送给打印机就可以打印了。
特别注意:1.unpack的使用
$content = file_get_contents($path_to_img); $content = unpack("H*", $content); //获得图片数据的16进制表示
2.
‘xFE’ 表示的是4个字符
“xFE” 表示的是1个字符(即该16进制数字对应的ascii码字符)
单引号的可使用 chr("0xFE") 进行转换
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/20602.html
摘要:将信号拉高激活打印元件,接着使步进电机转动两步完成一点行的打印。步进电机的步长为,一点行的宽度为,因此打印出一点行的数据需要步进电机转两步。由于步进电机和热敏头不能长时间连续工作,因此打印份数不宜设置过多,否则容易烧坏电机和热敏头。 ...
摘要:和要先打开,再在目录下执行,和在目录下执行注启动,后台代码更改才会实时响应有问题可发邮箱,有看到有空会回 项目完整代码 github地址:singleStore 效果图: showImg(https://segmentfault.com/img/bVbgFMz?w=640&h=1136);showImg(https://segmentfault.com/img/bVbgFMA?w=64...
摘要:在网上搜了一些方法,做法是获取二维码元素赋值给整个的,然后再调用浏览器的打印功能,缺点是会改变整个页面,需要刷新恢复。但问题还不止于此,由于二维码是在线生成的,获取到的二维码元素没有实际内容,所以这个方法不可行。 二维码由jquery.qrcode.min.js将json字符串转换而成,细节不再赘述,效果如图:showImg(https://segmentfault.com/img/b...
摘要:配置需要一个来用于与虚拟机进行连接,默认假定这个密钥会被放在文件夹下。三使用管理项目版本使用可以对我们的代码进行版本控制,如果万一误删了代码想回到之前的情况,则可以通过版本控制进行回滚。配置选项代表对进行全局设置。 laravel学习笔记,重新梳理知识点。 一、环境配置 1、编辑器选用 Atom PHPStorm SublimeText Atom 是由 GitHub 官方在 201...
摘要:并发和并行并发和并行是两个非常容易被混淆的概念。并发说的是在一个时间段内,多件事情在这个时间段内交替执行。并行说的是多件事情在同一个时刻同事发生。由于线程池是一个线程,得不到执行,而被饿死,最终导致了程序死锁的现象。 同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为...
阅读 1763·2023-04-26 00:47
阅读 1520·2021-11-11 16:55
阅读 2498·2021-09-27 14:04
阅读 3529·2021-09-22 15:58
阅读 3521·2021-07-26 23:38
阅读 2079·2019-08-30 13:47
阅读 1933·2019-08-30 13:15
阅读 1111·2019-08-29 17:09