Asp.Net生成二维码(中间加logo)

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; }
        }
    }
原文地址:https://www.cnblogs.com/shiyige-216/p/8625109.html