Unity 压缩texture
当我们往服务器保存图片时
并不会仅仅保留原图
一般会另外保存一张缩略图
当加载文件夹时只加载缩略图
当在点击缩略图打开图片时
再加载原缩略图
以节省时间和内存
下面以将屏幕截图保存到服务器为例
将屏幕截图和截图缩略图保存到服务器
private IEnumerator UploadPNG(string id)
{
yield return new WaitForEndOfFrame(); int width = Screen.width;
int height = Screen.height; //屏幕截图
Texture2D tex = new Texture2D(width, height, TextureFormat.ARGB32, false);
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();
byte[] bytes = tex.EncodeToPNG(); //缩略图(256*256)
Texture2D texThumb = new Texture2D(256, 256); //压缩图片
Color[] destPix = new Color[texThumb.width * texThumb.height];
float warpFactor = 1.0f;
int y = 0;
while (y < texThumb.height)
{
int x = 0;
while (x < texThumb.width)
{
float xFrac = x * 1.0F / (texThumb.width - 1);
float yFrac = y * 1.0F / (texThumb.height - 1);
float warpXFrac = Mathf.Pow(xFrac, warpFactor);
float warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c0 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = y * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c1 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = y * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c2 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c3 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 0) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c4 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = (y - 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c5 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x + 1) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c6 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 0) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c7 = tex.GetPixelBilinear(warpXFrac, warpYFrac); xFrac = (x - 1) * 1.0F / (texThumb.width - 1);
yFrac = (y + 1) * 1.0F / (texThumb.height - 1);
warpXFrac = Mathf.Pow(xFrac, warpFactor);
warpYFrac = Mathf.Pow(yFrac, warpFactor);
Color c8 = tex.GetPixelBilinear(warpXFrac, warpYFrac); Color cr = c0 * 0.25f + c1 * 0.125f + c2 * 0.125f + c3 * 0.0625f + c4 * 0.125f + c5 * 0.0625f + c6 * 0.0625f + c7 * 0.125f + c8 * 0.0625f; destPix[y * texThumb.width + x] = cr; x++;
}
y++;
}
texThumb.SetPixels(destPix);
texThumb.Apply();
byte[] bytesThumb = texThumb.EncodeToPNG();
Destroy(tex);
Destroy(texThumb);
//WWWForm上传到服务器
WWWForm form = new WWWForm();
form.AddField("cmd", "savedraw");
form.AddBinaryData("screenshot", bytesThumb);
form.AddBinaryData("draw", bytes); WWW w = new WWW(url, form);
yield return w; if (w.error != null)
{
Debug.Log("Error:" + w.error);
}
else
Debug.Log("OK");
}
声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,并请明示指出
Unity 压缩texture的更多相关文章
- Unity使用 16bit 压缩 Texture 颜色能均匀过渡
下面是unity自带 16bit 图 的效果,可以看到颜色过度的很不均匀,占用内存 0.5M 如果调成 truecolor 后 颜色过渡很均匀,而内存却占到 1.1 M 讲图片 后缀名改成 ...
- unity读取Texture文件并转为Sprit
using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; usin ...
- unity texture 占用内存大小对比
打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...
- Unity3D–Texture图片空间和内存占用分析(转载)
原地址:http://www.unity蛮牛.com/home.php?mod=space&uid=1801&do=blog&id=756 Texture图片空间和内存占用分析 ...
- 二维纹理 Texture 2D
Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...
- unity 接触一个月的感受和心得
unity scrollview 遇到的问题 一个scrollview作为翻页,这样的效果调整. 一页上面有三个scrollview,这三个scrollview上的items不受下层整个页面的scro ...
- Unity 相关经典博客资源总结(持续更新)
就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: Unity官方脚本 点评:这个不用说了,最核心的内容,理解整个Unity引擎的方方面面,梳理结构. Unity ...
- 【转】Unity 相关经典博客资源总结(持续更新)
原文:http://blog.csdn.net/prothi/article/details/20123319 就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: ...
- Unity动态字体在手机上出现字体丢失问题解决
在我们游戏的开发过程中,在部分手机上运行游戏的时候,出现了字体丢失的问题,出问题的手机似乎用的都是高通芯片. 使用的unity是4.2.0版本,ngui是3.4.9版本. 在unity的论坛及unit ...
随机推荐
- oracle sql 分页
Oracle实现分页时,需要引入一个rownum的函数,rownum可以给记录一个类似于id的字段. 以下收整理了常用的几种sql分页算法,数据库以Oracle中emp为例.查询结果如下: SQL&g ...
- Struts1.x教程:配置文件总结
要想使用Struts,至少要依靠两个配置文件:web.xml和struts-config.xml.其中web.xml用来安装Struts框架.而struts-config.xml用来配置在Struts ...
- Naive Bayes在mapreduce上的实现(转)
Naive Bayes在mapreduce上的实现 原文地址 http://www.cnblogs.com/sunrye/p/4553732.html Naive Bayes是比较常用的分类器,因为思 ...
- How to create a zip file in NetSuite SuiteScript 2.0 如何在现有SuiteScript中创建和下载ZIP压缩文档
Background We all knows that: NetSuite filecabinet provided a feature to download a folder to a zip ...
- docker rancher 体验 (未完待续.....)
docker rancher 体验 官方 githubhttps://github.com/rancher/rancher 环境说明: 10.6.0.14010.6.0.18710.6.0.188 修 ...
- zookeeper启动失败
集群中3个节点,第一个started,第二个说Starting zookeeper ... already running as process xxxx,第三个说Starting zookeeper ...
- Polipo
polipo代理服务器简介 HTTP代理polipo的配置与使用:http://wuwei5460.blog.51cto.com/2893867/1407369/
- SQL复习三(子查询)
子查询 子查询就是嵌套查询,即select中包含这select,如果一条语句中存在着两个,或者两个以上的select,那么就是子查询语句了. 子查询出现的位置 where后,作为条件的一部分: fro ...
- 轻量级sqlite是增删改查
--创建数据库 create database ios --使用数据库 use ios --创建数据表 create table student ( stuid int primary key aut ...
- [Lua]Mac系统上安装Lua环境
1.下载 Lua语言的官方网站 http://www.lua.org/ 下载最新版本的Lua环境 2.安装 解压下载包lua-5.3.1.tar.gz 打开终端Terminal 使用cd命令进入该目录 ...