yirongjin
2025-07-23 f4c6ac315102c3a64da3a8f2d12b2d9042b5effd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
const formatTime = date => {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    const second = date.getSeconds()
 
    return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
 
const formatNumber = n => {
    n = n.toString()
    return n[1] ? n : '0' + n
}
 
 
//4合1 
function convert4to1(res) {
    let arr = [];
    for (let i = 0; i < res.length; i++) {
        if (i % 4 == 0) {
            let rule = 0.29900 * res[i] + 0.58700 * res[i + 1] + 0.11400 * res[i + 2];
            if (rule > 200) {
                res[i] = 0;
            } else {
                res[i] = 1;
            }
            arr.push(res[i]);
        }
    }
    return arr;
}
 
//8合1
function convert8to1(arr) {
    let data = [];
    for (let k = 0; k < arr.length; k += 8) {
        let temp = arr[k] * 128 + arr[k + 1] * 64 + arr[k + 2] * 32 + arr[k + 3] * 16 + arr[k + 4] * 8 + arr[k + 5] * 4 +
            arr[k + 6] * 2 + arr[k + 7] * 1
        data.push(temp);
    }
    return data;
}
 
//我的图片宽度是240,那么拼接的指令就是[29, 118, 48, 0, 30, 0, 240, 0]
//我的图片宽度是160,那么拼接的指令就是[29, 118, 48, 0, 20, 0, 160, 0]
//补充一点,打印非二维码的图片,宽度一定要是24的倍数,不然打印也会出现乱码
function toArrayBuffer(res) {
    let arr = convert4to1(res.data);
    let data = convert8to1(arr);
    let cmds = [].concat([27, 97, 1], [29, 118, 48, 0, 30, 0, 240, 0], data, [27, 74, 3], [27, 64]);
    return new Uint8Array(cmds).buffer;
}
 
function zip_image(res) {
    let arr = convert4to1(res.data);
    let data = convert8to1(arr);
    return data;
}
 
module.exports = {
    formatTime: formatTime,
    toArrayBuffer: toArrayBuffer,
    zip_image: zip_image,
}