八月闲趣之报文

news/2024/10/5 3:23:54

无意间得到一段报文,起了好奇心。检索得知,这段报文属于条码打印机的控制指令ZPL,特点为以^~开头,(此类指令还有ZPL、EPL、CPCL,TSPL,ESC/POS,等等)。

按ZPL手册,逐项对比,指定坐标放置对象,唯~DGR(Download Graphics),涉及一个Z64特性。

举例如下。

~DGR:LOGO.GRF,19600,70,:Z64:eJzt17sJACAUA8C3iftv5wbaWgmCf+7aQOokAgBYI5WurS0AAPzBxgQAAN7n2QAAANxn7GW1UZ7eAgAAAAAAAACcUQHgOgng:3EC5

Z64

Z64,格式为:id:encoded_data:crc

先 CRC:检查是否为 3EC5.

再 encoded_data:先base64,再解压。

The second encoding, known as Z64, first compresses the data using the LZ77 algorithm to reduce
its size. (This algorithm is used by the PKWARE® compression program PKZIP™ and is integral to
the PNG graphics format.) The compressed data is then encoded using the MIME Base64 scheme
as described above.

图像

根据ZPL手册,~DGd:o.x,t,w,data,及data解释 (Each character represents a horizontal nibble of four dots),可知,这里存在一个图像,总大小为19600 bytes,每行70 bytes,即,560×280。

Bitmap

将像素数据放入Bitmap中,可以得到图像。

以 C# 处理,Bitmap 格式为 PixelFormat.Format1bppIndexed ,选择 Color Palette,逐行复制,注意 Stride 需按 4 字节对齐。

图像文件之 BMP

此处的 20160,即 280×72,每行72字节(70字节,以4对齐)。

图像文件之 PNG

此处 IDAT 解压后,得到 19880,即 280×71,每行71字节(70字节,额外字节 filter type byte)。

参考

  • Programming Guide For ZPL II, https://support.zebra.com/cpws/docs/zpl/zpl_manual.pdf
  • Types of Bitmaps - Windows , https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/advanced/types-of-bitmaps
  • PNG Specification (Third Edition) - W3C, https://www.w3.org/TR/png-3/

更多

  1. ZLib Decompress Online - Code Beautify (需要注意 String, Blob 带来的二进制文件问题) 
  2. Hex to Base64 - Guru
  3. github.com/metafloor/zpl-image (可预览)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Vue 学习笔记(1):从传统 JavaScript 到 Vue 开发

前言 笔者在学习 Vue 等前端框架前只接触过基本的前端三件套,即 HTML、CSS、JavaScript(原生),在这之前有尝试接触过一些 Vue 教程,了解一些语法,但并不知道各类方法之间到底是什么关系。 近些日子硬着头皮写了几个 Vue 项目,有所心得。好歹是把 MVVM 和工程化之类的概念…

Codeforces Round 969 (Div. 2)题解A-E

Codeforces Round 969 (Div. 2) 神奇的一场,感觉整体不是很难,狠狠的上了一波大分。这场也算是这个暑假的最后一场了整个暑假不是在渡劫就是在渡劫的路上,中间那个紫名还是回滚给加上的,神奇的比赛,每次都能很快打到渡劫的分数,然后不出意料的渡劫失败。不懂 再接再励吧,…

关于Linux内核自带GPIO LED控制

正点原子Linux开发板IMX6ULL上的呼吸灯如何停止? 学习到驱动开发Linux系统自带的LED驱动控制的时候,才知道,原来该呼吸灯经过设备树配置好之后,直接由Linux内核程序配置为呼吸灯(前提是在内核中配置过,可以使用make menuconfig来去配置内核)。 所以在之前写led灯的驱动的…

038.CI4框架CodeIgniter,使用Jwt生成token

01、在composer.json中增加一行调用jwt的代码:{"name": "codeigniter4/appstarter","description": "CodeIgniter4 starter app","license": "MIT","type": "project","homepage"…

OPPO手机备份

通过「数据备份与迁移」备份的资料是存储在手机存储中的,当对手机进行恢复出厂设置或刷机时会清除备份数据,此时,就需要我们在操作前将备份文件拷贝到外置存储或电脑设备中。在「数据备份与迁移」中将资料备份好后,用数据线将手机连接至电脑,根据提示在手机屏幕上选择「传…

财务知识-做账顺序

财务知识-做账顺序

Ceph Reef(18.2.X)之Swift操作对象存储网关

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.Swift概述1.Switft API接口概述2.swift实现的基本逻辑二.swift命令行配置实战1.创建swift的实践用户2.基于现有用户创建子用户3.基于子用户生成secret_key信息4.安装swift命令5.配置swift的环境变量三…

【靶场搭建】搭建Metasploitable2漏洞靶场

原创 Kali与编程NEW有学员问我,如何合法进行渗透测试,总不能拿真实的网站来练手,一来成功率不高,二来容易被请喝茶。 其实很简单,自己搭建实验靶场,尽情把完,不犯法! Metasploitable2 是基于 Ubuntu 操作系统构建的,它故意配置了大量已知的安全漏洞,这次我就教会你如…