当前位置:   article > 正文

unity3D -- 压缩图片_unity3d 缩小图片

unity3d 缩小图片

由于微信分享图片要求图片大小不能超过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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/637024
推荐阅读
相关标签
  

闽ICP备14008679号