碰到的场景:因为使用iframe子窗口打开,多张的二维码图片创建方法调用,导致页面打开缓慢,
所以将调取方式转换成<img src="data:image/png;base64,@item.ShareMaterialLink" width="146" height="146">
原先的话是<img src="方法调取地址加上参数(需要转成二进制的字符串)" width="146" height="146">
下面说的二维码转换的dll
http://files.cnblogs.com/files/danlis/ThoughtWorks.QRCode.zip
//需要调用的命名空间 using System.IO; using System.Drawing; //方法里面: Image img = QRCodeUtil.CreateImgCode(tempModel[i].ActivityLink); MemoryStream ms = new MemoryStream();//创建支持存储区为内存的流 img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);//将图像以指定的格式保存到指定的流中 byte[] bytes = ms.GetBuffer();//转成无符号的字节数组 tempModel[i].ShareMaterialLink = Convert.ToBase64String(bytes);//将8位无符号字节数组转换成Base64数字编码的等效字符串 ms.Close();//使用了内存区,需要关闭的
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using ThoughtWorks.QRCode.Codec;//这个是个插件,网上搜应该都是可以的 namespace Utility { //这个方法就是上面转换image对象的方法 public class QRCodeUtil { /// <summary> /// 生成二维码图片 /// </summary> /// <param name="codeNumber">要生成二维码的字符串</param> /// <param name="size">大小尺寸</param> /// <returns>二维码图片</returns> public static Image CreateImgCode(string codeNumber) { if (string.IsNullOrEmpty(codeNumber)) { codeNumber = ""; } //创建二维码生成类 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); //设置编码模式 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量度 qrCodeEncoder.QRCodeScale = 4; //设置编码版本 qrCodeEncoder.QRCodeVersion = 8; //设置编码错误纠正 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //生成二维码图片 System.Drawing.Image image = qrCodeEncoder.Encode(codeNumber); return image; } } }
将image对象转换为byte64数据流
Image img = QRCodeUtil.CreateImgCode(item.ActivityLink); MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = ms.GetBuffer(); item.ActivityLink = Convert.ToBase64String(bytes); ms.Close();
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using ThoughtWorks.QRCode.Codec; using System.IO; namespace Qxun.Framework.Utility { public class QRCodeUtil { /// <summary> /// 生成二维码图片 /// </summary> /// <param name="codeNumber">要生成二维码的字符串</param> /// <param name="size">大小尺寸</param> /// <returns>二维码图片</returns> public static Image CreateImgCode(string codeNumber) { if (string.IsNullOrEmpty(codeNumber)) { codeNumber = ""; } //创建二维码生成类 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); //设置编码模式 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量度 qrCodeEncoder.QRCodeScale = 4; //设置编码版本 qrCodeEncoder.QRCodeVersion = 0; //设置编码错误纠正 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //生成二维码图片 System.Drawing.Image image = qrCodeEncoder.Encode(codeNumber); return image; } public static string CreateImageCodeByte64(string codeNumber) { Image image = CreateImgCode(codeNumber); return GetImageByte64Str(image); } /// <summary> /// 根据图片Image类型对象,获取Byte64位字符串 /// </summary> /// <param name="image"></param> /// <returns></returns> public static string GetImageByte64Str(Image image) { return Convert.ToBase64String(GetImagebyteArray(image)); } /// <summary> /// 根据图片Image类型对象,获取byte[]数据流 /// </summary> /// <param name="image"></param> /// <returns></returns> public static byte[] GetImagebyteArray(Image image) { MemoryStream ms = new MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = ms.GetBuffer(); ms.Close(); return bytes; } } } //<img src="data:image/png;base64,@QRCodeUtil.CreateImageCodeByte64("http://ttyouni.com")" width="300" height="300" alt="" />