起因:有个需求要批量按比例调整UI页面大小。并不是简单的缩放,是所有素材都需要按比例缩小。于是,图片首当其冲。这里记录一下解决方案,因为参考了挺多别人的事例,虽然都描述的都差不多,但大部分都只描述了方法,这里记录一下整个完整的方案。

环境:Unity2019.4.10f1
需求是是要把所有的图片按照从 1080x2160 到 720x1440 的等比缩小

直接上代码吧

 public static void ChangeImageSize(){//获取需要处理的文件夹var oripath = Application.dataPath;string path = oripath.Substring(0, oripath.LastIndexOf("/", oripath.LastIndexOf("/") - 1)) +"/art/UIProject/assets";//获取文件夹下的所有文件  DirectoryInfo direction = new DirectoryInfo(path);//DirectoryInfo.GetFiles返回当前目录的文件列表   FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);//使用UNITY的进度条来显示处理进度var index = 0;EditorApplication.update = delegate(){bool isCancel =EditorUtility.DisplayCancelableProgressBar("处理中...", files[index].Name,(float) index / files.Length);//从所有文件中筛选出来图片资源if (!files[index].Name.EndsWith(".png") && !files[index].Name.EndsWith(".jpg")){index++;}else{string xmlName = files[index].Name.Split('.')[0];//图片的处理方案var myBitmap = new System.Drawing.Bitmap(files[index].FullName);var x = Mathf.CeilToInt(myBitmap.Width * 720 / 1080f);var y = Mathf.CeilToInt(myBitmap.Height * 1440 / 2160f);var b = new System.Drawing.Bitmap(x, y);var g = System.Drawing.Graphics.FromImage(b);// 插值算法的质量 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.DrawImage(myBitmap, new System.Drawing.Rectangle(0, 0, x, y),new System.Drawing.Rectangle(0, 0, myBitmap.Width, myBitmap.Height),System.Drawing.GraphicsUnit.Pixel);g.Dispose();myBitmap.Dispose();//存到原图的位置b.Save(files[index].FullName);b.Dispose();index++;}if (isCancel || index >= files.Length){EditorUtility.ClearProgressBar();EditorApplication.update = null;if (isCancel){EditorUtility.DisplayDialog("取消提示", "取消处理后需要把已处理的文件还原才能再次处理。", "确认");}if (index >= files.Length){EditorUtility.DisplayDialog("图片处理完成", "处理一次即可,如果误操作,需要把对应目录下所有图片文件还原", "确认");}}};//原始处理方案,省了Unity进度条等花里胡哨的东西。// for (int i = 0; i < files.Length; i++)// {//     if (!files[i].Name.EndsWith(".png") && !files[i].Name.EndsWith(".jpg")) continue;//     string xmlName = files[i].Name.Split('.')[0];//     Debug.Log("imageName:" + xmlName);//     var myBitmap = new System.Drawing.Bitmap(files[i].FullName);//     var x = Mathf.CeilToInt(myBitmap.Width * 720 / 1080f);//     Debug.Log("x:" + x);//     var y = Mathf.CeilToInt(myBitmap.Height * 1440 / 2160f);//     Debug.Log("y:" + y);//     var b = new System.Drawing.Bitmap(x, y);//     var g = System.Drawing.Graphics.FromImage(b);//     // 插值算法的质量 //     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//     g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;//     g.DrawImage(myBitmap, new System.Drawing.Rectangle(0, 0, x, y),//         new System.Drawing.Rectangle(0, 0, myBitmap.Width, myBitmap.Height),//         System.Drawing.GraphicsUnit.Pixel);//     g.Dispose();//     myBitmap.Dispose();//     b.Save(files[i].FullName);//     b.Dispose();// }}

这里只是把图片的大小做了变更,其他的属性都可以类比一下更改。

当然需要注意的有一点,就是代码里使用的System.Drawing这个类Unity里面是不包含的。
我们可以通过在Plugins的目录下添加System.Drawing.dll这个文件来达到使用该类的目的。
另外也可以直接通过C#生成解决方案来处理。即直接使用C#使用 原始处理方案 部分代码生成windows桌面程序等来处理。因为很多工具在你创建C#方案时默认是包含该工具类的。

另外有可能在你处理过程中可能会出现如下报错。

这种错误的话可以检查一下自己传递的参数有没有问题,因为你如果是计算出图片宽高的话,很有可能因为四舍五入导致某个数值为0,这时候可能就会报这个错误。

以上。

抽空把工具整理了一下,大家可以下载尝试一下。工程链接
可以下载下面这些来文件来使用。

功能大概就是指定文件或文件夹按格式来处理图片大小。

使用 C# / Unity 进行图像处理相关推荐

  1. 打靶识别(Opencv For Unity惊现bug)

    在使用opencv for unity做图像处理的时候突然出现bug,就是读取工程目录下的图片时会无法读到图像,我使用的是Imgcodecs.imread(imgpath, 1),这一句语句来读图像, ...

  2. Unity技术分享之调用Youtu实现智能AI图像处理人脸识别,证照识别等

    最近因在研究图像解析的过程中无意看到了腾讯优图免费API的事情,就是天天P图的技术支持,感觉挺有意思的,官方的C#API是:根(qq418871901)在维护. 腾讯优图是腾讯旗下顶级的机器学习研发团 ...

  3. unity抠人像原理_c# 利用百度图像处理【人像分割】一键抠图

    百度AI开放平台-人像分割: http://ai.baidu.com/tech/body/seg 注意本文后面的话,百度这个技术效果太差劲了,国外这 https://www.remove.bg/ 个比 ...

  4. figma下载_Figma中的高级图像处理

    figma下载 Figma is not exactly suited for image manipulation, and that's completely fine. While it doe ...

  5. unity 全息交互ui_UI向3D投影全息界面的连续发展

    unity 全息交互ui The user interface has been natural in its evolution and strategically heading towards ...

  6. UnityShader25:在Unity中实现泛光

    一.需要提前了解的 这一章的例子非常的综合,可以说是知识点广而全,如果能独立在 Unity 中实现一个不错的泛光效果,那么 UnityShader 就算作入门成功!本章没有新的东西 曾经在 OpenG ...

  7. 基于Unity的VR迷宫游戏项目技术分享

    一.项目重述 项目重述如下: 在移动端设计一个可参与的创作平台,结合计算机视觉相关技术,获取物理空间中的迷宫设计图: 将移动端获得的迷宫数据转换为三维虚拟场景,并在VR端呈现: 开发基于Unity 3 ...

  8. 2D Pixel Perfect:使用Unity创建任天堂红白机风格复古游戏

    拥有简单机制和像素图形的复古游戏,可以勾起老玩家很多美好的回忆,同时也会给年轻玩家带来亲切感. 许多游戏都带有"复古"的标签,但创作一款带有怀旧外观和感觉的游戏需要不少精力和构思, ...

  9. 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊

    发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章. 参考:[Unity Shader编程]之十五 屏幕高斯模糊 ...

最新文章

  1. 论文《城市大脑的定义与建设规范探讨》在IEEE(ICBAIE)发表
  2. [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库
  3. AndroidStudio跑起来第一个App时新手遇到的那些坑
  4. 开博 即便网络工程师真的没落了,兴趣不是最重要的么?
  5. matlab7.0安装说明
  6. 【LeetCode笔记】128. 最长连续序列(Java、哈希表、动态规划)
  7. DRDS SQL 审计与分析——全面洞察 SQL 之利器
  8. 创建目录_聊聊Word创建目录那些事儿
  9. sqlserver 没有维护计划_制定数据库备份计划,不再为数据丢失闹心!
  10. Apache Flink 简单安装
  11. C++类引用中的构造函数与析构函数的执行顺序练习
  12. 【夯实基础】Spring在ssh中的作用
  13. Origin 2017 给曲线加标记符号
  14. IP地址屏蔽功能设计
  15. java实现微信企业号API服务端调用封装
  16. 服务器维保价格标准_标准维护服务方案
  17. 多类隶属度的模糊支持向量机(FSVM)
  18. Taobao平台API的应用场景和实例
  19. Docker部署深度学习服务器,CUDA+cudnn+ssh
  20. 使用Saminside+Ophcrack破解本地用户密码

热门文章

  1. 漆远:蚂蚁金服 AI 技术大揭秘, 开放“模型服务平台”
  2. 从前有一个程序员,成天写代码,后来。。。
  3. 七夕夜、离别,涵情经河岸
  4. HitFilm Pro16安装教程(文字+图片详细安装教程)
  5. [深入理解Android卷二 全文-第六章]深入理解ActivityManagerService
  6. 如何将域名解析度aws_使用信息上下文的aws appsync条件解析器
  7. 辅助挂机掉线?如何破?
  8. kali linux菜单中各工具功能
  9. 【小白向】Kali Linux DHCP服务器的安装,配置及启动
  10. 虚拟机同步器用易语言怎么写_开学了家长寄语怎么写?用便签软件辅助很简单...