开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1364

当前位置:游戏蛮牛 资源专区 项目源码

查看: 462|回复: 11

[Unity] unity的图片操作(texture2d,texture,sprite)

[复制链接]  [移动端链接]
5熟悉之中
520/1000
排名
4321
昨日变化
3

7

主题

36

帖子

520

积分

Rank: 5Rank: 5

UID
199915
好友
1
蛮牛币
1834
威望
0
注册时间
2017-1-8
在线时间
182 小时
最后登录
2018-5-25
发表于 2018-4-25 15:50:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
unity中常常用的图片格式就是texture/texture/sprite了。其中当满足unity解析格式的图片被拖入进去的话,就会自动被解析成了sprite类型的文件了。
平时的扩展常用的导入unity中的就是.png和.jpg格式了,拖入到unity中后会被自动解析成texture格式了,这个就是模型上可以用的贴图格式了,如果想将之改编成UI可用的格式的话,那就是将之转换成了Sprite格式的文件了。

texture和sprite的区别
区别在于:
Sprite 只能用在 Image 组件上.
其他格式使用 Raw Image.
sprite多了一些关于动画的控制.
Sprite可以做九宫.
Sprite一般用在小图.可以打Atlas.只能用默认压缩格式.
Texture可以选择Advance来控制更多选项.比如是否生成MipMaps.选择压缩格式等.可以通过 WWW 显示一张Texture
作者:余强
链接:https://www.zhihu.com/question/37687375/answer/102251359
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于Texture和Texture2D的区别
就好像Transform和RectTransform一样。


(1)传统IO操作
①将图片从某位置(如果是从网络,那么就需要socket,如果是本地,直接进行操作,总之就是将图片转换成流的形式进行操作了)加载入unity并且转换成sprite(中间会将图片转换成Texture或者Texture2D的格式)


//读取图片并转换为byte数组
    byte[] ReadPicture()
    {
        FileStream fs = new FileStream("e:/tsj.jpg", FileMode.Open);
        byte[] binary = new byte[fs.Length];
        fs.Read(binary, 0, (int)fs.Length);
        fs.Close();
        fs.Dispose();
        return binary;
    }
//上述得到的数组转换成Sprite
IEnumerator WritePicture()
    {
        Texture2D texture = new Texture2D(1024, 1024);
        texture.LoadImage(ReadPicture());
        Sprite prite = Sprite.Create(texture, new Rect(0, 0, 800, 531), new Vector2(0.5f, 0.5f));
        ima.sprite = prite;
        yield return 0;
        Resources.UnloadUnusedAssets();
    }
②将图片字节数组转换成图片并保存到某目录下。
//上述得到的数组写到资源目录下
   void WritePictureByte(byte [] picByte)
    {
        FileStream fs = new FileStream(Application.dataPath+"/aaa.jpg",FileMode.Create,FileAccess.Write);
        fs.Write(picByte,0,picByte.Length);
        fs.Close();
        fs.Dispose();
    }
③将unity中的Texture保存到某目录下
  private void ImageSaveLocal(Texture tex)
    {
        string path = null;
#if UNITY_
        path=Application.persistentDataPath+"/"+pic_fileName;
#elif UNITY_IPHONE
        path=Application.persistentDataPath+"/"+pic_fileName;
#elif UNITY_EDITOR
        path = Application.dataPath + "/" + "这里写图片名字.jpg";
#endif
        Texture2D saveImageTex = tex as Texture2D;
        FileStream newFs = new FileStream(path, FileMode.Create, FileAccess.Write);
        byte[] bytes = saveImageTex.EncodeToJPG();
        newFs.Write(bytes, 0, bytes.Length);
        newFs.Close();
        newFs.Dispose();
    }
④将Unity中的Sprite保存到某目录下(sprite-texture-字节流)
其实前面已经实现了大部分的功能,还没有实现的功能就是怎么从sprite转换成texture2d

//复杂的转换方法
public Texture2D SpriteToTexture(Sprite sprite)
    {
        Texture2D tex = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height, sprite.texture.format, false);
        tex.SetPixels(sprite.texture.GetPixels((int )sprite.rect.xMin,(int)sprite.rect.yMin,
            (int)sprite.rect.width,(int)sprite.rect.height));
        tex.Apply();
        return tex;
    }

当然也可以直接从要转换的Sprite上点出Texture,比如sprite.texture
目前尚且不知道区别在哪里。

当遇到权限问题的话,在图片的下面有一个Advance的下拉按钮,点击之后有一个Read/Write Enabled选项,勾上之后就可以正常的读写了。

