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, 白色菱形画笔);
  });
}


完整源码


公众号回复    红眼特效

感谢大佬指点


@狸猫🐱  

声明

部分内容来自网络

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




相关文章
|
存储 Kubernetes 算法
开源免费的对象存储Minio
Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量、非结构化的数据。例如,图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小的,从几KB到5TB不等。
2653 0
手把手教你配置阿里云服务器搭建网站 全套完整图文教程!
第一步:如何以最低价格快速买到阿里云服务器? 目前通过拼团活动购买云服务器比较实惠。个人用户对配置要求低,通过云上爆款购买。企业用户对应用性能要求高,可在高性能云服务器五折活动专题购买,购买前记得领取阿里云通用代金券¥2000红包!   1.3 我买云服务器时要选操作系统,服务器各操作系统有什么特点?怎么选? 答:Windows:操作简单,功能实用,安全性较差。
|
监控 数据可视化 物联网
免费开通“物联网平台公共实例”并阅读文章完成自学任务
上课前烦请务必开通物联网平台公共实例和IoT Studio
免费开通“物联网平台公共实例”并阅读文章完成自学任务
|
3月前
|
人工智能 监控 安全
AI 智能体的上线
国内AI智能体上线已成高合规工程:须完成算法备案、安全评估与AIGC标识;部署沙箱+影子模式验证逻辑;设置“人在回路”审核闸门;通过对抗测试与内容过滤;建立负反馈闭环持续优化。安全稳定,方能落地关键业务闭环。(239字)
|
25天前
|
数据采集 人工智能 监控
京东商品详情API数据解析
本方案提供京东商品详情API(jd.item_get)完整解析,涵盖标准返回、关键字段及避坑指南;结合AI实现数据清洗、情感分析与爆款预测,支持智能选品、竞品监控、动态定价等场景,助力中小卖家高效落地电商智能决策。
|
25天前
|
人工智能 自然语言处理 安全
OpenClaw 与飞书绑定实操教程:企业IM接入AI服务一步到位
本文详解OpenClaw与飞书集成实操:从飞书开放平台获取App ID/Secret,到OpenClaw后台配置绑定,全程图文指引;涵盖常见报错排查与安全提示,助力企业5分钟完成AI服务接入,实现IM内即用智能问答、内容生成等能力。
|
2月前
|
SQL 运维 监控
MySQL高可用生产落地全解:主从同步、MGR集群、读写分离从原理到实战
本文系统讲解MySQL高可用三大核心:主从复制(含GTID、增强半同步实战)、MGR原生集群(单主模式部署、自动选主、脑裂防护)及读写分离(应用层/ProxySQL方案)。涵盖RTO/RPO指标、故障根因分析、全场景最佳实践与容灾预案,助你构建稳定、高性能、可扩展的生产级高可用体系。
262 3
|
5月前
|
编解码
南京观海微电子----DAC/ADC原理
DAC将数字量按权值转换为模拟量,核心由锁存器、电子开关、基准源、权电阻网络和求和电路组成。常见结构有倒T型电阻网络和权电流转换器。ADC则通过取样、保持、量化、编码将模拟信号转为数字量,主要类型包括逐次逼近型、积分型和并行比较型,关键指标有分辨率、转换速率和基准源精度。
南京观海微电子----DAC/ADC原理
|
11月前
|
自然语言处理 安全 API
“跨境电商API解决方案:多语言多货币,全球销售无忧”
跨境电商API解决方案助力企业全球化布局,提供多语言支持(超100种语言)、多货币结算和实时汇率转换,简化跨境交易流程。基于RESTful架构设计,兼容性强,云端部署确保高可用性与稳定性。实际应用涵盖多平台库存同步、智能物流优化等场景,整合主流电商平台与物流服务商。同时,系统符合GDPR等国际合规标准,内置风控机制防范欺诈交易,保障数据安全与业务连续性,为企业提供全方位技术支持。
323 0
|
12月前
|
Web App开发 监控 前端开发
用 CodeBuddy 造自动刷新插件,手速快到连 F5 键都怀疑人生!
如果你也想开发一款高效的浏览器插件,CodeBuddy 绝对是你的得力助手!它让技术门槛不再是阻碍,让创意快速变成现实。
410 3
用 CodeBuddy 造自动刷新插件,手速快到连 F5 键都怀疑人生!

热门文章

最新文章