Unity实现图片生成灰白图的方法

本文实例为大家分享了Unity生成图片灰白图的具体代码,供大家参考,具体内容如下

效果

原图

生成出来的灰白图

制作方法

把文章末尾的的TextureUtils.cs脚本放到工程的Assets / Editor目录中

然后选中项目中的一张图片,然后点击菜单Tools / GenGrayTexture

就会在同级目录中生成灰白图片了

// TextureUtils.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;

public class TextureUtils : MonoBehaviour
{
 [MenuItem("Tools/GenGrayTexture")]
 public static void GenGrayTexture()
 {
  // 获取选中的图片
  var textures = Selection.GetFiltered<Texture2D>(SelectionMode.DeepAssets);
  foreach (var t in textures)
  {
   var path = AssetDatabase.GetAssetPath(t);

   // 如果提示图片不可读,需要设置一下isReadable为true, 操作完记得再设置为false
   var imp = AssetImporter.GetAtPath(path) as TextureImporter;
   imp.isReadable = true;
   AssetDatabase.ImportAsset(path);

   var newTexture = new Texture2D(t.width, t.height, TextureFormat.RGBA32, false);
   var colors = t.GetPixels();
   var targetColors = newTexture.GetPixels();

   for (int i = 0, len = colors.Length; i < len; ++i)
   {
    var c = colors[i];
    // 颜色值计算,rgb去平均值
    var v = (c.r + c.g + c.b) / 3f;
    targetColors[i] = new Color(v, v, v, c.a);
   }
   newTexture.SetPixels(targetColors);
   string fname = path.Split('.')[0] + "_gray.png";
   File.WriteAllBytes(fname, newTexture.EncodeToPNG());

   imp.isReadable = false;
   AssetDatabase.Refresh();
  }
 }
}

如果要批量修改,可以用Directory.GetFiles接口来获取特定格式的文件

