YYPOST群发软件 发表于 7 天前

AIWROK软件的Base64工具集


AIWROK软件的Base64工具集









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

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

// ======================== 工具函数 ========================

/**
* 倒计时(秒)
* @param {number} seconds - 倒计时秒数
*/
function countdown(seconds) {
    for (var i = seconds; i >= 1; i--) {
      printl("⏳ " + i + " 秒后开始下一个演示...");
      sleep.millisecond(1000);
    }
    printl("▶ 开始!");
}

/**
* 分隔线
*/
function divider(title) {
    printl("");
    printl("================================================");
    printl("" + title);
    printl("================================================");
}

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

/**
* AIWROK Image 对象转 Base64
* @param {object} img - AIWROK 的 Image 对象
* @returns {string} Base64 字符串
*/
function imageToBase64(img) {
    try {
      if (!img) {
            printl(" imageToBase64: 传入的图片对象为空");
            return null;
      }
      var base64 = img.toBase64();
      printl(" 转换成功,大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" imageToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* 图片文件转 Base64
* @param {string} imagePath - 图片文件路径
* @returns {string} Base64 字符串
*/
function imageFileToBase64(imagePath) {
    try {
      var file = new File(imagePath);
      if (!file.exists()) {
            printl(" imageFileToBase64: 文件不存在: " + imagePath);
            return null;
      }

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

      var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
      printl(" 转换成功,文件大小: " + file.length() + " 字节,Base64: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" imageFileToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* 字符串转 Base64
* @param {string} str - 要编码的字符串
* @returns {string} Base64 字符串
*/
function stringToBase64(str) {
    try {
      var bytes = new java.lang.String(str).getBytes("UTF-8");
      var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
      printl(" 编码成功: \"" + str + "\" → " + base64);
      return base64;
    } catch (e) {
      printl(" stringToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* Base64 转字符串
* @param {string} base64Str - Base64 字符串
* @returns {string} 解码后的字符串
*/
function base64ToString(base64Str) {
    try {
      var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
      var str = new java.lang.String(bytes, "UTF-8");
      printl(" 解码成功: " + base64Str.substring(0, Math.min(30, base64Str.length())) + "... → \"" + str + "\"");
      return str;
    } catch (e) {
      printl(" base64ToString 失败: " + e.message);
      return null;
    }
}

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

/**
* Base64 转图片文件
* @param {string} base64Str - Base64 字符串
* @param {string} outputPath - 输出文件路径
* @returns {boolean} 是否成功
*/
function base64ToImageFile(base64Str, outputPath) {
    try {
      var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
      var fos = new FileOutputStream(outputPath);
      fos.write(bytes);
      fos.flush();
      fos.close();
      printl(" 保存成功: " + outputPath + ",大小: " + bytes.length + " 字节");
      return true;
    } catch (e) {
      printl(" base64ToImageFile 失败: " + e.message);
      return false;
    }
}

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

/**
* 全屏截图转 Base64
* @returns {string} Base64 字符串
*/
function screenshotToBase64() {
    try {
      var img = screen.screenShotFull();
      if (!img) {
            printl(" screenshotToBase64: 截图返回空");
            return null;
      }

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

      printl(" 截图转Base64成功,大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" screenshotToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* 区域截图转 Base64(使用 Android Bitmap API 裁剪)
* @param {number} x - 左上角 X 坐标(像素)
* @param {number} y - 左上角 Y 坐标(像素)
* @param {number} width - 宽度(像素)
* @param {number} height - 高度(像素)
* @returns {string} Base64 字符串
*/
function regionScreenshotToBase64(x, y, width, height) {
    try {
      // 先全屏截图
      var img = screen.screenShotFull();
      if (!img) {
            printl(" regionScreenshotToBase64: 截图返回空");
            return null;
      }

      // 获取 Bitmap 对象
      var bitmap = img.getBitmap();
      if (!bitmap) {
            printl(" regionScreenshotToBase64: 获取 Bitmap 失败");
            img.recycle();
            return null;
      }

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

      if (!croppedBitmap) {
            printl(" regionScreenshotToBase64: 裁剪失败");
            return null;
      }

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

      printl(" 区域截图转Base64成功,区域: (" + x + "," + y + "," + width + "," + height + "),大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" regionScreenshotToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* 通用文件转 Base64
* @param {string} filePath - 文件路径
* @returns {string} Base64 字符串
*/
function fileToBase64(filePath) {
    try {
      var file = new File(filePath);
      if (!file.exists()) {
            printl(" fileToBase64: 文件不存在: " + filePath);
            return null;
      }

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

      var base64 = Base64.encodeToString(bytes, Base64.NO_WRAP);
      printl(" 转换成功: " + filePath + ",大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" fileToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* Base64 转通用文件
* @param {string} base64Str - Base64 字符串
* @param {string} outputPath - 输出文件路径
* @returns {boolean} 是否成功
*/
function base64ToFile(base64Str, outputPath) {
    try {
      var bytes = Base64.decode(base64Str, Base64.NO_WRAP);
      var fos = new FileOutputStream(outputPath);
      fos.write(bytes);
      fos.flush();
      fos.close();
      printl(" 保存成功: " + outputPath + ",大小: " + bytes.length + " 字节");
      return true;
    } catch (e) {
      printl(" base64ToFile 失败: " + e.message);
      return false;
    }
}

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

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

      if (bytes == 0x89 && bytes == 0x50 && bytes == 0x4E && bytes == 0x47) {
            printl(" 检测到类型: image/png");
            return "image/png";
      }
      if (bytes == 0xFF && bytes == 0xD8 && bytes == 0xFF) {
            printl(" 检测到类型: image/jpeg");
            return "image/jpeg";
      }
      if (bytes == 0x47 && bytes == 0x49 && bytes == 0x46 && bytes == 0x38) {
            printl(" 检测到类型: image/gif");
            return "image/gif";
      }

      printl(" 未识别的文件类型");
      return "unknown";
    } catch (e) {
      printl(" getBase64FileType 失败: " + e.message);
      return "unknown";
    }
}

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

/**
* 快速截图转 Base64(使用 screen.screenShotFull)
* @returns {string} Base64 字符串
*/
function fastCaptureToBase64() {
    try {
      var img = screen.screenShotFull();
      if (!img) {
            printl(" fastCaptureToBase64: 截图返回空");
            return null;
      }

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

      printl(" 快速截图转Base64成功,大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" fastCaptureToBase64 失败: " + e.message);
      return null;
    }
}

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

/**
* AIWROK Image 对象转 JPG Base64(带压缩)
* @param {object} img - AIWROK 的 Image 对象
* @param {number} quality - JPEG 质量 0-100
* @returns {string} Base64 字符串
*/
function imageToJpgBase64(img, quality) {
    quality = quality || 80;
    try {
      if (!img) {
            printl(" imageToJpgBase64: 传入的图片对象为空");
            return null;
      }
      var base64 = img.toJpgBase64(quality);
      printl(" JPG压缩转Base64成功,质量: " + quality + ",大小: " + base64.length() + " 字符");
      return base64;
    } catch (e) {
      printl(" imageToJpgBase64 失败: " + e.message);
      return null;
    }
}


// ============================================================
//                  全部功能案例演示
// ============================================================

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

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    countdown(3);

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

    // ---- 总结 ----
    printl("");
    printl("╔══════════════════════════════════════════════╗");
    printl("║            全部 12 个演示完成!             ║");
    printl("╠══════════════════════════════════════════════╣");
    printl("║ 1.stringToBase64      字符串 → Base64   ║");
    printl("║ 2.base64ToString      Base64 → 字符串   ║");
    printl("║ 3.screenshotToBase64全屏截图 → Base64   ║");
    printl("║ 4.regionScreenshot    区域截图 → Base64   ║");
    printl("║ 5.fastCaptureToBase64 快速截图 → Base64   ║");
    printl("║ 6.imageToBase64       图片对象 → Base64   ║");
    printl("║ 7.imageToJpgBase64    图片 → JPG Base64   ║");
    printl("║ 8.imageFileToBase64   图片文件 → Base64   ║");
    printl("║ 9.fileToBase64      通用文件 → Base64   ║");
    printl("║ 10. base64ToImageFile   Base64 → 图片文件   ║");
    printl("║ 11. base64ToFile      Base64 → 通用文件   ║");
    printl("║ 12. getBase64FileType   检测 Base64 类型    ║");
    printl("╚══════════════════════════════════════════════╝");
}

// 直接运行演示
demo();


页: [1]
查看完整版本: AIWROK软件的Base64工具集