游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1427

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

查看: 1161|回复: 15

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

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

8

主题

44

帖子

713

积分

Rank: 5Rank: 5

UID
199915
好友
1
蛮牛币
2316
威望
0
注册时间
2017-1-8
在线时间
243 小时
最后登录
2018-10-19
发表于 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蛮牛粉丝
1467/1500
排名
1954
昨日变化

0

主题

376

帖子

1467

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

排名
62069
昨日变化
102

0

主题

5

帖子

8

积分

Rank: 1

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

回复

使用道具 举报

7日久生情
2632/5000
排名
2567
昨日变化

0

主题

1762

帖子

2632

积分

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
976/1000
排名
6717
昨日变化

0

主题

642

帖子

976

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

6蛮牛粉丝
1467/1500
排名
1954
昨日变化

0

主题

376

帖子

1467

积分

Rank: 6Rank: 6Rank: 6

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

回复

使用道具 举报

3偶尔光临
196/300
排名
11769
昨日变化
4

0

主题

77

帖子

196

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

5熟悉之中
580/1000
排名
5795
昨日变化
31

2

主题

183

帖子

580

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

7日久生情
2632/5000
排名
2567
昨日变化

0

主题

1762

帖子

2632

积分

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

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

回复 支持 反对

使用道具 举报

7日久生情
2632/5000
排名
2567
昨日变化

0

主题

1762

帖子

2632

积分

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
976/1000
排名
6717
昨日变化

0

主题

642

帖子

976

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

5熟悉之中
574/1000
排名
5829
昨日变化
3

0

主题

206

帖子

574

积分

Rank: 5Rank: 5

UID
192389
好友
1
蛮牛币
846
威望
0
注册时间
2016-12-14
在线时间
144 小时
最后登录
2018-10-18
发表于 2018-5-22 09:37:15 | 显示全部楼层
學習了! 非常實用 謝謝

回复 支持 反对

使用道具 举报

4四处流浪
426/500
排名
5637
昨日变化
1

0

主题

72

帖子

426

积分

Rank: 4

UID
71644
好友
0
蛮牛币
687
威望
0
注册时间
2015-1-28
在线时间
120 小时
最后登录
2018-10-22
发表于 2018-5-28 15:30:18 | 显示全部楼层
看这很牛的资源

回复

使用道具 举报

4四处流浪
421/500
排名
6466
昨日变化

0

主题

147

帖子

421

积分

Rank: 4

UID
114090
好友
0
蛮牛币
262
威望
0
注册时间
2015-7-18
在线时间
78 小时
最后登录
2018-10-22
发表于 2018-6-14 20:31:28 | 显示全部楼层
好东西,有用

回复

使用道具 举报

排名
17991
昨日变化
6

0

主题

19

帖子

86

积分

Rank: 2Rank: 2

UID
213764
好友
0
蛮牛币
18
威望
0
注册时间
2017-3-22
在线时间
37 小时
最后登录
2018-7-19
发表于 2018-7-18 16:54:32 | 显示全部楼层
小心脏 PPT (つˆᴗˆ)つ⊂(・﹏・⊂)

回复 支持 反对

使用道具 举报

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

本版积分规则

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