在图像 (PNG) 中转换 ZPL (Base64)
Convert ZPL (Base64) in image (PNG)
我需要将 ZPL 文件转换为图像。我已经使用了标签网络服务,但我需要一个对外部应用程序依赖性较低的解决方案。
我正在按以下方式进行。我得到了 base64 编码部分:eJzs281u4zYQAGAKLMCewmsPhfgaPWipPtIeVUC1GPiQYx6hr9FDgdL ....其余代码(Z64 编码),这将是 ZPL 文件的图像,我正在尝试将其转换为 png 图像。我尝试使用下面的代码,但出现此错误:错误:找不到缓冲区
的 MIME
const fs = require('fs');
var base64Img = require('base64-img');
var Jimp = require('jimp');
try{
var data = fs.readFileSync('./test.zpl', 'base64')
} catch (err) {
console.log(err);
}
var buffer = Buffer.from(data, 'base64');
Jimp.read(buffer).then(res => {
return res
.quality(50)
.rotate(90)
.resize(250,250)
.writeAsync('out.png');
}).catch(err => {
console.log(err);
});
我也试过用这个方法,生成的是png图片,但是图片查看器无法处理。
const fs = require('fs');
var base64Img = require('base64-img');
try{
var data = fs.readFileSync('./test.zpl', 'base64')
} catch (err) {
console.log(err);
}
var buffer = Buffer.from(data, 'base64');
fs.writeFileSync("./out.png", buffer);
感恩。
由于您正在处理 GRF(这是一个 header-less 1 位位图),您将需要一个 png-writing 库来创建图像 - pngjs 是通常的拉入方式:
const fs = require('fs'),
zlib = require('zlib'),
PNG = require('pngjs').PNG;
let match = /(\d+),(\d+),(\d+),:Z64:([^:]+):/
.exec(fs.readFileSync('test.zpl', 'ascii'));
let size = +match[1];
let rowl = +match[3];
let grf = zlib.inflateSync(Buffer.from(match[4], 'base64'));
// These values are from the ^GF command
const png = new PNG({
width: rowl * 8,
height: size / rowl,
filterType: -1
});
let offs = 0;
let data = png.data;
for (let i = 0; i < size; i++) {
let byte = grf[i];
for (let bit = 0x80; bit; bit = bit >>> 1) {
let bw = (bit & byte) ? 0 : 255; // black (0) or white (255)
data[offs++] = bw;
data[offs++] = bw;
data[offs++] = bw;
data[offs++] = 255; // fully opaque
}
}
png.pack().pipe(fs.createWriteStream('test.png'));
根据记忆和一些现有代码的剪切和粘贴,因此可能有错字...
我需要将 ZPL 文件转换为图像。我已经使用了标签网络服务,但我需要一个对外部应用程序依赖性较低的解决方案。
我正在按以下方式进行。我得到了 base64 编码部分:eJzs281u4zYQAGAKLMCewmsPhfgaPWipPtIeVUC1GPiQYx6hr9FDgdL ....其余代码(Z64 编码),这将是 ZPL 文件的图像,我正在尝试将其转换为 png 图像。我尝试使用下面的代码,但出现此错误:错误:找不到缓冲区
的 MIMEconst fs = require('fs');
var base64Img = require('base64-img');
var Jimp = require('jimp');
try{
var data = fs.readFileSync('./test.zpl', 'base64')
} catch (err) {
console.log(err);
}
var buffer = Buffer.from(data, 'base64');
Jimp.read(buffer).then(res => {
return res
.quality(50)
.rotate(90)
.resize(250,250)
.writeAsync('out.png');
}).catch(err => {
console.log(err);
});
我也试过用这个方法,生成的是png图片,但是图片查看器无法处理。
const fs = require('fs');
var base64Img = require('base64-img');
try{
var data = fs.readFileSync('./test.zpl', 'base64')
} catch (err) {
console.log(err);
}
var buffer = Buffer.from(data, 'base64');
fs.writeFileSync("./out.png", buffer);
感恩。
由于您正在处理 GRF(这是一个 header-less 1 位位图),您将需要一个 png-writing 库来创建图像 - pngjs 是通常的拉入方式:
const fs = require('fs'),
zlib = require('zlib'),
PNG = require('pngjs').PNG;
let match = /(\d+),(\d+),(\d+),:Z64:([^:]+):/
.exec(fs.readFileSync('test.zpl', 'ascii'));
let size = +match[1];
let rowl = +match[3];
let grf = zlib.inflateSync(Buffer.from(match[4], 'base64'));
// These values are from the ^GF command
const png = new PNG({
width: rowl * 8,
height: size / rowl,
filterType: -1
});
let offs = 0;
let data = png.data;
for (let i = 0; i < size; i++) {
let byte = grf[i];
for (let bit = 0x80; bit; bit = bit >>> 1) {
let bw = (bit & byte) ? 0 : 255; // black (0) or white (255)
data[offs++] = bw;
data[offs++] = bw;
data[offs++] = bw;
data[offs++] = 255; // fully opaque
}
}
png.pack().pipe(fs.createWriteStream('test.png'));
根据记忆和一些现有代码的剪切和粘贴,因此可能有错字...