当我们往服务器保存图片时

并不会仅仅保留原图

一般会另外保存一张缩略图

当加载文件夹时只加载缩略图

当在点击缩略图打开图片时

再加载原缩略图

以节省时间和内存

下面以将屏幕截图保存到服务器为例

将屏幕截图和截图缩略图保存到服务器

    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的更多相关文章

  1. Unity使用 16bit 压缩 Texture 颜色能均匀过渡

    下面是unity自带 16bit 图 的效果,可以看到颜色过度的很不均匀,占用内存 0.5M    如果调成 truecolor 后 颜色过渡很均匀,而内存却占到 1.1 M    讲图片 后缀名改成 ...

  2. unity读取Texture文件并转为Sprit

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

  3. unity texture 占用内存大小对比

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...

  4. Unity3D–Texture图片空间和内存占用分析(转载)

    原地址:http://www.unity蛮牛.com/home.php?mod=space&uid=1801&do=blog&id=756 Texture图片空间和内存占用分析 ...

  5. 二维纹理 Texture 2D

    Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...

  6. unity 接触一个月的感受和心得

    unity scrollview 遇到的问题 一个scrollview作为翻页,这样的效果调整. 一页上面有三个scrollview,这三个scrollview上的items不受下层整个页面的scro ...

  7. Unity 相关经典博客资源总结(持续更新)

    就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: Unity官方脚本  点评:这个不用说了,最核心的内容,理解整个Unity引擎的方方面面,梳理结构. Unity ...

  8. 【转】Unity 相关经典博客资源总结(持续更新)

    原文:http://blog.csdn.net/prothi/article/details/20123319 就作为一个记录吧,把平时看过的Unity相关的一些好的Blog记录并分享. 好的论坛: ...

  9. Unity动态字体在手机上出现字体丢失问题解决

    在我们游戏的开发过程中,在部分手机上运行游戏的时候,出现了字体丢失的问题,出问题的手机似乎用的都是高通芯片. 使用的unity是4.2.0版本,ngui是3.4.9版本. 在unity的论坛及unit ...

随机推荐

  1. 计算n!的位数<Math>

    题意:如题目. 方法一:<TLE> * 可设想n!的结果是不大于10的M次幂的数,即n!<=10^M(10的M次方),则不小于M的最小整数就是 n!的位数,对 * 该式两边取对数,有 ...

  2. ZOJ 3696 Alien's Organ 概率论 泊松分布

    看了好久的题,但还是看得一脸蒙圈,感觉完全无从下手,我的队友告诉我可能是正太分布之类的,但我感觉不太像,后来才听同学说是泊松分布,才恍然大悟,概率论刚刚学过这里不久,不禁感叹,学会了还要会用啊... ...

  3. PHP文件夹操作

    文件:文件+目录 判断文件类型: filetype("路径"); //返回一个字符串 is_dir("路径"); //如果是目录会返回true 判断文件是不是目 ...

  4. XHTML与HTML的差别

    HTML与XHTML之间的差别,粗略可以分为两大类比较:一个是功能上的差别,另外是书写习惯的差别.关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页. ...

  5. Client与Server

    监听套接字,通讯套接字,初始化网卡,多线程.想查自己的IP,ipconfig 服务端 #include "stdafx.h" #include <WinSock2.h> ...

  6. iReport使用教程

    http://www.blogjava.net/keweibo/articles/239492.html 原创出处 http://blog.163.com/liushuo216@126/blog/st ...

  7. java war 打包、解压命令(转载)

    经常将工程打包成war包,打包如下: // 将当前目录打包成war包 jar   cvf   temp.war   */  . 命令格式: java cvf 打包文件名称 要打包的目录 打包文件保存路 ...

  8. HTML表格边框的设置小技巧-表格

    对于很多初学HTML的人来说,表格<table>是最常用的标签了,但对于表格边框的控制,很多初学者却不甚其解. 一般我们用表格的时候总会给它个border属性,比如:<table b ...

  9. Yaf 使用遇到的坑

    yaf 使用心得: 1.    yaf中使用__get魔术方法后,直接导致模板不能自动渲染,需要手动指定模板 ? 1 $this->getView()->display('index/in ...

  10. (中等) POJ 2528 Mayor's posters , 离散+线段树。

    Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...