首页 > 其他分享 >Unity png形式的图集拆除子图并把新的子png转换成sprite

Unity png形式的图集拆除子图并把新的子png转换成sprite

时间:2023-07-31 10:34:44浏览次数:36  
标签:fs sprite textureImporter 子图 int png string

  /// <summary>
    /// 图集形式为.png形式  并在unity中有很多sprite的子图 
    /// </summary>
    private void AtlasSplit()
    {
        string guidStr = Selection.assetGUIDs[0];
        string path = AssetDatabase.GUIDToAssetPath(guidStr);
        Object[] spriteAtlas = AssetDatabase.LoadAllAssetsAtPath(path);
        string dirName = path.Substring(path.LastIndexOf("/") + 1).Replace(".png", "");

        string targetPath = $"Assets/{dirName}";
        if (!Directory.Exists(targetPath))
        {
            Directory.CreateDirectory(targetPath);
            AssetDatabase.Refresh();
        }

        for (int i = 0; i < spriteAtlas.Length; i++)
        {
            if (spriteAtlas[i] is Sprite sprite)
            {
                int spriteX = (int) sprite.rect.x;
                int spriteY = (int) sprite.rect.y;
                int spriteW = (int) sprite.rect.width;
                int spriteH = (int) sprite.rect.height;

                Texture2D texture2D = new Texture2D(spriteW, spriteH, TextureFormat.RGBA32, false);
                //sprite.texture 实际上是主图png的信息  所以直接在主图上取像素点
                texture2D.SetPixels(sprite.texture.GetPixels(spriteX, spriteY, spriteW, spriteH));
                string pngPath = $"{targetPath}/{sprite.name}.png"; 
                using (FileStream fs = new FileStream(pngPath, FileMode.Create, FileAccess.Write))
                {
                    byte[] bytes = texture2D.EncodeToPNG();
                    fs.Write(bytes, 0, bytes.Length);
                    fs.Flush();
                    fs.Close();
                    fs.Dispose();
                    AssetDatabase.Refresh();
                }

                TextureImporter textureImporter = AssetImporter.GetAtPath(pngPath) as TextureImporter;
                PngToSprite(textureImporter);
            }
        }
        AssetDatabase.Refresh();
    }
    /// <summary>
    /// png转成sprite
    /// </summary>
    /// <param name="textureImporter"></param>
    private void PngToSprite(TextureImporter textureImporter)
    {
        if (textureImporter != null && textureImporter.textureType != TextureImporterType.Sprite)
        {
            textureImporter.textureType = TextureImporterType.Sprite;
            textureImporter.spriteImportMode = SpriteImportMode.Single;
            textureImporter.spritePixelsPerUnit = 100;
            textureImporter.textureCompression = TextureImporterCompression.Compressed;
            textureImporter.SaveAndReimport();
        }
    }

 

标签:fs,sprite,textureImporter,子图,int,png,string
From: https://www.cnblogs.com/zjp959/p/17592782.html

相关文章

  • Sprite padding, innerUV, outerUV的解释
    1)Rectrect;SpriteMode为Single时:x,y总是为0;width,height为裁掉空白像素前的大小2)Vector2textureRectOffset;左下角裁掉了多少空白像素3)RecttextureRect;x,y为Sprite左下角的坐标(图集左下角为原点);width,height为裁掉空白像素后的大小4)Vector4paddin......
  • CSS Sprites + 圆角
    初步介绍当然,我知道现在有成千上万个关于用CSS处理圆角的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常有用。需要重点指出的是,这篇教程彻底地应用高级CSS技术,但是,我会尽力使初学者看起来简单。CSS3在这里还没有得到完全的应用,所以,知道现在,我会保......
  • 免费的PNG素材资源网站推荐
    很多设计小白都不知道什么是PNG。事实上,PNG是一种支持透明度的图像格式。当你想在设计中将图像与背景或文本混合时,它就会派上用场。如果你没有时间为你正在处理的设计创建透明的PNG图像,你也可以使用我收集的PNG素材网站,以便每次需要透明的PNG图像时都可以参考。1.即时设计即时......
  • matplotlib绘图与子图
    matplotlib绘图与子图目录matplotlib绘图与子图绘图基础plt.figurefig.subplotsfig.add_subplotfig.add_axes缺省和就近原则总结绘图基础画布figure,代表了整幅图,通过包括底图、axes对象以及其它图元素的方式,囊括了全部图元素。axes对象(图形区)总是从属于.figure类对象,......
  • java jpg转png透明背景
    Java实现JPG转PNG透明背景在图像处理中,JPG和PNG是两种常见的图片格式。JPG是无损压缩格式,适用于颜色较多的照片,而PNG是一种无损压缩格式,适用于需要保留透明背景的图片。有时候我们可能需要将JPG格式的图片转换为PNG格式,并且保留透明背景。本文将介绍如何使用Java代码实现JPG转PNG......
  • 基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱、订酒店吃饭事件图谱等
    基于50W携程出行攻略构建事件图谱(含码源):交通工具子图谱、订酒店吃饭事件图谱等项目构成本项目由两个部分的组成,具体包括语料的获取以及基于语料的事件挖掘两个部分,具体项目目录包括:news_spider:基于scrapy的游记采集脚本event_graph:基于依存句法与顺承模式的顺承事件抽......
  • php做的中秋博饼游戏之绘制骰子图案功能示例
    先看代码header('Content-Type:image/png');$img=imagecreatetruecolor(200,200);$white=imagecolorallocate($img,255,255,255);$grey=imagecolorallocate($img,100,100,100);$blue=imagecolorallocate($img,0,102,255);$red=imagecolorallocat......
  • linux:安装png的库libpng(rocky linux 9.2)
    一,dwebp/cwebp缺少libpng库时的报错:[root@localhostwork]#dwebpa.webp-oa.pngDecodeda.webp.Dimensions:856x300.Format:lossy.Nowsaving...PNGsupportnotcompiled.Pleaseinstallthelibpngdevelopmentpackagebeforebuilding.Youcanrunwith......
  • linux:svg转png(rsvg-convert 2.50.7/ubuntu 21.10)
    一,直接用ImageMagick把svg转为png时有瑕疵1,例子:原图:转换命令:liuhongdi@lhdpc:/data/work/tmpimg$convertgo-logo-blue.svggo.png效果如下:转换完后图片不完整2,查看convert是否调用rsvg-convert确实调用了,但不确定为什么会出现此情况liuhongdi@lhdpc:/data/w......
  • OpenCV计算机视觉学习(14)——浅谈常见图像后缀(png, jpg, bmp)的区别(opencv读取语义分割m
    如果需要处理的原图及代码,请移步小编的GitHub地址传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 本来不想碎碎念,但是我已经在图像后缀上栽倒两次了。而且因为无意犯错,根本找不到问题。不论是在深度学习的语义分割中,还是在图......