CocosCreator图片处理:截图裁剪,保存到本地,从本地加载,远端图片转base64

news2024/10/5 17:22:51
  • 截图裁剪

从相机导出的renderTexture中使用readPixels读取像素数据,通过像素数据创建spriteFrame可以展示到界面上。

this.rt = new RenderTexture();
this.rt.initialize({
    width: view.getVisibleSize().width,
    height: view.getVisibleSize().height,
})
this.camera.getComponent(Camera).targetTexture = this.rt;
this.scheduleOnce(()=>{
    console.log("下一帧开始-->")
    this.camera.active = false
    this._buffer = this.rt.readPixels(Math.round(worldPos.x - width / 2), Math.round(worldPos.y - height / 2), width, height);
    console.log(this._buffer)
})

let img = new ImageAsset();
img.reset({
    _data: this._buffer,
    width: width,
    height: height,
    format: Texture2D.PixelFormat.RGBA8888,
    _compressed: false
});
let texture = new Texture2D();
texture.image = img;
let sf = new SpriteFrame();
sf.texture = texture;
sf.packable = false;
this.showSprite!.getComponent(Sprite).spriteFrame = sf;
this.showSprite!.getComponent(Sprite).spriteFrame.flipUVY = true;
if (sys.isNative && (sys.os === sys.OS.IOS || sys.os === sys.OS.OSX)) {
    this.showSprite!.getComponent(Sprite).spriteFrame.flipUVY = false;
}
this.showSprite?.getComponent(UITransform)?.setContentSize(new Size(width, height));

  • 保存到本地

在3.6.0版本及以前是不支持这个方法的,在下面的链接中官方提供了一个方法:

【CocosCreator 3.x 技术方案分享】第一期 - Creator 3.x - Cocos中文社区

目前 3.0.0 ~ 3.6.0 版本还不支持 jsb.saveImageData , 引擎将在 3.6.1 支持。

提供一个在 3.6.1 版本之前可以使用 jsb.saveImageData 的方案 https://gitee.com/zzf2019/engine-native/commit/4af67e64a1caeb951016a9920efb7ee46d479ae5 38 ,目前此方案仅支持在 android 和 ios 上将 imageData 保存为本地 png 文件。


  • 从本地加载

引擎提供了loadRemote方法可以加载本地资源。

let filePath = jsb.fileUtils.getWritablePath() + 'render_to_sprite_image.png';
assetManager.loadRemote<ImageAsset>(filePath, (err, imageAsset)=> {
    if (err) {
         console.log("show image error")
    } else {
        console.log(`开始加载本地图片成功: ${filePath}`);
        const spriteFrame = new SpriteFrame();
        const texture = new Texture2D();
        texture.image = imageAsset;
        spriteFrame.texture = texture;
        this.copyNode.getComponent(Sprite).spriteFrame = spriteFrame;
        spriteFrame.packable = false;
        spriteFrame.flipUVY = true;
        if (sys.isNative && (sys.os === sys.OS.IOS || sys.os === sys.OS.OSX)) {
            spriteFrame.flipUVY = false;
        }
    }
});

  • 远端图片转base64

本地图片转base64自不必说,直接读数据就行了。

jsb.fileUtils.getDataFromFile()

远端图片可以使用loadAny方法,获取图片的二进制数据,然后转为base64数据:

