在博問上看到有同窗在問如何實現一個帶內嵌圖片的二維碼,因此準備記錄下來,供同窗們參考。編程
一、首先準備一個用於內嵌的圖片。函數
二、既然生成二維碼碼,那確定須要將什麼樣的內容生成二維碼,這裏我用http://www.baidu.com做爲生成二維碼的字符串ui
private string QcodeSource { get { return "http://www.baidu.com"; } }
三、咱們來看看根據QcodeSource生成二維碼的方法,這裏返回Byte[]。PS:這裏用了 Gma.QrCodeNet.Encoding.Net35.dll 生成二維碼的庫,點擊連接下載spa
public static byte[] GetQrCodeBitmapImage(string qrcode) { try { if (string.IsNullOrWhiteSpace(qrcode)) return null; // Get QrCode GraphicsRenderer var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H); var qrCode = qrEncoder.Encode(qrcode); var renderer = new GraphicsRenderer(new FixedModuleSize(24, QuietZoneModules.Four), Brushes.Black, Brushes.White); using (var stream = new MemoryStream()) { renderer.WriteToStream(qrCode.Matrix, ImageFormat.Jpeg, stream); stream.Seek(0, SeekOrigin.Begin); stream.Flush(); return stream.ToArray(); } } catch (Exception) { return null; } }
四、既然上面返回了圖片的Byte[],因此接下來咱們把準備內嵌的圖片和這個二維碼圖片拼成一個圖片,如何將內嵌圖片編程Byte[]這裏不作熬述。code
/// <summary> /// 調用此函數後使此兩種圖片合併,相似相冊,有個 /// 背景圖,中間貼本身的目標圖片 /// </summary> /// <param name="sourceImage">粘貼的源圖片</param> /// <param name="destBitmap">粘貼的目標圖片</param> public static Bitmap CombinImage(Bitmap sourceImage, Bitmap destBitmap) { if (destBitmap.Height != 250 || destBitmap.Width != 250) { destBitmap = KiResizeImage(destBitmap, 250, 250, 0); } using (var g = Graphics.FromImage(sourceImage)) { //g.DrawImage(img, 照片與相框的左邊距, 照片與相框的上邊距, 照片寬, 照片高); g.DrawImage(sourceImage, 0, 0, sourceImage.Width, sourceImage.Height); //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一層黑色邊框 g.DrawImage(destBitmap, sourceImage.Width / 2 - destBitmap.Width / 2, sourceImage.Width / 2 - destBitmap.Width / 2, destBitmap.Width, destBitmap.Height); GC.Collect(); return sourceImage; } }
五、下面上效果圖orm
總結:生成結束,主要用了Gma.QrCodeNet.Encoding.Net35.dll 這個庫,代碼仍是相對來說比較簡單的。blog