牙叔教程 简单易懂
效果展示
这是一张AI生成的无版权的人物头像, 我们用它来测试效果
修改头发颜色
修改嘴唇颜色
代码
在图片上找颜色的时候, 一般都是近似颜色, 颜色有多个值,
因此, 颜色一定是一个数组
let outFilePath = "/sdcard/" + imgName; console.time("修改颜色"); // let colorList = ["#1d262f", "#020609", "#463120", "#483832", "#644830"]; // 头发和眼睛 let colorList = ["#BB595d", "#d57871", "#ea8d88", "#a65c53", "#965044"]; // 嘴巴 let roiColor = "#ff0000"; let img = modifySpecifiedColor(inFilePath, outFilePath, colorList, roiColor); console.timeEnd("修改颜色"); console.time("保存图片"); images.save(img, outFilePath); console.timeEnd("保存图片"); img.recycle(); app.viewFile(outFilePath);
耗时
// Mat [ 1024*1024*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0xb400007df923c8c0, dataAddr=0xb400007e163d50c0 ] // rows: 1024 cols: 1024 channels: 3 // 读取图片: 27ms // 修改颜色: 46ms // 保存图片: 492ms
做脚本使用的测试图片
修改3个紫色的圆形为任意颜色, 紫色深浅不一:
耗时
Mat [ 600*600*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0xb400007e258447c0, dataAddr=0xb400007df9084900 ] rows: 600 cols: 600 channels: 3 读取图片: 6ms 修改颜色: 14ms 保存图片: 19ms rows: 600 cols: 600 channels: 3 读取图片: 7ms 修改颜色: 15ms 保存图片: 23ms rows: 600 cols: 600 channels: 3 读取图片: 7ms 修改颜色: 15ms 保存图片: 18ms rows: 600 cols: 600 channels: 3 读取图片: 6ms 修改颜色: 14ms 保存图片: 22ms
备注
千万不要试图在autojs里遍历像素修改颜色, 遍历像素耗时
遍历像素 rows: 600 cols: 600 channels: 3 修改颜色: 3739ms 保存图片: 2ms
3739/14=224.2142857142857
整整差了224倍;
请对下面这种写法say no!!!
遍历像素
for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { let data = img.get(i, j); for (let k = 0; k < ch; k++) { if ((data[0] === 255 || data[1] === 255) && data[2] === 0) { data[0] = 0; data[1] = 0; data[2] = 255; } } img.put(i, j, data); } }
环境
手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.2
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途