static buffer2Base64(arrayBuffer) {
    let base64 = '';
    const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

    const bytes = new Uint8Array(arrayBuffer);
    const byteLen = bytes.byteLength;
    const byteRem = byteLen % 3;
    const mainLength = byteLen - byteRem;

    let byte1, byte2, byte3, byte4, tmp;

    for (let i = 0; i < mainLength; i += 3) {
        tmp = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
        byte1 = (tmp & 16515072) >> 18;
        byte2 = (tmp & 258048) >> 12;
        byte3 = (tmp & 4032) >> 6;
        byte4 = tmp & 63;
        base64 += encodings[byte1] + encodings[byte2] + encodings[byte3] + encodings[byte4];
    }

    if (byteRem === 1) {
        tmp = bytes[mainLength];
        byte1 = (tmp & 252) >> 2;
        byte2 = (tmp & 3) << 4;
        base64 += `${encodings[byte1]}${encodings[byte2]}==`;
    } else if (byteRem === 2) {
        tmp = (bytes[mainLength] << 8) | bytes[mainLength + 1];
        byte1 = (tmp & 64512) >> 10;
        byte2 = (tmp & 1008) >> 4;
        byte3 = (tmp & 15) << 2;
        base64 += `${encodings[byte1]}${encodings[byte2]}${encodings[byte3]}=`;
    }
    console.log(base64)
    return base64
}

let filePath = "https:/test.png"
assetManager.loadAny({url: filePath, ext: '.bin' }, (err, assets) => {
    console.log(`data:image/png;base64,${this.buffer2Base64(assets)}`)
});

 如果觉得有帮助请给我点赞并收藏哦~您的支持是我最大的鼓励~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js--》实现3d官网模型展示

目录 项目搭建 实现网页简单布局 初始化three.js基础代码 创建环境背景 加载飞船模型 实现滚轮滑动切换3D场景 设置星光流动特效 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&…

计算机常见的故障类型

文章目录 前言一、常见故障类型介绍1.硬件故障2.系统故障3.软件故障 二、故障排查思路三、Win操作系统问题1.系统基本信息2.系统资源监视器&#xff08;运行对话框输入“resmon”&#xff09;3.事件查看器&#xff08;运行对话框输入“eventvwr”&#xff09;4.任务管理器&…

使用这些方法让你的 Python 并发任务执行得更好

动动发财的小手&#xff0c;点个赞吧&#xff01; 问题 一直以来&#xff0c;Python的多线程性能因为GIL而一直没有达到预期。 所以从 3.4 版本开始&#xff0c;Python 引入了 asyncio 包&#xff0c;通过并发的方式并发执行 IO-bound 任务。经过多次迭代&#xff0c;asyncio A…

【LED子系统】八、小试牛刀

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录…

2023电工杯数学建模B题完整模型代码【原创首发】

文末获取全部资料 摘要 近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的发展和广泛应用&#xff0c;其在教育领域的潜力和影响引起了广泛关注。本研究旨在通过一项全面的问卷调查&#xff0c;探讨AI学习工具在大学生学习过程中的影响。 在本项研究中&#…

认识HTTP协议---1

hello,大家好,今天为大家带来http协议的相关知识 1.HTTP协议 &#x1f437;1.应用层协议 &#x1f437;2.HTTP协议的工作过程 2.HTTP协议格式 &#x1f437;1.认识抓包工具Fidder &#x1f437;2.学会使用fidder &#x1f437;3.协议格式总结 3.HTTP请求 &#x1f437…

常用本地事务和分布式事务解决方案模型

目录 1 DTP模型2 2PC2.1 方案简介2.2 处理流程2.2.1 阶段1&#xff1a;准备阶段2.2.2 阶段2&#xff1a;提交阶段 2.3 方案总结 3 3PC3.1 方案简介3.2 处理流程3.2.1 阶段1&#xff1a;canCommit3.2.2 阶段2&#xff1a;preCommit3.3.3 阶段3&#xff1a;do Commit 3.3 方案总结…

使用本地的chatGLM

打开终端 wsl -d Ubuntu conda activate chatglm cd cd ChatGLM-6B python3 cli_demo.py 依次输入以上命令。

随机森林Proximity实现及应用

随机森林Proximity实现及应用 1 算法1.1 随机森林Proximity简介1.2 RF-GAP1.3 实现代码 2 应用2.1 离群点(outlier)检测2.1.1 原理和实现2.1.2 实验结果 附录 项目主页&#xff1a;randomforest C implementation of random forests classification, regression, proximity and…

