Browse Source

feature:增加c语言的md5计算方法

zeng.chen 6 months ago
parent
commit
3d0f21fe1b
2 changed files with 487 additions and 121 deletions
  1. 15 121
      pages/piano/cropper/cropper.js
  2. 472 0
      utils/js_md5.js

+ 15 - 121
pages/piano/cropper/cropper.js

@@ -3,7 +3,7 @@
 const { BtCmd } = require('../../../devices/bluetooth/bt_cmd');
 import EventManager from '../../../utils/event_bus'
 import { EnumCmdEvent, CmdEvent } from '../../../devices/cmd_key_event';
-import route_util from '../../../utils/route_util';
+import js_md5 from '../../../utils/js_md5';
 const { BtHelper } = require('../../../devices/bt_helper');
 
 Page({
@@ -51,88 +51,7 @@ Page({
       })
     }
   },
-  convertImageDataToRGB565(imageData, width, height) {
-    // 创建一个 Uint16Array 来存储 RGB565 数据
-    const rgb565Data = new Uint16Array(width * height);
-
-    // 将 RGBA 数据转换为 RGB565 数据
-    for (let i = 0; i < imageData.length; i += 4) {
-      const r = imageData[i];
-      const g = imageData[i + 1];
-      const b = imageData[i + 2];
-      // const a = imageData[i + 3]; // 透明度,如果需要可以使用
-
-      // 将 RGB 转换为 RGB565
-      const rgb565 = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
-      rgb565Data[i / 4] = rgb565;
-    }
-    return rgb565Data
-
-  },
-
-  generateLVGLBinFile(rgb565Data, width, height) {
-    const header = new ArrayBuffer(32);
-    const headerView = new DataView(header);
-    // 十六进制字符串
-    // const hexString = "04 80 07 3c ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff";
-    const hexString = "04 80 07 3c";
-
-    // 将十六进制字符串转换为字节数组
-    const bytes = hexString.split(' ').map(byte => parseInt(byte, 10));
-    console.log(bytes);
-    // 将字节数组写入 headerView
-    bytes.forEach((byte, index) => {
-      headerView[index] = byte
-    });
-
-
-    // 创建文件数据
-    const fileData = new Uint8Array(header.byteLength + rgb565Data.byteLength);
-    console.log("fileData:", fileData.length, fileData.byteLength);
-    fileData.set(new Uint8Array(header), 0); // 添加头部信息
-    fileData.set(new Uint8Array(rgb565Data.buffer), header.byteLength); // 添加 RGB565 数据
-    return fileData;
-  },
-  // 转换 RGBA 数据为 RGB565
-  imageDataToRGB565(rgbaData, width, height) {
-    const pixelCount = width * height;
-    // 十六进制字符串
-    const hexString = "04 80 07 3c";
 
-    // 将十六进制字符串转换为字节数组
-    // const bytes = hexString.split(' ').map(byte => parseInt(byte, 10));
-    const bytes = ["04", "80", "07", "3c"];
-
-    console.log(bytes);
-
-    const outputData = new Uint8Array(pixelCount * 2 + bytes.length); // 文件头 + 每像素 4 字节 (RGB888 + Alpha)
-
-    // 将字节数组写入 headerView
-    bytes.forEach((byte, index) => {
-      outputData[index] = parseInt(byte, 16)
-    });
-
-    // 写入像素数据
-    let offset = bytes.length;
-    for (let i = 0; i < pixelCount; i++) {
-      const r = rgbaData[i * 4];
-      const g = rgbaData[i * 4 + 1];
-      const b = rgbaData[i * 4 + 2];
-
-      // 转换为 RGB565 格式
-      const r5 = (r >> 3) & 0x1F;
-      const g6 = (g >> 2) & 0x3F;
-      const b5 = (b >> 3) & 0x1F;
-      const rgb565 = (r5 << 11) | (g6 << 5) | b5;
-
-      // 写入 RGB565 (小端序)
-      outputData[offset++] = rgb565 & 0xFF; // 低字节
-      outputData[offset++] = (rgb565 >> 8) & 0xFF; // 高字节
-    }
-
-    console.log('最终偏移:', offset)
-    return outputData;
-  },
   cropperload(e) {
     console.log('cropper加载完成');
   },
@@ -201,6 +120,10 @@ Page({
               console.log("加载文件成功:", obj.data.byteLength, obj.data.length, obj.getFileInfo)
 
               let binData = obj.data;
+              let myMd5 = _this.getImgMde5(binData)
+              wx.setClipboardData({
+                data: myMd5,
+              })
               _this.sliceDataIntoChunks(binData, 128);
 
               console.log("加载文件成功2:", binData.byteLength, binData.length)
@@ -209,9 +132,9 @@ Page({
               wx.showLoading({
                 title: '开始传输壁纸',
               })
-              _this.data._imgMD5 = res.digest
+              _this.data._imgMD5 = myMd5
               _this.data._imgIndex = 0
-              console.log("md5 2:", _this.data._imgMD5)
+              console.log("md5 2:", res.digest)
               _this.startImage()
             }, fail: (err) => {
               console.error('getFileInfo失败:', err);
@@ -228,44 +151,7 @@ Page({
     // _this.downloadAndSaveFile("https://music-play.oss-cn-shenzhen.aliyuncs.com/backOss/file/8770a6097d9940b59032d099b2fdde3b.bin");
 
   },
-  // 下载网络文件并保存到本地
-  downloadAndSaveFile(url) {
-    const fs = wx.getFileSystemManager();
-    let _this = this;
-    wx.downloadFile({
-      url: url, // 网络文件的 URL
-      success: (res) => {
-        if (res.statusCode === 200) {
-          // 下载成功,res.tempFilePath 是临时文件路径
-          const tempFilePath = res.tempFilePath;
-          console.log("下载文件:", res)
-          fs.readFile({
-            filePath: tempFilePath,
-            // encoding: '', // 不指定编码以获取原始二进制数据
-            success: (res) => {
-              console.log("下载文件成功:", res.data)
-              let rgbData = res.data
-              _this.data._imageBufferLength = rgbData.byteLength
 
-              wx.hideLoading();
-              wx.showLoading({
-                title: '开始传输壁纸',
-              })
-              _this.startImage(rgbData);
-            },
-            fail: (err) => {
-              console.error('读取 .bin 文件失败:', err);
-            },
-          });
-        } else {
-          console.error('下载文件失败:', res.statusCode);
-        }
-      },
-      fail: (err) => {
-        console.error('下载文件失败:', err);
-      },
-    });
-  },
   checkAndRequestImagePermission: function () {
     const _this = this;
 
@@ -345,6 +231,14 @@ Page({
     // }
     this.data._chunks = chunks;
   },
+  getImgMde5(buffer) {
+    let md5ctx = js_md5.md5_init();
+    js_md5.md5_update(md5ctx, buffer, buffer.byteLength ?? buffer.length);
+    let result = js_md5.md5_final(md5ctx);
+    let md5 = js_md5.md5_encode_hex(result, 16);
+    console.log("result:", md5);
+    return md5
+  },
   sendImageMD5() {
     let lengthCode = this.data._chunks.length
     console.log("发送壁纸MD5 1:", lengthCode, this.data._imgMD5)

File diff suppressed because it is too large
+ 472 - 0
utils/js_md5.js