[游戏开发-学习笔记]菜鸟慢慢飞(15)- Unity3D-图片压缩

先看代码:

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

/// <summary>
/// 图片压缩工具
/// </summary>
public class CompressPictureHelper :MonoBehaviour
{

    private static CompressPictureHelper _instance;

    public static CompressPictureHelper Instance
    {
        get {
            if (_instance == null) {  // 如果没有找到
                GameObject go = new GameObject ("_CompressPictureHelper"); // 创建一个新的GameObject
                DontDestroyOnLoad (go);  // 防止被销毁
                _instance = go.AddComponent<CompressPictureHelper> (); // 将实例挂载到GameObject上
            }
            return _instance;
        }
    }

    /// <summary>
    /// 图片的限制大小
    /// </summary>
      int limitI=300;

/// <summary>
/// Compresses the picture.
/// </summary>
/// <param name="imagePath">Image path.</param>
/// <param name="action">成功返回原地址,失败返回null.</param>
    public  void CompressPicture(string imagePath,Action<string> action)
    {
        if (File.Exists(imagePath))
        {
            FileInfo f new FileInfo (imagePath);

            if ((f.Length/1024)>=limitI)
            {
//                Debug.Log ("开始压缩,图片原始大小为:" + f.Length/1000+"Kb");
            
                StartCoroutine (Compress(imagePath,delegate(string str)
                {
                    action(str);
                }));
            }
        }
    }

    IEnumerator Compress(string imagePath,Action<string>action)
    {  
        int qualityI = 100;
        WWW www new WWW ("file:///"+imagePath);  
        yield return www;  
        if (www.error!=null)
        {
            action (null);
            //发返回失败
        }
        else
        {
            Texture2D t2d = www.texture;
            byte[] b =  t2d.EncodeToJPG (qualityI);
            //        Debug.Log( "图原始读取的字节数 " + (b.Length/1000).ToString());

            while((b.Length/1024)>=limitI)
            {
                qualityI -= 5;
                b = t2d.EncodeToJPG (qualityI);
                //            Debug.Log ("当前大小:"+b.Length/1000);
            }

            //        Debug.Log ("压缩成功,当前大小:"+b.Length/1000);
            File.WriteAllBytes (imagePath,b);
            action (imagePath);
        }
    }  
}

注意点:

1 .  myTexture2D.EncodeToJPG();

  这里括号中如果不写,会默认为75.

2 .  压缩后的图片会替代原路径下的原文件

 

posted on 2017-04-10 14:46  虎鲨  阅读(1692)  评论(0编辑  收藏  举报

导航