unity 处理图片:截图,下载,保存
原图</param>/// <param name="url">保存地址
1.场景上加入图片处理代码类
using System;
using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
namespace MyPictrue
{
/// <summary>
/// 处理图片:截图,下载,保存
/// </summary>
public class ProcessImages : MonoBehaviour
{
private static ProcessImages _instance;
private static ProcessImages Instance
{
get
{
if (_instance == null)
{
GameObject obj = new GameObject("ProcessImages");
_instance = obj.AddComponent<ProcessImages>();
DontDestroyOnLoad(obj);
}
return _instance;
}
}
/// <summary>
/// 截图
/// </summary>
/// <returns></returns>
public static void ScreenshotPictrue(GetPicture callBack)
{
Instance.StartCoroutine(Instance.waitTimeGetPicture(callBack));
}
protected IEnumerator waitTimeGetPicture(GetPicture callBack)
{
yield return new WaitForEndOfFrame();
//截图
Texture2D pictrue;
var rect = new Rect(0, 0, Screen.width, Screen.height);
pictrue = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
pictrue.ReadPixels(rect, 0, 0);
pictrue.Apply();
callBack?.Invoke(pictrue);
}
/// <summary>
/// 下载图片
/// </summary>
/// <param name="url"></param>
/// <param name="onload"></param>
/// <param name="onError"></param>
public static void LoadImage(string url, LoadImageTexture onload, LoadImageError onError)
{
Instance.StartCoroutine(Instance.Load(url, onload, onError));
}
protected IEnumerator Load(string url, LoadImageTexture onload, LoadImageError onError)
{
//加载图片
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(url))
{
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.ConnectionError)
{
Texture2D tx = DownloadHandlerTexture.GetContent(www);
onload?.Invoke(tx);
}
else
{
onError?.Invoke(www.result);
}
}
}
/// <summary>
/// texture2D压缩到指定宽高
/// </summary>
/// <param name="source">原图</param>
/// <param name="targetWidth"></param>
/// <param name="targetHeight"></param>
/// <returns></returns>
public static Texture2D ScaleTexture(Texture2D source, int targetWidth, int targetHeight)
{
RenderTexture rt = RenderTexture.GetTemporary(targetWidth, targetHeight);
RenderTexture.active = rt;
Graphics.Blit(source, rt);
Texture2D resizedTexture = new Texture2D(targetWidth, targetHeight);
resizedTexture.ReadPixels(new Rect(0, 0, targetWidth, targetHeight), 0, 0);
resizedTexture.Apply();
RenderTexture.active = null;
RenderTexture.ReleaseTemporary(rt);
return resizedTexture;
}
/// <summary>
/// texture2D转字符Base64
/// </summary>
/// <param name="texture2D"></param>
/// <returns></returns>
public static string Texture2DToBase64(Texture2D texture2D)
{
byte[] imageData = texture2D.EncodeToJPG();
string baser64 = Convert.ToBase64String(imageData);
return baser64;
}
/// <summary>
/// texture2D保存成JPG
/// </summary>
/// <param name="texture2D"></param>
/// <param name="url">保存地址</param>
public static void SaveJPG(Texture2D texture2D, string url)
{
string names = DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
byte[] imageData = texture2D.EncodeToJPG();
File.WriteAllBytes(url, imageData);
Debug.Log("保存照片:" + names);
}
/// <summary>
/// texture2D保存成JPG
/// </summary>
/// <param name="texture2D"></param>
/// <param name="url"></param>
public static void SavePNG(Texture2D texture2D, string url)
{
string names = DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
byte[] imageData = texture2D.EncodeToPNG();
File.WriteAllBytes(url, imageData);
Debug.Log("保存照片:" + names);
}
}
/// <summary>
/// 下载图片委托
/// </summary>
/// <param name="texture2D"></param>
public delegate void LoadImageTexture(Texture2D texture2D);
/// <summary>
/// 截图委托
/// </summary>
/// <param name="texture2D"></param>
public delegate void GetPicture(Texture2D texture2D);
/// <summary>
/// 下载图片错误委托
/// </summary>
/// <param name="error"></param>
public delegate void LoadImageError(UnityWebRequest.Result error);
}
2.调用方法
using MyPictrue;
using UnityEngine;
using UnityEngine.UI;
public class TestPictrue : MonoBehaviour
{
public RawImage raw;
public string URL = "";
// Start is called before the first frame update
void Start()
{
//截图
ProcessImages.ScreenshotPictrue((texture2D) =>
{
raw.texture = texture2D;
});
//下载
ProcessImages.LoadImage(URL, load =>
{
raw.texture = load;
}, error =>
{
Debug.Log(error);
});
}
}
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐

所有评论(0)