/// <summary> /// 生成二维码 /// </summary> /// <param name="fileName">生成二维码路径</param> /// <param name="url">生成的内容</param> /// <param name="width">二维码宽</param> /// <param name="height">二维码高</param> /// <param name="userFace">需生成的Logo图片</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) { //剪裁一个80*80的Logo图片 ImageCut img = new ImageCut(0, 0, 80, 80); System.Drawing.Bitmap icon = img.KiCut(bits); //userFace_b.jpg是一个边框的图片 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 { //画了2个边框,一个是logo,一个在logo周围加了一个边框 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> /// 剪裁 -- 用GDI+ /// </summary> /// <param name="b">原始Bitmap</param> /// <param name="StartX">开始坐标X</param> /// <param name="StartY">开始坐标Y</param> /// <param name="iWidth">宽度</param> /// <param name="iHeight">高度</param> /// <returns>剪裁后的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; } }
private void btnSubmit_Click(object sender, EventArgs e) { string UserId = "1245460396"; string curFilePath = "/user/"; string curFileName_b = "DimensionalPig_" + UserId + "_b"; string path = Application.StartupPath + curFilePath; if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(path); } string fileName_b = Application.StartupPath + curFilePath + "/" + curFileName_b + ".jpg";//获得上传文件名
string UserUrl = string.Format("https://www.jb51.net/u{0}", UserId.Trim()); string userFace_b = Application.StartupPath + "/user/" + UserId + "_b.jpg";
Bitmap bitmap_b = GetCodeImgUrl(fileName_b.Replace("_b.", "_b_ewm."), UserUrl, 400, 400, userFace_b); this.p.Image =(System.Drawing.Image)bitmap_b; this.p.Image.Save(fileName_b.Replace("_b.", "_b_ewm."));
|