八月閒趣之報文

UPeRVv發表於2024-08-31

無意間得到一段報文,起了好奇心。檢索得知,這段報文屬於條碼印表機的控制指令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 (可預覽)

相關文章