var files = Directory.GetFiles("D:\\path", "*.*", SearchOption.AllDirectories);
foreach(var f in files)
{
 if(!f.EndsWith(".png") && !f.EndsWith(".jpg")) continue;
 // TODO...

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现图片水印生成

    本文实例为大家分享了Unity实现图片水印生成的具体代码,供大家参考,具体内容如下 用于图片分享时添加logo水印的功能,之前用来做你画我猜的方法,核心是用Texture2D中的 SetPixels方法 具体实现如下 效果图: 上代码,比较简单不多说了 using UnityEngine; using System.Collections; using UnityEngine.UI; public class WaterMarkAdd : MonoBehaviour { public Image

  • Unity UGUI实现简单拖拽图片功能

    这一篇博客我们来使用 UGUI 实现图片的拖拽功能. 说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标.),这两个坐标是不一样的,所以拖拽是就需要转换.因为鼠标的移动是屏幕坐标,而 UI 的移动是ugui坐标.转换的方法: RectTransformUtility.ScreenPointToLocalPointInRectangle ( - );这个方法可以把屏幕坐标转换成 ugui 坐标.至于

  • Unity 从Resources中动态加载Sprite图片的操作

    我就废话不多说了,大家还是直接看代码吧~ public Sprite LoadSourceSprite(string relativePath) { //Debug.Log("relativePath=" + relativePath); //把资源加载到内存中 Object Preb = Resources.Load(relativePath, typeof(Sprite)); Sprite tmpsprite = null; try { tmpsprite = Instantiat

  • Unity切割图集转换为多张图片

    本文实例为大家分享了Unity切割图集转换为多张图片的具体代码,供大家参考,具体内容如下 这是网上看来的一个工具,用于Unity中将图集切割为多张的格式后将这些sprite改为一张张图片,就是切割速度太慢,图集中的图片较多的时候还会丢失一部分图片,有时间本人会进一步改善再修改这篇博客. 1.首先选中要切割的图集,texture type 选为default,并勾选Advanced下的read/Write Enabled. 2.texture type改为sprite(2D and UI),Spr

  • unity将图片转换成字体的方法

    本文实例为大家分享了unity利用图片来生成字体的具体代码,供大家参考,具体内容如下 开发中,可能会用到需要将图片转换成字体的需求. BMFONT 插件 导入图片 然后生成 .fnt 和 .png 两个文件 (文件格式可以在设置中更改) 将这两个文件导入unity 将png 切割成精灵 创建材质.将贴图拖上去. 创建字体.将材质拖上去. 数据怎么算出来的公式百度上面有,此处略去.也可以利用代码来生成 using UnityEngine; using System.Collections; usi

  • unity 文件流读取图片与www读取图片的区别介绍

    IO流代码: void LoadByIO() { float time = Time.time; FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); fs.Seek(0, SeekOrigin.Begin); byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); fs.Close(); fs.Dispose(); fs =

  • Unity制作图片字体的方法

    本文实例为大家分享了Unity制作图片字体的具体代码,供大家参考,具体内容如下 主要步骤: 1.新建一个字体. 2.新建一个材质. 3.把上一步新建的材质赋值给第一步创建的字体. 4.设置字体的Character Rects的大小来划分字体. 例如划分这个图片,因其要分为12个字体所以Character Rects大小为12: Character Rects中每个单元格的计算方式如图所标记(比较的复杂,了解怎么计算就行,后期通过编辑器可以计算出来.) 5.把设置好的字体直接赋值给Text中的Fo

  • Unity实现图片生成灰白图的方法

    本文实例为大家分享了Unity生成图片灰白图的具体代码,供大家参考,具体内容如下 效果 原图 生成出来的灰白图 制作方法 把文章末尾的的TextureUtils.cs脚本放到工程的Assets / Editor目录中 然后选中项目中的一张图片,然后点击菜单Tools / GenGrayTexture 就会在同级目录中生成灰白图片了 // TextureUtils.cs using System.Collections; using System.Collections.Generic; usin

  • Unity生成图片灰白图的方法

    本文实例为大家分享了Unity生成图片灰白图的具体代码,供大家参考,具体内容如下 效果 原图 生成出来的灰白图 制作方法 把文章末尾的的TextureUtils.cs脚本放到工程的Assets / Editor目录中 然后选中项目中的一张图片,然后点击菜单Tools / GenGrayTexture 就会在同级目录中生成灰白图片了 // TextureUtils.cs using System.Collections; using System.Collections.Generic; usin

  • python将图片转为矢量图的方法步骤

    本文主要介绍了python图片转为矢量图,分享给大家,具体如下: import numpy as np import matplotlib.pyplot as plt import cv2 fig, ax = plt.subplots() plt.figure(1) image=cv2.imread("2.jpg") # you can specify the marker size two ways directly: # 这样一个一个像素太慢了故而要将同样颜色的坐标进行分类处理 c

  • python opencv将图片转为灰度图的方法示例

    使用opencv将图片转为灰度图主要有两种方法,第一种是将彩色图转为灰度图,第二种是在使用OpenCV读取图片的时候直接读取为灰度图. 将彩色图转为灰度图 import cv2 import numpy as np if __name__ == "__main__": img_path = "timg.jpg" img = cv2.imread(img_path) #获取图片的宽和高 width,height = img.shape[:2][::-1] #将图片缩小

  • vue+F2生成折线图的方法

    本文实例为大家分享了vue+F2生成折线图的具体代码,供大家参考,具体内容如下 1.效果图 2.打开命令窗口,通过 npm 安装F2 npm install @antv/f2 --save 3.使用 import 或 require 引入F2 const F2 = require('@antv/f2'); 4.在页面上创建一个具备宽高的 canvas 标签,并指定 id: <template>   <div class="container">     <

  • iOS 在线视频生成GIF图功能的方法

    在一些视频APP中,都可以看到一个将在线视频转成GIF图的功能.下面就来说说思路以及实现.我们知道本地视频可以生成GIF,那么将在线视频截取成本地视频不就可以了吗?经过比较,腾讯视频App也是这么做的.话不多说,下面开始上代码: 第一步:截取视频 #pragma mark -截取视频 - (void)interceptVideoAndVideoUrl:(NSURL *)videoUrl withOutPath:(NSString *)outPath outputFileType:(NSStrin

  • Android 实现图片生成卷角和圆角缩略图的方法

    在 Android 的一些界面中,有时候我们需要为一副图片生成大小为 n * n 的缩略图,有时候需要的缩略图特殊一些,比如: 1.带圆角的缩略图: 如果我们需要带圆角的缩略图,但提供的图片是 n * n 的正方形的图片,该怎么办?这时候可以在贴图之前,先利用 Paint.setXfermode 方法来设置图片叠加时的混合模式,从而达到目的.一般而言,使用方法如下: Paint paint = new Paint(); paint.setXfermode(new PorterDuffXfermo

随机推荐