B2B网络软件

标题: AIWROK软件的Base64工具集 [打印本页]

作者: YYPOST群发软件    时间: 1 小时前
标题: AIWROK软件的Base64工具集

AIWROK软件的Base64工具集


AIWROK软件的Base64工具集 B2B网络软件

AIWROK软件的Base64工具集 B2B网络软件

AIWROK软件的Base64工具集 B2B网络软件


  1. /**
  2. * AIWROK Base64 工具集
  3. * 集合所有 Base64 相关用法,含完整日志输出和案例演示
  4. */

  5. // 导入必要的 Java 类
  6. importClass(android.util.Base64);
  7. importClass(java.io.FileInputStream);
  8. importClass(java.io.FileOutputStream);
  9. importClass(java.io.File);

  10. // ======================== 工具函数 ========================

  11. /**
  12. * 倒计时(秒)
  13. * @param {number} seconds - 倒计时秒数
  14. */
  15. function countdown(seconds) {
  16.     for (var i = seconds; i >= 1; i--) {
  17.         printl("  ⏳ " + i + " 秒后开始下一个演示...");
  18.         sleep.millisecond(1000);
  19.     }
  20.     printl("  ▶ 开始!");
  21. }

  22. /**
  23. * 分隔线
  24. */
  25. function divider(title) {
  26.     printl("");
  27.     printl("================================================");
  28.     printl("  " + title);
  29.     printl("================================================");
  30. }

  31. // ======================== 1. 图片对象转 Base64 ========================

  32. /**
  33. * AIWROK Image 对象转 Base64
  34. * @param {object} img - AIWROK 的 Image 对象
  35. * @returns {string} Base64 字符串
  36. */
  37. function imageToBase64(img) {
  38.     try {
  39.         if (!img) {
  40.             printl("[ERROR] imageToBase64: 传入的图片对象为空");
  41.             return null;
  42.         }
  43.         var base64 = img.toBase64();
  44.         printl("[imageToBase64] 转换成功,大小: " + base64.length() + " 字符");
  45.         return base64;
  46.     } catch (e) {
  47.         printl("[ERROR] imageToBase64 失败: " + e.message);
  48.         return null;
  49.     }
  50. }

  51. // ======================== 2. 图片文件转 Base64 ========================

  52. /**
  53. * 图片文件转 Base64
  54. * @param {string} imagePath - 图片文件路径
  55. * @returns {string} Base64 字符串
  56. */
  57. function imageFileToBase64(imagePath) {
  58.     try {
  59.         var file = new File(imagePath);
  60.         if (!file.exists()) {
  61.             printl("[ERROR] imageFileToBase64: 文件不存在: " + imagePath);
  62.             return null;
  63.         }

  64.         var fis = new FileInputStream(file);
  65.         var bytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, file.length());
  66.         fis.read(bytes);
  67.         fis.close();

  68.         var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
  69.         printl("[imageFileToBase64] 转换成功,文件大小: " + file.length() + " 字节,Base64: " + base64.length() + " 字符");
  70.         return base64;
  71.     } catch (e) {
  72.         printl("[ERROR] imageFileToBase64 失败: " + e.message);
  73.         return null;
  74.     }
  75. }

  76. // ======================== 3. 字符串转 Base64 ========================

  77. /**
  78. * 字符串转 Base64
  79. * @param {string} str - 要编码的字符串
  80. * @returns {string} Base64 字符串
  81. */
  82. function stringToBase64(str) {
  83.     try {
  84.         var bytes = new java.lang.String(str).getBytes("UTF-8");
  85.         var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
  86.         printl("[stringToBase64] 编码成功: \"" + str + "\" → " + base64);
  87.         return base64;
  88.     } catch (e) {
  89.         printl("[ERROR] stringToBase64 失败: " + e.message);
  90.         return null;
  91.     }
  92. }

  93. // ======================== 4. Base64 转字符串 ========================

  94. /**
  95. * Base64 转字符串
  96. * @param {string} base64Str - Base64 字符串
  97. * @returns {string} 解码后的字符串
  98. */
  99. function base64ToString(base64Str) {
  100.     try {
  101.         var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
  102.         var str = new java.lang.String(bytes, "UTF-8");
  103.         printl("[base64ToString] 解码成功: " + base64Str.substring(0, Math.min(30, base64Str.length())) + "... → \"" + str + "\"");
  104.         return str;
  105.     } catch (e) {
  106.         printl("[ERROR] base64ToString 失败: " + e.message);
  107.         return null;
  108.     }
  109. }

  110. // ======================== 5. Base64 转图片文件 ========================

  111. /**
  112. * Base64 转图片文件
  113. * @param {string} base64Str - Base64 字符串
  114. * @param {string} outputPath - 输出文件路径
  115. * @returns {boolean} 是否成功
  116. */
  117. function base64ToImageFile(base64Str, outputPath) {
  118.     try {
  119.         var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
  120.         var fos = new FileOutputStream(outputPath);
  121.         fos.write(bytes);
  122.         fos.flush();
  123.         fos.close();
  124.         printl("[base64ToImageFile] 保存成功: " + outputPath + ",大小: " + bytes.length + " 字节");
  125.         return true;
  126.     } catch (e) {
  127.         printl("[ERROR] base64ToImageFile 失败: " + e.message);
  128.         return false;
  129.     }
  130. }

  131. // ======================== 6. 截图并转 Base64 ========================

  132. /**
  133. * 全屏截图转 Base64
  134. * @returns {string} Base64 字符串
  135. */
  136. function screenshotToBase64() {
  137.     try {
  138.         var img = screen.screenShotFull();
  139.         if (!img) {
  140.             printl("[ERROR] screenshotToBase64: 截图返回空");
  141.             return null;
  142.         }

  143.         var base64 = img.toBase64();
  144.         img.recycle();

  145.         printl("[screenshotToBase64] 截图转Base64成功,大小: " + base64.length() + " 字符");
  146.         return base64;
  147.     } catch (e) {
  148.         printl("[ERROR] screenshotToBase64 失败: " + e.message);
  149.         return null;
  150.     }
  151. }

  152. // ======================== 7. 区域截图并转 Base64 ========================

  153. /**
  154. * 区域截图转 Base64(使用 Android Bitmap API 裁剪)
  155. * @param {number} x - 左上角 X 坐标(像素)
  156. * @param {number} y - 左上角 Y 坐标(像素)
  157. * @param {number} width - 宽度(像素)
  158. * @param {number} height - 高度(像素)
  159. * @returns {string} Base64 字符串
  160. */
  161. function regionScreenshotToBase64(x, y, width, height) {
  162.     try {
  163.         // 先全屏截图
  164.         var img = screen.screenShotFull();
  165.         if (!img) {
  166.             printl("[ERROR] regionScreenshotToBase64: 截图返回空");
  167.             return null;
  168.         }

  169.         // 获取 Bitmap 对象
  170.         var bitmap = img.getBitmap();
  171.         if (!bitmap) {
  172.             printl("[ERROR] regionScreenshotToBase64: 获取 Bitmap 失败");
  173.             img.recycle();
  174.             return null;
  175.         }

  176.         // 使用 Android Bitmap API 裁剪
  177.         var croppedBitmap = android.graphics.Bitmap.createBitmap(bitmap, x, y, width, height);
  178.         img.recycle();

  179.         if (!croppedBitmap) {
  180.             printl("[ERROR] regionScreenshotToBase64: 裁剪失败");
  181.             return null;
  182.         }

  183.         // 转为 Base64
  184.         var baos = new java.io.ByteArrayOutputStream();
  185.         croppedBitmap.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, baos);
  186.         var bytes = baos.toByteArray();
  187.         var base64 = android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP);
  188.         
  189.         croppedBitmap.recycle();
  190.         baos.close();

  191.         printl("[regionScreenshotToBase64] 区域截图转Base64成功,区域: (" + x + "," + y + "," + width + "," + height + "),大小: " + base64.length() + " 字符");
  192.         return base64;
  193.     } catch (e) {
  194.         printl("[ERROR] regionScreenshotToBase64 失败: " + e.message);
  195.         return null;
  196.     }
  197. }

  198. // ======================== 8. 通用文件转 Base64 ========================

  199. /**
  200. * 通用文件转 Base64
  201. * @param {string} filePath - 文件路径
  202. * @returns {string} Base64 字符串
  203. */
  204. function fileToBase64(filePath) {
  205.     try {
  206.         var file = new File(filePath);
  207.         if (!file.exists()) {
  208.             printl("[ERROR] fileToBase64: 文件不存在: " + filePath);
  209.             return null;
  210.         }

  211.         var fis = new FileInputStream(file);
  212.         var bytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, file.length());
  213.         fis.read(bytes);
  214.         fis.close();

  215.         var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
  216.         printl("[fileToBase64] 转换成功: " + filePath + ",大小: " + base64.length() + " 字符");
  217.         return base64;
  218.     } catch (e) {
  219.         printl("[ERROR] fileToBase64 失败: " + e.message);
  220.         return null;
  221.     }
  222. }

  223. // ======================== 9. Base64 转通用文件 ========================

  224. /**
  225. * Base64 转通用文件
  226. * @param {string} base64Str - Base64 字符串
  227. * @param {string} outputPath - 输出文件路径
  228. * @returns {boolean} 是否成功
  229. */
  230. function base64ToFile(base64Str, outputPath) {
  231.     try {
  232.         var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
  233.         var fos = new FileOutputStream(outputPath);
  234.         fos.write(bytes);
  235.         fos.flush();
  236.         fos.close();
  237.         printl("[base64ToFile] 保存成功: " + outputPath + ",大小: " + bytes.length + " 字节");
  238.         return true;
  239.     } catch (e) {
  240.         printl("[ERROR] base64ToFile 失败: " + e.message);
  241.         return false;
  242.     }
  243. }

  244. // ======================== 10. 获取 Base64 文件类型 ========================

  245. /**
  246. * 获取 Base64 字符串的文件类型
  247. * @param {string} base64Str - Base64 字符串
  248. * @returns {string} 文件类型
  249. */
  250. function getBase64FileType(base64Str) {
  251.     try {
  252.         var bytes = Base64.decode(base64Str.substring(0, 100), Base64.NO_WRAP);

  253.         if (bytes[0] == 0x89 && bytes[1] == 0x50 && bytes[2] == 0x4E && bytes[3] == 0x47) {
  254.             printl("[getBase64FileType] 检测到类型: image/png");
  255.             return "image/png";
  256.         }
  257.         if (bytes[0] == 0xFF && bytes[1] == 0xD8 && bytes[2] == 0xFF) {
  258.             printl("[getBase64FileType] 检测到类型: image/jpeg");
  259.             return "image/jpeg";
  260.         }
  261.         if (bytes[0] == 0x47 && bytes[1] == 0x49 && bytes[2] == 0x46 && bytes[3] == 0x38) {
  262.             printl("[getBase64FileType] 检测到类型: image/gif");
  263.             return "image/gif";
  264.         }

  265.         printl("[getBase64FileType] 未识别的文件类型");
  266.         return "unknown";
  267.     } catch (e) {
  268.         printl("[ERROR] getBase64FileType 失败: " + e.message);
  269.         return "unknown";
  270.     }
  271. }

  272. // ======================== 11. fastCapture 截图转 Base64 ========================

  273. /**
  274. * 快速截图转 Base64(使用 screen.screenShotFull)
  275. * @returns {string} Base64 字符串
  276. */
  277. function fastCaptureToBase64() {
  278.     try {
  279.         var img = screen.screenShotFull();
  280.         if (!img) {
  281.             printl("[ERROR] fastCaptureToBase64: 截图返回空");
  282.             return null;
  283.         }

  284.         var base64 = img.toBase64();
  285.         img.recycle();

  286.         printl("[fastCaptureToBase64] 快速截图转Base64成功,大小: " + base64.length() + " 字符");
  287.         return base64;
  288.     } catch (e) {
  289.         printl("[ERROR] fastCaptureToBase64 失败: " + e.message);
  290.         return null;
  291.     }
  292. }

  293. // ======================== 12. 图片对象转 JpgBase64 ========================

  294. /**
  295. * AIWROK Image 对象转 JPG Base64(带压缩)
  296. * @param {object} img - AIWROK 的 Image 对象
  297. * @param {number} quality - JPEG 质量 0-100
  298. * @returns {string} Base64 字符串
  299. */
  300. function imageToJpgBase64(img, quality) {
  301.     quality = quality || 80;
  302.     try {
  303.         if (!img) {
  304.             printl("[ERROR] imageToJpgBase64: 传入的图片对象为空");
  305.             return null;
  306.         }
  307.         var base64 = img.toJpgBase64(quality);
  308.         printl("[imageToJpgBase64] JPG压缩转Base64成功,质量: " + quality + ",大小: " + base64.length() + " 字符");
  309.         return base64;
  310.     } catch (e) {
  311.         printl("[ERROR] imageToJpgBase64 失败: " + e.message);
  312.         return null;
  313.     }
  314. }


  315. // ============================================================
  316. //                    全部功能案例演示
  317. // ============================================================

  318. function demo() {
  319.     printl("");
  320.     printl("╔══════════════════════════════════════════════╗");
  321.     printl("║       AIWROK Base64 工具集 - 全部演示        ║");
  322.     printl("║          共 12 个功能,逐个演示              ║");
  323.     printl("╚══════════════════════════════════════════════╝");

  324.     // ---- 演示 1: 字符串转 Base64 ----
  325.     divider("演示 1/12: 字符串转 Base64");
  326.     var testStr = "Hello, AIWROK!";
  327.     printl("[案例] 将字符串 \"" + testStr + "\" 编码为 Base64");
  328.     var encoded = stringToBase64(testStr);
  329.     printl("[结果] 编码后: " + encoded);

  330.     countdown(3);

  331.     // ---- 演示 2: Base64 转字符串 ----
  332.     divider("演示 2/12: Base64 转字符串");
  333.     printl("[案例] 将 Base64 解码回原文");
  334.     var decoded = base64ToString(encoded);
  335.     printl("[结果] 解码后: " + decoded);

  336.     countdown(3);

  337.     // ---- 演示 3: 全屏截图转 Base64 ----
  338.     divider("演示 3/12: 全屏截图转 Base64");
  339.     printl("[案例] 截取全屏并转为 Base64");
  340.     var screenB64 = screenshotToBase64();
  341.     if (screenB64) {
  342.         printl("[结果] 截图Base64大小: " + screenB64.length() + " 字符");
  343.     }

  344.     countdown(3);

  345.     // ---- 演示 4: 区域截图转 Base64 ----
  346.     divider("演示 4/12: 区域截图转 Base64");
  347.     printl("[案例] 截取屏幕左上角 540x960 区域");
  348.     var regionB64 = regionScreenshotToBase64(0, 0, 540, 960);
  349.     if (regionB64) {
  350.         printl("[结果] 区域截图Base64大小: " + regionB64.length() + " 字符");
  351.     }

  352.     countdown(3);

  353.     // ---- 演示 5: fastCapture 截图转 Base64 ----
  354.     divider("演示 5/12: fastCapture 快速截图转 Base64");
  355.     printl("[案例] 使用 image.fastCapture() 快速截图");
  356.     var fastB64 = fastCaptureToBase64();
  357.     if (fastB64) {
  358.         printl("[结果] 快速截图Base64大小: " + fastB64.length() + " 字符");
  359.     }

  360.     countdown(3);

  361.     // ---- 演示 6: 图片对象转 Base64 ----
  362.     divider("演示 6/12: 图片对象转 Base64");
  363.     printl("[案例] 截图获取 Image 对象后转 Base64");
  364.     var img = screen.screenShotFull();
  365.     if (img) {
  366.         var imgB64 = imageToBase64(img);
  367.         if (imgB64) {
  368.             printl("[结果] 图片对象Base64大小: " + imgB64.length() + " 字符");
  369.         }
  370.         img.recycle();
  371.     }

  372.     countdown(3);

  373.     // ---- 演示 7: 图片对象转 JPG Base64(带压缩) ----
  374.     divider("演示 7/12: 图片对象转 JPG Base64(带压缩)");
  375.     printl("[案例] 截图后以 50% 质量压缩为 JPG Base64");
  376.     var img2 = screen.screenShotFull();
  377.     if (img2) {
  378.         var jpgB64 = imageToJpgBase64(img2, 50);
  379.         if (jpgB64) {
  380.             printl("[结果] JPG压缩Base64大小: " + jpgB64.length() + " 字符");
  381.             printl("[对比] 原PNG大小约 " + (screenB64 ? screenB64.length() : 0) + " 字符,JPG压缩后 " + jpgB64.length() + " 字符");
  382.         }
  383.         img2.recycle();
  384.     }

  385.     countdown(3);

  386.     // ---- 演示 8: 截图保存为文件再转 Base64 ----
  387.     divider("演示 8/12: 截图保存文件 → 文件转 Base64");
  388.     printl("[案例] 先截图保存到文件,再从文件读取转 Base64");
  389.     var testImgPath = "/sdcard/base64_test.png";
  390.     var img3 = screen.screenShotFull();
  391.     if (img3) {
  392.         img3.save(testImgPath);
  393.         img3.recycle();
  394.         printl("[步骤1] 截图已保存: " + testImgPath);

  395.         var fileB64 = imageFileToBase64(testImgPath);
  396.         if (fileB64) {
  397.             printl("[结果] 文件Base64大小: " + fileB64.length() + " 字符");
  398.         }
  399.     }

  400.     countdown(3);

  401.     // ---- 演示 9: 通用文件转 Base64 ----
  402.     divider("演示 9/12: 通用文件转 Base64");
  403.     printl("[案例] 将任意文件转为 Base64");
  404.     var anyFileB64 = fileToBase64(testImgPath);
  405.     if (anyFileB64) {
  406.         printl("[结果] 通用文件Base64大小: " + anyFileB64.length() + " 字符");
  407.     }

  408.     countdown(3);

  409.     // ---- 演示 10: Base64 转图片文件 ----
  410.     divider("演示 10/12: Base64 转图片文件");
  411.     printl("[案例] 将截图的 Base64 还原为图片文件");
  412.     var outputPath = "/sdcard/base64_restored.png";
  413.     if (screenB64) {
  414.         var ok = base64ToImageFile(screenB64, outputPath);
  415.         if (ok) {
  416.             var restoredFile = new File(outputPath);
  417.             printl("[结果] 还原图片大小: " + restoredFile.length() + " 字节");
  418.         }
  419.     }

  420.     countdown(3);

  421.     // ---- 演示 11: Base64 转通用文件 ----
  422.     divider("演示 11/12: Base64 转通用文件");
  423.     printl("[案例] 将 Base64 还原为通用文件");
  424.     var outputPath2 = "/sdcard/base64_restored2.png";
  425.     if (screenB64) {
  426.         var ok2 = base64ToFile(screenB64, outputPath2);
  427.         if (ok2) {
  428.             var restoredFile2 = new File(outputPath2);
  429.             printl("[结果] 还原文件大小: " + restoredFile2.length() + " 字节");
  430.         }
  431.     }

  432.     countdown(3);

  433.     // ---- 演示 12: 获取 Base64 文件类型 ----
  434.     divider("演示 12/12: 获取 Base64 文件类型");
  435.     printl("[案例] 检测截图 Base64 的文件格式");
  436.     if (screenB64) {
  437.         var fileType = getBase64FileType(screenB64);
  438.         printl("[结果] 文件类型: " + fileType);
  439.     }

  440.     // ---- 总结 ----
  441.     printl("");
  442.     printl("╔══════════════════════════════════════════════╗");
  443.     printl("║              全部 12 个演示完成!             ║");
  444.     printl("╠══════════════════════════════════════════════╣");
  445.     printl("║ 1.  stringToBase64      字符串 → Base64     ║");
  446.     printl("║ 2.  base64ToString      Base64 → 字符串     ║");
  447.     printl("║ 3.  screenshotToBase64  全屏截图 → Base64   ║");
  448.     printl("║ 4.  regionScreenshot    区域截图 → Base64   ║");
  449.     printl("║ 5.  fastCaptureToBase64 快速截图 → Base64   ║");
  450.     printl("║ 6.  imageToBase64       图片对象 → Base64   ║");
  451.     printl("║ 7.  imageToJpgBase64    图片 → JPG Base64   ║");
  452.     printl("║ 8.  imageFileToBase64   图片文件 → Base64   ║");
  453.     printl("║ 9.  fileToBase64        通用文件 → Base64   ║");
  454.     printl("║ 10. base64ToImageFile   Base64 → 图片文件   ║");
  455.     printl("║ 11. base64ToFile        Base64 → 通用文件   ║");
  456.     printl("║ 12. getBase64FileType   检测 Base64 类型    ║");
  457.     printl("╚══════════════════════════════════════════════╝");
  458. }

  459. // 直接运行演示
  460. demo();
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2