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; }
}
}