autojs红眼特效

简介: 牙叔教程 简单易学

牙叔教程 简单易学


效果展示



autojs版本


8.8.2-0


代码简介


  1. 识别眼睛, 使用的是百度的人脸检测
  2. 在眼睛的位置, 画红眼特效, 使用了阴影, 模糊
  3. 红眼特效区域使用path.quadTo画了一个菱形曲线


get知识点


  1. 百度人脸检测token的获取
  2. 百度人脸检测
  3. 输入框监听
  4. 复选框和draw事件的交互
  5. 颜色正则校验
  6. 菱形曲线的绘制
  7. 阴影
  8. 模糊
  9. 画布旋转
  10. 画布缩放


代码讲解


1. 获取人脸信息
function 获取人脸信息(imgPath) {
  imgPath = files.path(imgPath);
  let access_token = "xxxxxxxxxxx";
  let url = "https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=" + access_token;
  let img = images.read(imgPath);
  let imgBase64 = images.toBase64(img);
  let res_json = http
    .post(
      url,
      {
        image: imgBase64,
        image_type: "BASE64",
        face_field: "landmark",
      },
      {
        headers: {
          "Content-Type": "application/json",
        },
      }
    )
    .body.json();
  let faceList = res_json.result.face_list;
  return faceList;
}


2. 提取眼睛数据
function 识别眼睛(imgPath) {
  let faceList = 获取人脸信息(imgPath);
  let landmark72 = faceList[0].landmark72;
  let eye = {
    center: landmark72[38],
    pointList: landmark72.slice(30, 38),
  };
  return eye;
}


3. 设置全局变量
let 特效高度 = 4;
let 动画缩放倍数 = 1;
let 旋转角度 = 0;
let 一次旋转度数 = 1;
let 旋转间隙时长 = 8;
let 主色 = "#ff0000";


4. 获取图片数据
let imgPath = "./女生人脸.jpg";
let img = images.read(imgPath);
let iw = img.getWidth();
let ih = img.getHeight();
let mBitmap = img.getBitmap();
##### 5. 退出时回收图片
```js
events.on("exit", function () {
  log("结束运行");
  mBitmap.recycle();
  img.recycle();
});


6. UI布局, 画板和图片宽高一样, 方便处理

ui.layout(
  <vertical marginTop="50">
    <text textSize="23sp" w="*" gravity="center" textStyle="bold">
      红眼特效
    </text>
    <frame w="*" gravity="center">
      <canvas id="board" w="{{iw}}px" h="{{ih}}px"></canvas>
    </frame>
    <text textSize="23sp" w="*" gravity="center" margin="9" textColor="#1e90ff">
      牙叔教程 简单易学
    </text>
    <text id="state" textSize="23sp" w="*" gravity="center">
      正在识别眼睛, 请稍后
    </text>
    <vertical marginLeft="80">
      <horizontal>
        <text>主色</text>
        <input id="主色" w="99"></input>
      </horizontal>
      <horizontal>
        <checkbox id="旋转" text="旋转" gravity="center"></checkbox>
        <text marginLeft="10">一次旋转度数</text>
        <input id="一次旋转度数" w="55"></input>
      </horizontal>
      <checkbox id="缩放" text="缩放" gravity="center"></checkbox>
      <checkbox id="音效" text="音效" gravity="center"></checkbox>
    </vertical>
  </vertical>
);


7. 设置输入框和复选框监听事件
ui.一次旋转度数.addTextChangedListener(
  new android.text.TextWatcher({
    afterTextChanged: function (text) {
      let content = text.toString();
      if (一次旋转度数正则校验(content)) {
        一次旋转度数 = parseInt(content);
      } else {
        log("颜色正则校验 不通过");
        log(content);
      }
    },
  })
);
ui.音效.on("check", (checked) => {
  if (checked) {
    打开音效();
  } else {
    关闭音效();
  }
});


8. 画红眼特效
function 画红眼特效(bw, bh, eye) {
  let eyeCenter = eye.center;
  let bcx = bw / 2;
  let bcy = bh / 2;
  let 白色菱形画笔 = get白色菱形画笔();
  let 白色菱形path = get白色菱形path(eyeCenter.x, eyeCenter.y);
  let 红色菱形画笔 = get红色菱形画笔();
  let 红色菱形path = get红色菱形path(eyeCenter.x, eyeCenter.y, bw);
  ui.board.on("draw", function (canvas) {
    canvas.drawBitmap(mBitmap, 0, 0, null);
    if (ui.旋转.checked) {
      canvas.rotate(旋转角度, eyeCenter.x, eyeCenter.y);
    } else {
      canvas.rotate(-25, eyeCenter.x, eyeCenter.y);
    }
    if (ui.缩放.checked) {
      canvas.scale(动画缩放倍数, 动画缩放倍数, eyeCenter.x, eyeCenter.y);
    }
    红色菱形画笔.setColor(colors.parseColor(主色));
    canvas.drawPath(红色菱形path, 红色菱形画笔);
    白色菱形画笔.setColor(colors.parseColor("#ffffff"));
    canvas.drawPath(白色菱形path, 白色菱形画笔);
  });
}


完整源码


公众号回复    红眼特效

感谢大佬指点


@狸猫🐱  

声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途




相关文章
|
9月前
|
移动开发 JavaScript 安全
分享66个相册特效,总有一款适合您
分享66个相册特效,总有一款适合您
92 5
|
测试技术 Android开发
autojs横屏截图的正确姿势
牙叔教程 简单易懂
2934 0
|
前端开发 数据可视化 测试技术
autojs裁剪找图
牙叔教程 简单易
314 0
|
8月前
|
数据可视化 图形学 开发者
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(上)
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例
861 2
|
8月前
|
图形学
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(下)
【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例
227 0
|
8月前
|
图形学
【实现100个unity特效之5】unity2d 各种粒子特效
【实现100个unity特效之5】unity2d 各种粒子特效
358 0
|
8月前
|
开发工具 图形学 git
【实现100个unity特效之7】unity 3d实现各种粒子效果
【实现100个unity特效之7】unity 3d实现各种粒子效果
201 0
|
图形学
Unity——拖尾特效
Unity——拖尾特效
501 0
vscode超炫敲击特效嘎嘎帅!!!
vscode超炫敲击特效嘎嘎帅!!!
111 0
|
Android开发
autojs之酷炫字体效果
使用场景 一个textview中, 展示不同的字体效果
380 1

热门文章

最新文章