function 截图并上传() {
截图权限()
base64String = images.toBase64(captureScreen(), "jpg", 0.01);
log(base64String)
aaa=http.post("http://192.168.0.116:8080/upload", base64String, {})
log(aaa)
} 为什么截图出来很大
回答
截图文件过大通常由以下几个原因导致:
- 屏幕分辨率高:现代手机屏幕分辨率较高(如 1080P、2K),像素点多,原始数据量大。
- Base64 编码膨胀:Base64 编码会将二进制图片数据转换为文本,体积会比原二进制文件增大约 33%。
- 压缩质量参数:
images.toBase64的质量参数范围通常是 0-100 的整数。传入0.01可能被识别为 0 或 1,虽然质量极低,但如果分辨率未降低,体积依然可能较大。
优化方案
为了减小截图体积,建议采取以下措施:
- 缩放图片:使用
images.resize()将截图尺寸缩小(例如缩小到宽 500 像素),这是减小体积最有效的方法。 - 截取区域:如果只需要屏幕部分内容,使用
images.clip()截取特定区域。 - 调整压缩质量:将质量参数设置为合理的整数(如 50-80),在保证清晰度的同时控制大小。
优化后的代码示例
以下代码展示了如何缩小图片尺寸后再转换为 Base64 并上传,同时修正了变量声明和网络请求的处理方式,确保兼容 Hamibot 的 JavaScript 引擎。
// 文档地址 https://docs.hamibot.com/
function 截图并上传 () {
截图权限 ();
// 截取屏幕
var img = captureScreen();
// 将图片宽度缩放至 500 像素,高度自动按比例调整,大幅减小体积
var smallImg = images.resize(img, [500, 0]);
// 转换为 Base64,质量设置为 50 (0-100)
var base64String = images.toBase64(smallImg, "jpg", 50);
log("Base64 长度:" + base64String.length);
// 发送请求,建议设置 Content-Type 头
var aaa = http.post("http://192.168.0.116:8080/upload", base64String, {
headers: {
"Content-Type": "text/plain"
}
});
// 打印响应内容
if (aaa.statusCode == 200) {
log("上传成功:" + aaa.body.string());
} else {
log("上传失败:" + aaa.statusCode);
}
// 回收图片内存
img.recycle();
smallImg.recycle();
}
function 截图权限 () {
auto.waitFor();
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
sleep(1000);
}
注意事项
- 内存回收:使用
captureScreen()生成的图片对象占用内存,使用完毕后建议调用recycle()方法回收,避免内存溢出。 - 网络权限:确保 Hamibot 应用已获取网络权限,且目标服务器地址可访问。
- 兼容性:代码中使用
var声明变量,避免使用箭头函数,以兼容 Rhino 1.7.15 引擎。 - 质量参数:
images.toBase64的第三个参数建议传入 0 到 100 之间的整数,小数可能导致不可预期的行为。
通过缩放图片尺寸,通常可以将 Base64 字符串长度控制在几十 KB 以内,适合网络传输。
ℹ️ 本回答由 AI 生成,内容仅供参考