private byte[] CreateQrCodeLogo(string content) { var qrCodeWriter = new BarcodeWriterPixelData() { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions() { Height = 250, Width = 250, Margin = 0, ErrorCorrection = _level, CharacterSet = "UTF-8" } }; var temp = qrCodeWriter.Encode(content); var pixelData = qrCodeWriter.Write(content); using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)) { using (var ms = new MemoryStream()) { var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); try { System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length); } finally { bitmap.UnlockBits(bitmapData); } Bitmap logo = new Bitmap(_logoPath); // 获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸) int[] rectangle = temp.getEnclosingRectangle(); // 计算插入图片的大小和位置 int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width); int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height); int middleL = (bitmap.Width - middleW) / 2; int middleT = (bitmap.Height - middleH) / 2; // 将img转换成bmp格式,否则后面无法创建Graphics对象 //Bitmap bmpImg = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bitmap)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.DrawImage(bitmap, 0, 0); } // 将二维码插入图片 Graphics mg = Graphics.FromImage(bitmap); // 白底 mg.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH); mg.DrawImage(logo, middleL, middleT, middleW, middleH); bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); return(ms.ToArray()); } } }