赞
踩
由于微信分享图片要求图片大小不能超过200k,有些手机的高清屏幕截下来的图片肯定大于200k了,这个时候只能是压缩图片了,unity压缩图片的方法,直接上C#源代码:
public void WXShareImage (string imagePath, int sceneType)
{
byte[] fileData = File.ReadAllBytes (imagePath);
Texture2D tex = new Texture2D ((int)(Screen.width), (int)(Screen.height), TextureFormat.RGB24, true);
tex.LoadImage (fileData);
float miniSize = Mathf.Max (tex.width, tex.height);
float scale = 1200.0f / miniSize;
if (scale > 1.0f) {
scale = 1.0f;
}
Texture2D temp = ScaleTexture (tex, (int)(tex.width * scale), (int)(tex.height * scale));
byte[] pngData = temp.EncodeToJPG ();
string miniImagePath = imagePath.Replace (".png", "_min.jpg");
File.WriteAllBytes (miniImagePath, pngData);
Destroy (tex);
Destroy (temp);
}
该函数的接受两个参数,一个是传过来的图片路径,第二个参数是微信分享场景的id(微信文档有)。
private Texture2D ScaleTexture (Texture2D source, int targetWidth, int targetHeight)
{
Texture2D result = new Texture2D (targetWidth, targetHeight, source.format, true);
Color[] rpixels = result.GetPixels (0);
float incX = ((float)1 / source.width) * ((float)source.width / targetWidth);
float incY = ((float)1 / source.height) * ((float)source.height / targetHeight);
for (int px = 0; px < rpixels.Length; px++) {
rpixels [px] = source.GetPixelBilinear (incX * ((float)px % targetWidth), incY * ((float)Mathf.Floor (px / targetWidth)));
}
result.SetPixels (rpixels, 0);
result.Apply ();
return result;
}
该函数将图片压缩并返回压缩后的图片,压缩后的大小由调用者传过来。
源代码功能把最后图片转成了JPG格式,要是想转成PNG格式的话,unity有相应的方法,但是转成PNG,图片占用的内存会更大,就不能压缩成1200像素的了,要压缩的更小,这个需要注意一下。
该方法我已经测试过,没有问题,所以才上的源代码,图就不传了,反正压缩前后的图片截下来你也看不到变下了。
——Rocky
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。