util.js 2.1 KB

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