IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> autojs模仿抖音logo效果 -> 正文阅读

[人工智能]autojs模仿抖音logo效果

牙叔教程 简单易懂

效果展示

在这里插入图片描述

为什么做

看到别人的头像是这种风格, 虽然我不会去修改自己的头像,

但是我想知道如何实现这样的效果,

虽然写出来了, 不过我感觉还是不完全像抖音的效果, 可能还缺点啥

环境

手机: Mi 11 Pro

Android版本: 11

Autojs版本: 9.0.10

思路

  1. 抖音的logo看起来像两张图片重叠的效果
  2. 两张图片是透明的
  3. 还加了偏移
  4. 从原图搞两张透明图片, 再叠加

你将学到以下知识点

  • 设置seekbar监听事件
  • 在seekbar监听事件中, img设置图片, 然后回收图片
  • 由于修改图片是耗时操作, 所以要放到多线程中
  • 合并透明图片
  • byte数组转换成16进制字符串
  • 判断图片类型
  • 修改mat各个通道的值
  • mat转bitmap

代码讲解

1. 导入类, 基本只要你在autojs使用opencv就会用到这些类
console.time("导入类");
runtime.images.initOpenCvIfNeeded();
importClass(org.opencv.core.MatOfByte);
importClass(org.opencv.core.Scalar);
importClass(org.opencv.core.Point);
importClass(org.opencv.core.CvType);
importClass(java.util.List);
importClass(java.util.ArrayList);
importClass(java.util.LinkedList);
importClass(org.opencv.imgproc.Imgproc);
importClass(org.opencv.imgcodecs.Imgcodecs);
importClass(org.opencv.core.Core);
importClass(org.opencv.core.Mat);
importClass(org.opencv.core.MatOfDMatch);
importClass(org.opencv.core.MatOfKeyPoint);
importClass(org.opencv.core.MatOfRect);
importClass(org.opencv.core.Size);
importClass(org.opencv.features2d.DescriptorMatcher);
importClass(org.opencv.features2d.Features2d);
importClass(org.opencv.core.MatOfPoint2f);
importClass(android.graphics.Bitmap);
importClass(org.opencv.android.Utils);
importClass(java.lang.StringBuilder);
importClass(java.io.FileInputStream);
importClass(java.io.File);
console.timeEnd("导入类");
2. 界面
ui.layout(
  <vertical>
    <img id="img"></img>
    <text id="info" textSize="22sp" textColor="#fbfbfe" bg="#00afff" w="*" gravity="center">
      牙叔教程
    </text>
    <horizontal margin="8">
      <text>画笔透明度: </text>
      <text id="paintAlphaValue">0</text>
      <seekbar id="paintAlphaSeekbar" margin="9" w="*"></seekbar>
    </horizontal>
    <horizontal margin="8">
      <text>图片透明度: </text>
      <text id="channelAlphaValue">0</text>
      <seekbar id="channelAlphaSeekbar" margin="9" w="*"></seekbar>
    </horizontal>
    <horizontal margin="8">
      <text>图片偏移: </text>
      <text id="offsetValue">0</text>
      <seekbar id="offsetSeekbar" margin="9" w="*"></seekbar>
    </horizontal>
  </vertical>
);
3. 设置监听
ui.channelAlphaValue.setText(String(channelAlpha));
ui.channelAlphaSeekbar.setMax(255);
ui.channelAlphaSeekbar.setProgress(channelAlpha);
ui.channelAlphaSeekbar.setOnSeekBarChangeListener({
  onStopTrackingTouch: function (seekBar) {
    let progress = seekBar.getProgress();
    let lastImg = currentImg;
    ui.channelAlphaValue.setText(String(progress));
    channelAlpha = parseInt(progress);
    ui.post(function () {
      threads.start(function () {
        currentImg = updateImg();
      });
      lastImg.recycle();
    });
  },
});
4. 修改图片
function updateImg() {
  let modifiedMat = modifyChannelValue(mat);
  let modifiedBitmap = mat2bitmap(modifiedMat);
  modifiedMat.release();
  let modifiedMat2 = modifyChannelValue2(mat);
  let modifiedBitmap2 = mat2bitmap(modifiedMat2);
  modifiedMat2.release();
  let newImg = merge(grayBitmap, modifiedBitmap, modifiedBitmap2);
  ui.img.setImageBitmap(newImg.bitmap);
  modifiedBitmap.recycle();
  modifiedBitmap2.recycle();
  return newImg;
}
5. mat转bitmap
function mat2bitmap(mat) {
  let width = mat.width();
  let height = mat.height();
  let bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  Utils.matToBitmap(mat, bitmap);
  return bitmap;
}
6. byte数组转换成16进制字符串
function bytesToHexString(src) {
  let stringBuilder = new StringBuilder();
  if (src == null || src.length <= 0) {
    return null;
  }

  for (let i = 0; i < src.length; i++) {
    let v = src[i] & 0xff;
    let hv = java.lang.Integer.toHexString(v);

    if (hv.length < 2) {
      stringBuilder.append(0);
    }
    stringBuilder.append(hv);
  }
  return stringBuilder.toString();
}
7. 释放资源
events.on("exit", function () {
  ui.post(function () {
    img.recycle();
    grayBitmap.recycle();
    grayImg.recycle();
    currentImg.recycle();
    log("退出回收资源");
  });
});

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

完整源码

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 11:52:51  更:2021-10-19 11:54:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:27:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码