// 截取zs至yx范围内的图片。
if (title && ekp) {
var height = yx.y - zs.y; // 计算截图高度
var width = yx.x - zs.x; // 计算截图宽度
var screenshot = images.captureScreen();
var croppedImage = images.clip(screenshot, zs.x, zs.y, width, height); // 截取zs至yx范围内的图片
log("截取图片成功");
// 文件保存到:sdcard/脚本/安卓自动化/linshijietu文件夹内
var dirPath = "/sdcard/脚本/安卓自动化/linshijietu"; // 定义目录路径
files.ensureDir(dirPath); // 确保目录存在
log(`目录路径为:${dirPath}`);
// 定义图片地址,检查文件扩展名是否为'jpg'
var fileName = "croppedImage.jpg"; // 定义文件名
var fileExt = files.getExtension(fileName); // 获取文件扩展名
if (fileExt != "jpg") { // 判断文件扩展名是否为'jpg'
log("文件扩展名不是'jpg',修改为'jpg'");
fileName = files.getNameWithoutExtension(fileName) + ".jpg"; // 修改文件扩展名为'jpg'
}
log(`文件名为:${fileName}`);
// 构建文件路径:将目录路径和文件名拼接成完整的文件路径
var filePath = files.path(files.join(dirPath, fileName)); // 拼接并返回文件路径
log(`文件路径为:${filePath}`);
// 保存图片到文件路径
images.save(croppedImage, filePath, "jpg"); // 保存图片到文件路径
log("保存图片成功");
title = null; // 删除标题控件参数
ekp = null; // 删除ekp控件参数
titleBounds = null; // 删除标题控件bounds元素
ekpBounds = null; // 删除ekp控件bounds元素
titleCoords = null; // 删除标题控件座标点的参数
ekpCoords = null; // 删除ekp控件座标点的参数
zs = null; // 删除zs坐标点
yx = null; // 删除yx坐标点
height = null; // 删除截图高度
width = null; // 删除截图宽度
} else {
log("无法截取图片");
}
// 连接至ocr端口:http://173.249.197.34:12345/savelmage",将该截图文件上传至该api接口后删除该截图的本地存储并释放内存。
if (croppedImage) {
var ocrUrl = "http://173.249.197.34:5000/image"; // 定义ocr接口地址
try { // 使用try...catch语句来处理可能出现的异常
// 使用files.open()方法打开图片文件,并指定读取模式为'r'
var fileObj = files.open(filePath, 'r');
if (fileObj) {
log("打开文件成功");
log(fileObj); // 打印文件对象的内容
// 构建文件参数:创建一个包含文件参数的字典files,其中'file'是键,文件名、文件对象和文件类型('image/jpg')组成的元组是值。
var fileParams = {file: [fileName, fileObj, "image/jpg"]}; // 创建文件参数字典
log("构建文件参数成功");
// 发送POST请求,将文件参数作为files参数传递给函数
var response = http.postMultipart(ocrUrl, {}, fileParams); // 发送POST请求
log("发送POST请求成功");
// 删除本地文件并释放内存
files.remove(filePath); // 删除本地文件
croppedImage.recycle(); // 释放图片内存
screenshot.recycle(); // 释放截屏内存
fileObj.close(); // 关闭文件对象
log("删除本地文件并释放内存成功");
// 获取返回的字符串
var bodyString = response.body.string();
log(`返回的字符串为:${bodyString}`);
// 判断返回的字符串是否是json格式
var isJson = true;
try {
JSON.parse(bodyString);
} catch (e) {
isJson = false;
}
if (isJson) {
// 解析返回的json数据
var json = response.body.json();
if (json) {
if (json.result == 0) { // 判断result是否为0
log("返回参数result为0,跳转执行步骤7");
step7(); // 执行步骤7
} else if (json.result == 1) { // 判断result是否为1
log("返回参数result为1,将附加文本赋值给变量");
var text = json.identify_lines; // 将附加文本赋值给变量
step11(text); // 执行下一步,并传入附加文本
} else {
log("返回参数无效");
}
} else {
log("返回数据不是json格式");
}
} else {
log("返回数据不是json格式");
}
} else {
log("无法打开文件");
}
} catch (e) { // 捕获异常并打印错误信息
log(e.message);
}
} else {
log("无法上传图片");
}
}
以上代码运行报错,无法修复,请给予技术支持,非常感谢。报错如下:
15:33:33.969/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 保存图片成功
15:33:33.971/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 打开文件成功
15:33:33.972/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] org.autojs.autojs.pio.PReadableTextFile@e29793f
15:33:33.973/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] 构建文件参数成功
15:33:33.975/D: [七月 15, 2023 3:33:33 下午 GMT+08:00] java.lang.IllegalStateException: Multipart body must have at least one part.
15:33:33.977/V: [$remote/3.js] 运行结束 (用时 12.177 秒)