0

0

在线编辑二维码并发送到热敏打印机打印

php中文网

php中文网

发布时间:2016-07-25 08:46:27

|

3204人浏览过

|

来源于php中文网

原创

在线编辑

使用到的 js 插件:

qrcodesvg

根据信息绘制二维码插件 colorPicker

用于颜色选择,js绑定事件更改二维码(svg)的颜色 canvg

用于将svg格式的二维码转换成 html5 的 canvas ,之后使用 toDataURL 方法生成二维码图片的 base64 编码数据 ,通过 Ajax 发送给后端 热敏打印机打印二维码

图片要转成BMP格式。转换图片到BMP的类:

  1. /**
  2. * class jpg, gif, png =========> BMP
  3. *
  4. * { Description :-
  5. * class that resize and convert jpg, gif or png to bmp
  6. * }
  7. * for more info contact with me (mahabub1212@yahoo.com)
  8. * you can modify or use or redistribute this class.
  9. */
  10. class ToBmp{
  11. // new image width
  12. var $new_width;
  13. // new image height
  14. var $new_height;
  15. // image resources
  16. var $image_resource;
  17. function image_info($source_image){
  18. $img_info = getimagesize($source_image);
  19. switch ($img_info['mime']){
  20. case "image/jpeg": { $this->image_resource = imagecreatefromjpeg ($source_image); break; }
  21. case "image/gif": { $this->image_resource = imagecreatefromgif ($source_image); break; }
  22. case "image/png": { $this->image_resource = imagecreatefrompng ($source_image); break; }
  23. default: {die("图片错误");}
  24. }
  25. }
  26. public function imagebmp($file_path = ''){
  27. if(!$this->image_resource) die("图片错误");
  28. $picture_width = imagesx($this->image_resource);
  29. $picture_height = imagesy($this->image_resource);
  30. if(!imageistruecolor($this->image_resource)){
  31. $tmp_img_reource = imagecreatetruecolor($picture_width,$picture_height);
  32. imagecopy($tmp_img_reource,$this->image_resource, 0, 0, 0, 0, $picture_width, $picture_height);
  33. imagedestroy($this->image_resource);
  34. $this->image_resource = $tmp_img_reource;
  35. }
  36. if((int) $this->new_width >0 && (int) $this->new_height > 0){
  37. $image_resized = imagecreatetruecolor($this->new_width, $this->new_height);
  38. imagecopyresampled($image_resized,$this->image_resource,0,0,0,0,$this->new_width,$this->new_height,$picture_width,$picture_height);
  39. imagedestroy($this->image_resource);
  40. $this->image_resource = $image_resized;
  41. }
  42. $result = '';
  43. $biBPLine = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width * 3 : $picture_width * 3;
  44. $biStride = ($biBPLine + 3) & ~3;
  45. $biSizeImage = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $biStride * $this->new_height : $biStride * $picture_height;
  46. $bfOffBits = 54;
  47. $bfSize = $bfOffBits + $biSizeImage;
  48. $result .= substr('BM', 0, 2);
  49. $result .= pack ('VvvV', $bfSize, 0, 0, $bfOffBits);
  50. $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);
  51. $numpad = $biStride - $biBPLine;
  52. $h = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_height : $picture_height;
  53. $w = ((int) $this->new_width >0 &&(int)$this->new_height > 0) ? $this->new_width : $picture_width;
  54. for ($y = $h - 1; $y >= 0; --$y) {
  55. for ($x = 0; $x $col = imagecolorat ($this->image_resource, $x, $y);
  56. $result .= substr(pack ('V', $col), 0, 3);
  57. }
  58. for ($i = 0; $i $result .= pack ('C', 0);
  59. }
  60. }
  61. if($file_path == ''){
  62. header("Content-type: image/bmp");
  63. echo $result;
  64. } else {
  65. $fp = fopen($file_path,"wb");
  66. fwrite($fp,$result);
  67. fclose($fp);
  68. //=============
  69. }
  70. return ;
  71. }
  72. }
复制代码

使用方法

  1. $ToBMP = new ToBmp();
  2. $ToBMP->image_info($path_to_img);
  3. $ToBMP->new_width = 255;
  4. $ToBMP->new_height = 255;
  5. $output_path = realpath(PATH.'test.bmp');
  6. $ToBMP->imagebmp($output_path);
复制代码

BMP格式根据文件头信息不同数据组成结构也不同

在线编辑二维码并发送到热敏打印机打印

我的是24位BMP,去除头文件54个字节后,每三个字节(RGB)表示一个点。

合并RGB(三字节合并为一字节)后二值化像素点(得到 1bit ,即该点是黑或白。之所以要二值化是因为我的热敏打印机打印黑白不打印彩色)。

每 8bit 拼接成1字节后用 '\xx' 的16进制形式表示。数据根据打印机给的接口发送给打印机就可以打印了。

Cutout.Pro抠图
Cutout.Pro抠图

AI批量抠图去背景

下载
特别注意:

1.unpack的使用

  1. $content = file_get_contents($path_to_img);
  2. $content = unpack("H*", $content); //获得图片数据的16进制表示
复制代码

2.

‘\xFE’ 表示的是4个字符

“\xFE” 表示的是1个字符(即该16进制数字对应的ascii码字符)

单引号的可使用 chr('0xFE') 进行转换

打印机打印


打印机修复助手
打印机修复助手

打印机修复助手拥有数百万打印机驱动资源库,支持1000+品牌,可自动识别打印机品牌和型号,快速匹配下载对应的驱动程序,自动完成驱动修复。有需要的小伙伴快来保存下载使用吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

66

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

71

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号