ashx源文件代码:
<%@ WebHandler Language="C#" Class="GetThumbnailImageByEmpCode" %>
using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
public class GetThumbnailImageByEmpCode : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.QueryString["code"] == null)
{
return;
}
int newWidth = 336; //目标图片宽度
int newHeight = 252; //目标图片高度
bool bNeedUpdate = false; //是否需要更新数据库
System.Drawing.Image Img;
using (SqlConnection conn = new SqlConnection(db.ConnectionStrings.hrConnectionString))
using (SqlCommand cmd = new SqlCommand("", conn))
{
cmd.CommandText = "select photo from ZlEmployee where code=@code and DATALENGTH(photo)>1000";
cmd.Parameters.AddWithValue("code", context.Request.QueryString["code"]);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
byte[] imgData = (byte[])reader[0];
reader.Close();
using (MemoryStream ms = new MemoryStream(imgData))
{
Img = System.Drawing.Image.FromStream(ms);
}
if (Img.Width > newWidth || Img.Height > newHeight)
{
Img = reSizeImage(Img);
bNeedUpdate = true;
}
using (MemoryStream ms = new MemoryStream())
{
#region 输出图片到浏览器
Bitmap jpg = new Bitmap(Img);
jpg.Save(ms, ImageFormat.Jpeg);
context.Response.Clear();
context.Response.Charset = "utf-8";
context.Response.ContentType = "image/pjpeg";
context.Response.BinaryWrite(ms.ToArray());
#endregion
//检查是否需要更新
if (bNeedUpdate)
{
cmd.CommandText = "update ZlEmployee set photo=@photo where code=@code";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("code", context.Request.QueryString["code"]);
cmd.Parameters.AddWithValue("photo", ms.ToArray());
cmd.ExecuteNonQuery();
}
}
context.Response.End();
}
}
}
public System.Drawing.Image reSizeImage(System.Drawing.Image img)
{
int newWidth = 336;
int newHeight = 252;
//如果是高度大于宽度则按竖图处理,宽小于高
if (img.Height > img.Width)
{
newWidth = 252;
newHeight = 336;
}
#region 计算按比例缩放的图片尺寸
if (img.Height / img.Width > newHeight / newWidth)
{
newWidth = newHeight * img.Width / img.Height;
}
else
{
newHeight = img.Height * newWidth / img.Width;
}
#endregion
#region 缩放图片
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)newWidth, (int)newHeight, PixelFormat.Format32bppArgb)) //using 3
{
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap))
{
//清除整个绘图面并以透明背景色填充
graphics.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制 原图片 对象
graphics.DrawImage(img, new Rectangle(0, 0, (int)newWidth, (int)newHeight));
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, ImageFormat.Jpeg);
return System.Drawing.Image.FromStream(ms);
}
}
}
#endregion
}
public bool IsReusable
{
get
{
return false;
}
}
}