(2)WWW的操作(代码相对简单,但是效率比较低)
用WWW进行加载的时候其实就直接省去了字节流的转换步骤,而直接用www.texture就可以拿到相应的jpg或者png格式的图片来了,而且因为省去了字节操作,Texture2D的创建也不用填入width和height了

    // 以WWW方式进行加载
    private void LoadByWWW()
    {
        StartCoroutine(Load());
    }

    IEnumerator Load()
    {
        double startTime = (double)Time.time;
        //请求WWW
        WWW www = new WWW("file://D:\\test.jpg");
        yield return www;        
        if(www != null && string.IsNullOrEmpty(www.error))
        {
            //获取Texture
            Texture2D texture=www.texture;

            //创建Sprite
            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
            image.sprite = sprite;

            startTime = (double)Time.time - startTime;
            Debug.Log("WWW加载用时:" + startTime);
        }
    }


回复

使用道具 举报

6蛮牛粉丝
1051/1500
排名
2713
昨日变化
3

0

主题

292

帖子

1051

积分

Rank: 6Rank: 6Rank: 6

UID
136635
好友
0
蛮牛币
1006
威望
0
注册时间
2016-2-15
在线时间
291 小时
最后登录
2018-5-24
发表于 2018-4-26 12:21:38 | 显示全部楼层
很好,谢谢

回复

使用道具 举报

排名
58635
昨日变化
9

0

主题

5

帖子

8

积分

Rank: 1

UID
278896
好友
0
蛮牛币
8
威望
0
注册时间
2018-4-26
在线时间
1 小时
最后登录
2018-4-26
发表于 2018-4-26 15:10:10 | 显示全部楼层
好东西,有用

回复

使用道具 举报

7日久生情
1764/5000
排名
4294
昨日变化
2

0

主题

1268

帖子

1764

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
3462
威望
0
注册时间
2017-12-9
在线时间
200 小时
最后登录
2018-5-23
发表于 2018-4-27 09:04:43 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

5熟悉之中
924/1000
排名
6522
昨日变化
2

0

主题

604

帖子

924

积分

Rank: 5Rank: 5

UID
21411
好友
1
蛮牛币
984
威望
0
注册时间
2014-4-15
在线时间
142 小时
最后登录
2018-5-21
发表于 2018-4-30 19:58:44 | 显示全部楼层
谢谢分享

回复

使用道具 举报

6蛮牛粉丝
1051/1500
排名
2713
昨日变化
3

0

主题

292

帖子

1051

积分

Rank: 6Rank: 6Rank: 6

UID
136635
好友
0
蛮牛币
1006
威望
0
注册时间
2016-2-15
在线时间
291 小时
最后登录
2018-5-24
发表于 2018-5-2 09:02:01 | 显示全部楼层
很好,谢谢

回复

使用道具 举报

2初来乍到
118/150
排名
15843
昨日变化
394

0

主题

58

帖子

118

积分

Rank: 2Rank: 2

UID
278671
好友
0
蛮牛币
171
威望
0
注册时间
2018-4-24
在线时间
22 小时
最后登录
2018-5-25
发表于 2018-5-3 15:42:39 | 显示全部楼层
风格十分的广泛的身高收费的感受到

回复 支持 反对

使用道具 举报

3偶尔光临
200/300
排名
15093
昨日变化
337

1

主题

118

帖子

200

积分

Rank: 3Rank: 3Rank: 3

UID
277168
好友
0
蛮牛币
476
威望
0
注册时间
2018-4-14
在线时间
39 小时
最后登录
2018-5-25
发表于 2018-5-5 08:57:59 | 显示全部楼层
感谢楼主

回复

使用道具 举报

7日久生情
1764/5000
排名
4294
昨日变化
2

0

主题

1268

帖子

1764

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
3462
威望
0
注册时间
2017-12-9
在线时间
200 小时
最后登录
2018-5-23
发表于 2018-5-11 11:52:00 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

7日久生情
1764/5000
排名
4294
昨日变化
2

0

主题

1268

帖子

1764

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
3462
威望
0
注册时间
2017-12-9
在线时间
200 小时
最后登录
2018-5-23
发表于 2018-5-11 12:00:30 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

5熟悉之中
924/1000
排名
6522
昨日变化
2

0

主题

604

帖子

924

积分

Rank: 5Rank: 5

UID
21411
好友
1
蛮牛币
984
威望
0
注册时间
2014-4-15
在线时间
142 小时
最后登录
2018-5-21
发表于 2018-5-15 19:07:42 | 显示全部楼层
谢谢分享

回复

使用道具 举报

3偶尔光临
188/300
排名
11900
昨日变化
178

0

主题

79

帖子

188

积分

Rank: 3Rank: 3Rank: 3

UID
192389
好友
0
蛮牛币
286
威望
0
注册时间
2016-12-14
在线时间
41 小时
最后登录
2018-5-25
发表于 4 天前 | 显示全部楼层
學習了! 非常實用 謝謝

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表