前端生成二维码与图片合成

首先前端生成二维码

使用插件完成,插件为DrawQRCode.unitypackage 
合成二维码直接使用DrawQRCode 类里提供的方法即可 

生成二维码的方法

DrawCode_Color32:根据二维码包含的信息以及宽高,对文本信息进行转码,返回 Color32 数组,该方法需要三个参数:
"textForEncoding":需要转换成二维码的字符串 
"width":二维码的宽,默认宽度 256
"height":二维码的高,默认高度 256
该方法会返回一个 Color32 数组 供后续操作 

想要进行图片合成   

首先我们需要一张底图   底图类型为 Texture2D

然后我们调用生成二维码的方法DrawCode_Color32,传入我们需要转换成二维码的字符串 以及宽和高。该方法会返回一个 Color32 数组 

我们调用Texture2D中的SetPixels32方法  传入生成二维码方法返回的Color32 数组  以及位置信息  x和y
 bgTex.SetPixels32(250, 480, 256, 256, codeColors);
该函数获取一个Color32数组,并更改整个纹理mip级别的像素颜色。

 bgTex.Apply();

调用Apply函数才实际上传改变后的像素数据到显卡上。

参考代码

Texture2D bgTex = Instantiate(Resources.Load("TW1")); //加载我们的背景图   

Texture2D codeColors = DrawQRCode.DrawCode_Texture2D(StaticData.bindURL + StaticData.userId, 256, 256);  传入生成二维码的字符串 以及尺寸 (固定256,256)
Color32[] erweima= codeColors.GetPixels32();   获取codeColors的Color32数组
Texture2D newTex = new Texture2D(200, 200);     新创建一个Texture2D

for (int i = 29; i < 228; i++)                 双层for循环取生成的二维码图片中间的一部分像素进行赋值到新创建的newTex 中
{
for (int j = 29; j < 228; j++)
{
newTex.SetPixel(i - 29, j - 29, codeColors.GetPixel(i, j));
}
}

//位置  x,y  尺寸 (固定256 256), Color32[]数组
bgTex.SetPixels32(250, 480, 256, 256, GetPingPuT2d(newTex, new Vector2(256, 256), 1.3f).GetPixels32());   将新的Texture2D的图经过下列GetPingPuT2d方法进行放大然后传进来    


bgTex.Apply(); //应用一下调用Apply函数才实际上传改变后的像素数据到显卡上。

 

 

public Texture2D GetPingPuT2d(Texture2D t2d, Vector2 rect, float scale = 1f)//用于Texture2D缩放的方法
{
scale = 1 / scale;
//t2d = MyTextureTools.ScaleTexture(t2d,(int)(t2d.width*scale),(int )(t2d.height*scale)) ;
Texture2D result = new Texture2D((int)rect.x, (int)rect.y, t2d.format, false);
for (int i = 0; i < result.width; i++)
{
for (int j = 0; j < result.height; j++)
{
result.SetPixel(i, j, t2d.GetPixel((int)((i * scale) % (t2d.width)),
(int)((j * scale) % (t2d.height))));
}
}
result.Apply();
return result;
}

你可能感兴趣的:(前端生成二维码与图片合成)