1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Unity 阿里云 之 OSS对象存储功能的接入之图片处理

Unity 阿里云 之 OSS对象存储功能的接入之图片处理

时间:2020-09-03 03:20:14

相关推荐

Unity 阿里云 之 OSS对象存储功能的接入之图片处理

Unity 阿里云 之 OSS对象存储功能的接入之图片处理

目录

Unity 阿里云 之 OSS对象存储功能的接入之图片处理

一、简介和目的

二、实现要点

三、使用注意

四、测试效果

五、实现步骤

一、简介和目的

海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。

在Unity可用于文件的上传下载,只要引入对应的 dll 文件即可使用,很是方便。

这里实在下载图片的同时,并对图片进行简单的处理,比如添加水印,模糊高亮处理等,给图片添加一些简单的效果。

二、实现要点

1、在阿里云下载SDK,得到里面的 Aliyun.OSS.dll,引入Unity

2、在OSS对象存储 中的公有 Bucket 有图片文件

3、有阿里云 AccessKey

4、构建图片处理样式

5、关键代码

ossClient = new OssClient(...);GetObjectRequest getObjectRequest = new GetObjectRequest(Config.Bucket, filePath,pictureProcessCode);OssObject result = ossClient.GetObject(getObjectRequest);public class Config{public const string AccessKeyId = "<accessKeyId>"; public const string AccessKeySecret = "<accessSecret>";public const string EndPoint = "oss-cn-";public const string Bucket = "aliyunoss1116";}

三、使用注意

1、注意:在下载大文件的时候,请使用线程,避免主线程卡顿

2、注意:在使用多线程的时候,注意 UI 相关必须在 主线程中,不然会报错

四、测试效果

(这里仅仅添加水印效果)

五、实现步骤

1、登陆阿里云平台,找到 对象存储 OSS

2、点击进入后,进入 管理控制台

3、找到图片处理,新建样式,构建一个图片处理的效果样式,并确定保存

4、如果 Bucket 没有图片,可以对应上传一张图片作为测试

5、下载SDK,解压SDK包,然后 把 Aliyun.OSS.dll 引入Unity

6、对了,如果没有 AccessKey ,记得申请一个

7、获得后面 OssClient 的用到的 EndPoint 和 Bucket (根据自己新建的 Bucket 对号入座即可)

8、下载图片并进行图片处理的代码如下

using Aliyun.OSS;using mon;using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Threading;using UnityEngine;public class AliyunOSS_PictureHandle : MonoBehaviour{string filePath;string savePath;string pictureProcessCode; // 处理图片效果的代码Thread thread;Action<float> GetObjectProcessCallback;float getObjectProcess = 0;OssClient ossClient;// Start is called before the first frame updatevoid Start(){ossClient = new OssClient(Config.EndPoint, Config.AccessKeyId, Config.AccessKeySecret);}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space)){GetObjectByThread((process) => {Debug.Log("进度:" + process);},"M003.jpeg",@"C:\Users\Administrator\Desktop\" + "M003.jpeg","image/auto-orient,1/quality,q_90/sharpen,100/blur,r_4,s_20/watermark,text_aGVsbG8gd29ybGQ,size_40,shadow_100,x_10,y_10");}if (GetObjectProcessCallback != null){GetObjectProcessCallback(getObjectProcess);if (getObjectProcess >= 1){GetObjectProcessCallback = null;getObjectProcess = 0.0f;}}}public void GetObjectByThread(Action<float> action, string filePath, string savePath, string pictureProcessCode){this.GetObjectProcessCallback = action;this.filePath = filePath;this.savePath = savePath;this.pictureProcessCode = pictureProcessCode;thread = new Thread(GetObject);thread.Start();}void GetObject(){try{GetObjectRequest getObjectRequest = new GetObjectRequest(Config.Bucket, filePath,pictureProcessCode);getObjectRequest.StreamTransferProgress += StreamProcess;OssObject result = ossClient.GetObject(getObjectRequest);using (var resultStream = result.Content){using (var fs = File.Open(savePath, FileMode.OpenOrCreate)){int length = (int)resultStream.Length;byte[] bytes = new byte[length];do{length = resultStream.Read(bytes, 0, length);fs.Write(bytes, 0, length);} while (length != 0);}Debug.Log("图片处理并下载图片成功");}}catch (OssException e){print("进度下载文件出错:" + e.Message);}catch (Exception e){print("进度下载文件出错:" + e.Message);}finally{thread.Abort();}}private void StreamProcess(object sender, StreamTransferProgressArgs args){getObjectProcess = (args.TransferredBytes * 100 / args.TotalBytes) / 100.0f;}}public class Config{public const string AccessKeyId = "<accessKeyId>"; public const string AccessKeySecret = "<accessSecret>";public const string EndPoint = "oss-cn-";public const string Bucket = "aliyunoss1116";}

9、处理效果

10、应用场景:可以应用在批量上传,然后批量处理图片上

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。