生成二維碼圖片,轉換成base64,顯示在頁面

     要求:生成一個二維碼,裏面帶有我指定的內容,並按照個人大小顯示在頁面上。html

     

    思路:經過c#代碼將包含自定義的內容生成一張二維碼圖片-(類型:bitmap)------------------使用在線工具將圖片轉成base64字符串-------------------套用固定格式data:image/jpeg;base64,+base64字符串-------------直接將整個字符串放入img標籤的scr中。c#

    代碼:api

       入口代碼app

string content = " http://api.qiantaivip.com/app/reg.html?from=a74236e2-d403-45c0-a485-8beb524bed4a";
int size = 200;
int border = 10;
//生成二維碼圖片---區別於jpg等圖片格式
System.Drawing.Image image = CreateQRCode(content,
QRCodeEncoder.ENCODE_MODE.BYTE,
QRCodeEncoder.ERROR_CORRECTION.M,
0,
5,
size,
border);
//
MemoryStream ms = new System.IO.MemoryStream();
//將此圖像以指定的格式保存到指定的流中---png也能夠是gif等圖片格式
//執行此代碼說明流中存在此二位碼的字節數據
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//用於填裝流中的數據
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);//寫入進去。
ms.Close();//釋放資源
//
String strbaser64 = Convert.ToBase64String(arr);
Image1.ImageUrl = "data:image/jpeg;base64,"+strbaser64;工具

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------編碼

/// <summary>
/// 生成二維碼
/// </summary>
/// <param name="Content">內容文本</param>
/// <param name="QRCodeEncodeMode">二維碼編碼方式</param>
/// <param name="QRCodeErrorCorrect">糾錯碼等級</param>
/// <param name="QRCodeVersion">二維碼版本號 0-40</param>
/// <param name="QRCodeScale">每一個小方格的預設寬度(像素),正整數</param>
/// <param name="size">圖片尺寸(像素),0表示不設置</param>
/// <param name="border">圖片白邊(像素),當size大於0時有效</param>
/// <returns></returns>
public System.Drawing.Image CreateQRCode(string Content, QRCodeEncoder.ENCODE_MODE QRCodeEncodeMode, QRCodeEncoder.ERROR_CORRECTION QRCodeErrorCorrect, int QRCodeVersion, int QRCodeScale, int size, int border)
{
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncodeMode;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeErrorCorrect;
qrCodeEncoder.QRCodeScale = QRCodeScale;
qrCodeEncoder.QRCodeVersion = QRCodeVersion;
System.Drawing.Image image = qrCodeEncoder.Encode(Content);code

#region 根據設定的目標圖片尺寸調整二維碼QRCodeScale設置,並添加邊框
if (size > 0)
{
//當設定目標圖片尺寸大於生成的尺寸時,逐步增大方格尺寸
#region 當設定目標圖片尺寸大於生成的尺寸時,逐步增大方格尺寸
while (image.Width < size)
{
qrCodeEncoder.QRCodeScale++;
System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
if (imageNew.Width < size)
{
image = new System.Drawing.Bitmap(imageNew);
imageNew.Dispose();
imageNew = null;
}
else
{
qrCodeEncoder.QRCodeScale--; //新尺寸未採用,恢復最終使用的尺寸
imageNew.Dispose();
imageNew = null;
break;
}
}
#endregionorm

//當設定目標圖片尺寸小於生成的尺寸時,逐步減少方格尺寸
#region 當設定目標圖片尺寸小於生成的尺寸時,逐步減少方格尺寸
while (image.Width > size && qrCodeEncoder.QRCodeScale > 1)
{
qrCodeEncoder.QRCodeScale--;
System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
image = new System.Drawing.Bitmap(imageNew);
imageNew.Dispose();
imageNew = null;
if (image.Width < size)
{
break;
}
}
#endregionhtm

//若是目標尺寸大於生成的圖片尺寸,則爲圖片增長白邊
#region 若是目標尺寸大於生成的圖片尺寸,則爲圖片增長白邊
if (image.Width <= size)
{
//根據參數設置二維碼圖片白邊的最小寬度
#region 根據參數設置二維碼圖片白邊的最小寬度
if (border > 0)
{
while (image.Width <= size && size - image.Width < border * 2 && qrCodeEncoder.QRCodeScale > 1)
{
qrCodeEncoder.QRCodeScale--;
System.Drawing.Image imageNew = qrCodeEncoder.Encode(Content);
image = new System.Drawing.Bitmap(imageNew);
imageNew.Dispose();
imageNew = null;
}
}
#endregion圖片

//當目標圖片尺寸大於二維碼尺寸時,將二維碼繪製在目標尺寸白色畫布的中心位置
if (image.Width < size)
{
//新建空白繪圖
System.Drawing.Bitmap panel = new System.Drawing.Bitmap(size, size);
System.Drawing.Graphics graphic0 = System.Drawing.Graphics.FromImage(panel);
int p_left = 0;
int p_top = 0;
if (image.Width <= size) //若是原圖比目標形狀寬
{
p_left = (size - image.Width) / 2;
}
if (image.Height <= size)
{
p_top = (size - image.Height) / 2;
}

//將生成的二維碼圖像粘貼至繪圖的中心位置 graphic0.DrawImage(image, p_left, p_top, image.Width, image.Height); image = new System.Drawing.Bitmap(panel); panel.Dispose(); panel = null; graphic0.Dispose(); graphic0 = null; } } #endregion } #endregion return image; }

相關文章
相關標籤/搜索