如何快速打印光栅图像ESC/POS



我用这个代码在热敏打印机上打印图像;GS V 0〃;但是已经过时了。如何将此功能转换为使用";ESC*";命令我在以下链接中使用该代码,但它使用";GS V 0〃;。ESC-POS SWIFT代码

我们的想法是将图像划分为最多256(最大宽度(x 8(高度(像素的块,然后为每个块生成ESC *ESC J命令。

您有2D阵列的点作为输入打印。您可以按照自己喜欢的方式从图像中生成它。

以下代码适用于Epson U220

let dots: [[Int]] = [...]
let width = dots[0].count
let height = dots.count
// Calculating how many blocks are there
let horizontalBlocks = width / 256 + (width % 256 > 0 ? 1 : 0)
let verticalBlocks = height / 8 + (height % 8 > 0 ? 1 : 0)
var data = Data()
for verticalBlock in 0 ..< verticalBlocks {
for horizontalBlock in 0 ..< horizontalBlocks {
let currentBlockWidth = min(width - 255 * horizontalBlock, 255)
let escStar: [UInt8] = [0x1B, 0x2A, 0x00, UInt8(currentBlockWidth), 0x00]
data.append(contentsOf: escStar)
let xOffset = horizontalBlock * 256
let yOffset = verticalBlock * 8
for x in 0 ..< currentBlockWidth {
var column: UInt8 = 0
for y in 0 ..< 8 {
let dot = dots[yOffset + y][xOffset + x]
column |= dot << (7 - y)
}
data.append(column)
}
}
// Command to print the buffer
let escJ: [UInt8] = [0x1B, 0x4A, 0x10]
data.append(contentsOf: escJ)
}

最新更新