可以免费使用的ChatGPT保姆级教程 (New Bing)

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 最近&#xff0c;ChatGPT已经非常流行&#xff0c;但由于各种原因&#xff0c;国内用户无法直接免费使用ChatGPT的API&#xff0c;各种伟大的神也利用这…

沉浸式翻译 安装及使用

介绍一下最近非常或的沉浸式翻译工具&#xff0c;非常有助于外文阅读&#xff0c;包括网页、pdf等。可以同时显示原文和译文&#xff0c;操作简单&#xff0c;使用起来还是非常友好的。 先上链接&#xff1a;介绍 - 沉浸式翻译 如何使用 - 沉浸式翻译 1.安装 支持Edg…

仙人掌之歌——权力的游戏(2)

他是特级战斗英雄 “那个李通&#xff0c;会不会看起来好吓人呀&#xff1f;” 云冰洁有些紧张的样子&#xff0c;几乎要让陈速笑出来。 “哪有&#xff0c;一个很 nice 的人好吧。就是看起来比较严肃而已&#xff0c;我也从没看他笑过倒是。” 陈速让云冰洁看菜单&#xff0…

【极海APM32F4xx Tiny】学习笔记01-模板工程创建

本项目的使用的开发板 关于芯片使用的其他笔记 外部晶振时钟 模板工程创建/LED工程 项目仓库 https://gitcode.net/u010261063/apm32_test_part 创建模板工程的核心要素 复制官方的标准外设库复制启动文件复制cmsis文件复制相关的公共头文件如apm32f4xx_int.h 和 system_apm…

mybatis trim标签使用详解

mybatis trim标签使用详解 mybatis的trim标签一般用于去除sql语句中多余的and关键字&#xff0c;逗号&#xff0c;或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀&#xff0c;或者添加“)“等后缀&#xff0c;可用于选择性插入、更新、删除或者条件查询等操作。…

Dubbo框架

文章目录 1. 什么是Dubbo2. Dubbo架构3. SpringBoot整合Dubbo框架3.1 前期准备3.1.1 Zookeeper的安装 3.2 项目创建3.3 添加依赖3.4 定义服务接口3.5 服务端的实现3.6 消费端请求任务3.7 服务端配置文件3.8 消费端配置文件3.9 启动应用 4. Dubbo负载均衡5. Dubbo集群容错 1. 什…

第一部分-基础篇-第一章:PSTN与VOIP(上篇)

文章目录 序言引言&#xff1a;什么是VOIP和PSTN1.1 PSTN起源与发展1.1.1 最早的电话网1.1.2 人工电话交换时代1.1.3自动电话交换时代1.1.4半电子交换机时代1.1.5空分交换机时代1.1.6 数字交换机时代1.1.7现代PSTN时代1.1.8 下一代网络及VoIP时代 1.2 电话实现技术1.2.1 电话号…

【MySQL】如何速通MySQL(1)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接~ &…

“AI孙燕姿”爆火背后,是内容合规问题的再次升级|上云那些事

“讽刺的是&#xff0c;人类再怎么快也无法超越它。”这是歌手孙燕姿关于自己AI分身遍布网络一事&#xff0c;在MAKE MUSIC网站的博客上发表的看法。 来源&#xff1a;孙燕姿MAKE MUSIC网站博客 当大家还在担心AIGC会不会让自己失业时&#xff0c;歌手孙燕姿就因为“AI孙燕姿”…

LDA算法实现鸢尾花数据集降维

目录 1. 作者介绍2. LDA降维算法2.1 基本概念2.2 算法流程 3. LDA算法实现3.1 数据集介绍3.2 代码实现3.3 结果展示 1. 作者介绍 唐杰&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff…

深度学习笔记(八)——语义分割标注转换

核心思想&#xff1a;“将颜色转换成对应的标号” 形式一&#xff1a;Json格式的标注转换成调色板mask 形式二&#xff1a;RGB类型mask(24位三通道&#xff09;转成调色板mask&#xff08;8位单通道&#xff09;&#xff0c;调色板的格式为.png 形式三&#xff1a;对于二分类的…