• Unity中指定相机截屏,并将图片转为Base64


    问题背景:

    需求就是只截场景,不包含UI,并将截图保存为Base64格式给到Web展示。

    方案:

    指定相机截图:

     1 /// <summary>
     2         /// 指定相机截屏
     3         /// </summary>
     4         /// <param name="camera"></param>
     5         /// <param name="rect"></param>
     6         /// <returns></returns>
     7         public byte[] CaptureScreen(Camera camera, Rect rect)
     8         {
     9             RenderTexture rt = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 0);
    10 
    11             camera.targetTexture = rt;
    12             camera.Render();
    13 
    14             RenderTexture.active = rt;
    15             Texture2D screenShot = new Texture2D(camera.pixelWidth, camera.pixelHeight, TextureFormat.RGBA32, false);
    16 
    17             screenShot.ReadPixels(rect, 0, 0);
    18             screenShot.Apply();
    19 
    20             camera.targetTexture = null;
    21             RenderTexture.active = null;
    22             GameObject.Destroy(rt);
    23 
    24             byte[] bytes = screenShot.EncodeToPNG();
    25 
    26             return bytes;
    27         }

    这里我没写到内存,因为我不需要,我这是直接传上去。

    转Base64很简单:

     1  /// <summary>
     2         /// 图片流转Base64
     3         /// </summary>
     4         /// <param name="bytesArr"></param>
     5         /// <returns></returns>
     6         public String Texture2DToBase64(byte[] bytesArr)
     7         {
     8             string strbaser64 = Convert.ToBase64String(bytesArr);
     9 
    10             return strbaser64;
    11         }

    Base64:

    网络上最常见的用于传输8Bit字节码的编码方式之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,(百科)

    截图实例:

    最新问题:前端解码Base64图片乱码问题

    首先乱码有两点问题造成的:

    1.图片过大

    2.编码格式

    我先对图片进行压缩,并且格式转为jpg,发现不好使。所以锁定原因在编码格式,转utf-8后可以了

     1         /// <summary>
     2         /// 图片流转Base64并设置编码格式
     3         /// </summary>
     4         /// <param name="bytesArr"></param>
     5         /// <returns></returns>
     6         private string Texture2DToBase64(byte[] bytesArr)
     7         {
     8 
     9             string strbaser64 = Convert.ToBase64String(bytesArr);
    10 
    11             byte[] bytes = Encoding.UTF8.GetBytes(strbaser64);
    12             string utf8String = Encoding.UTF8.GetString(bytes);
    13 
    14             return utf8String;
    15         }
  • 相关阅读:
    树莓派控制Arduino
    树莓派的基本配置
    OneNet的产品创建和支持协议
    云平台基本认知(OneNet)
    初识Arduino
    NEFU-大二大三训练赛17C-最大值
    NEFU-大二大三训练赛17D-泡泡堂
    pb数据导出
    PB窗口根据分辨率的大小调整窗口大小
    PowerBuilder常用字符串函数
  • 原文地址:https://www.cnblogs.com/answer-yj/p/12675192.html
Copyright © 2020-2023  润新知