c clipped the picture and used zxing to generate the QR code sample to share
/// <summary>/// generate 2 D code/// </summary>/// <param name="fileName"> generate 2 D code path </param>/// <param name="url"> Generated content </param>/// <param name="width">2 D yards wide </param>/// <param name="height">2 High dimension code </param>/// <param name="userFace"> To be generated Logo The picture </param>/// <returns></returns>private Bitmap GetCodeImgUrl(string fileName, string url, int width, int height, string userFace){ BarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Renderer = new BitmapRenderer { Foreground = Color.Black }, Options = new ZXing.QrCode.QrCodeEncodingOptions { DisableECI = true, Height = height, Width = width, Margin = 0, CharacterSet = "UTF-8", ErrorCorrection = ErrorCorrectionLevel.M } }; Bitmap bitmap = writer.Write(url); if (!string.IsNullOrEmpty(userFace)) { Bitmap bits = (System.Drawing.Bitmap)System.Drawing.Image.FromFile(userFace); if (bits != null) { // clipping 1 a 80*80 the Logo The picture ImageCut img = new ImageCut(0, 0, 80, 80); System.Drawing.Bitmap icon = img.KiCut(bits); //userFace_b.jpg is 1 A border image Bitmap bits2 = new System.Drawing.Bitmap((System.Drawing.Bitmap)System.Drawing.Image.FromFile(Application.StartupPath + "/user/userFace_b.jpg"), 84, 84); if (icon != null) { try { // drew 2 A border, 1 One is logo,1 in logo Around with 1 A border using (var graphics = System.Drawing.Graphics.FromImage(bitmap)) { graphics.DrawImage(bits2, (bitmap.Width - bits2.Width) / 2, (bitmap.Height - bits2.Height) / 2); graphics.DrawImage(icon, (bitmap.Width - icon.Width) / 2, (bitmap.Height - icon.Height) / 2); } } catch (Exception ex) { } finally { icon.Dispose(); GC.Collect(); } } bitmap.Save(fileName, ImageFormat.Jpeg); } } return bitmap;}
public class ImageCut { /// <summary> /// clipping -- with GDI+ /// </summary> /// <param name="b"> The original Bitmap</param> /// <param name="StartX"> To coordinate X</param> /// <param name="StartY"> To coordinate Y</param> /// <param name="iWidth"> The width of the </param> /// <param name="iHeight"> highly </param> /// <returns> After clipping Bitmap</returns> public Bitmap KiCut(Bitmap b) { if (b == null) { return null; } int w = b.Width; int h = b.Height; int intWidth = 0; int intHeight = 0; if (h * Width / w > Height) { intWidth = Width; intHeight = h * Width / w; } else if (h * Width / w < Height) { intWidth = w * Height / h; intHeight = Height; } else { intWidth = Width; intHeight = Height; } Bitmap bmpOut_b = new System.Drawing.Bitmap(b, intWidth, intHeight); w = bmpOut_b.Width; h = bmpOut_b.Height; if (X >= w || Y >= h) { return null; } if (X + Width > w) { Width = w - X; } else { X = (w-Width) / 2; } if (Y + Height > h) { Height = h - Y; } try { Bitmap bmpOut = new Bitmap(Width, Height, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(bmpOut); g.DrawImage(bmpOut_b, new Rectangle(0, 0, Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel); g.Dispose(); return bmpOut; } catch { return null; } } public int X = 0; public int Y = 0; public int Width = 120; public int Height = 120; public ImageCut(int x, int y, int width, int heigth) { X = x; Y = y; Width = width; Height = heigth; } }