using System; using ThoughtWorks.QRCode.Codec; using System.IO; using System.Drawing; using System.Drawing.Drawing2D; using Excel; using System.Web; using System.Data;
protected void Page_Load(object sender, EventArgs e) { GetQRCode g = new GetQRCode(); g.ProcessRequest(HttpContext.Current); }
public class GetQRCode : IHttpHandler { public void ProcessRequest(HttpContext context) { string filePath = "XXX .xls"; FileStream stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read); string strExtension = System.IO.Path.GetExtension(filePath); IExcelDataReader excelReader = null; if (strExtension.IndexOf("xlsx") > 0) { excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); } else { excelReader = ExcelReaderFactory.CreateBinaryReader(stream); } excelReader.IsFirstRowAsColumnNames = false; DataSet result = excelReader.AsDataSet(); for (int i = 2; i < 37; i++) { string strUrl = Convert.ToString(result.Tables["Sheet1"].Rows[i][3]); string strName = result.Tables["Sheet1"].Rows[i][1].ToString(); QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4; qrCodeEncoder.QRCodeVersion = 8; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; System.Drawing.Image image = qrCodeEncoder.Encode(strUrl); System.IO.MemoryStream MStream = new System.IO.MemoryStream(); image.Save(MStream, System.Drawing.Imaging.ImageFormat.Png); System.IO.MemoryStream MStream1 = new System.IO.MemoryStream(); var temp = string.Format(context.Server.MapPath("~/res/2018032222/")); if (!Directory.Exists(temp)) { Directory.CreateDirectory(temp); } string path_imgLogo = temp +"/"+ strName + ".png"; //CombinImage(image, context.Server.MapPath("~/images/播放.png")).Save(MStream1, System.Drawing.Imaging.ImageFormat.Png); CombinImage(image, context.Server.MapPath("~/images/播放.png")).Save(path_imgLogo); context.Response.ClearContent(); context.Response.ContentType = "image/png"; context.Response.BinaryWrite(MStream1.ToArray()); MStream.Dispose(); MStream1.Dispose(); } context.Response.Flush(); context.Response.End(); } public static System.Drawing.Image CombinImage(System.Drawing.Image imgBack,string destImg) { System.Drawing.Image img = System.Drawing.Image.FromFile(destImg); if (img.Height != 65 || img.Width !=65) { img = KiResizeImage(img,65,65,0); } Graphics g = Graphics.FromImage(imgBack); g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);//g.DrawImage(imgBack, 0, 0, 相框宽, 相框高); //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框 //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高); g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height); GC.Collect(); return imgBack; } private static System.Drawing.Image KiResizeImage(System.Drawing.Image bmp, int newW, int newH, int Mode) { try { System.Drawing.Image b = new Bitmap(newW,newH); Graphics g = Graphics.FromImage(b); // 插值算法的质量 g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel); g.Dispose(); return b; } catch (Exception) { return null; } } public bool IsReusable { get { return false; } } }