八月闲趣之报文

无意间得到一段报文,起了好奇心。检索得知,这段报文属于条码打印机的控制指令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 (可预览)
posted @ 2024-08-31 04:38  UPeRVv  阅读(8)  评论(0编辑  收藏  举报