C#读取数据库图片显示、缩小、更新

来源:互联网 发布:openwrt 进入webshell 编辑:程序博客网 时间:2024/05/16 18:57

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


原创粉丝点击