碰到的場景:因為使用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="" />