ASP.NET二進制圖片如何轉換成JPEG格式在頁面輸出並能控制大小?


我現在的做法是用一個handler來讀取數據庫中的二進制圖片,然后展示到頁面上。頁面上用個image控件來接收圖片,設定了width和height。但是這樣有個問題,在頁面上的圖片是我說希望的大小,但是直接復制頁面到內容到excel里以后,圖片就恢復成原來大小了,很不好看。請問如何解決?

ImageHandler.ashx.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.IO;

namespace Space
{
    /// <summary>
    /// ImageHandler 的摘要說明
    /// </summary>
    public class ImageHandler : IHttpHandler
    {
        private string strConn = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //獲取配置文件

        public void ProcessRequest(HttpContext context)
        {
            string imageID = context.Request.QueryString["ImID"];
            SqlConnection conn = new SqlConnection(strConn);
            conn.Open();
            string strQuery = @"select Photo from dbo.[User] where ID='" + imageID + "'";
            SqlCommand cmd = new SqlCommand(strQuery, conn);
            SqlDataReader sdr = cmd.ExecuteReader();
            sdr.Read();
            if (sdr[0] != DBNull.Value)
            {
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite((Byte[])sdr[0]);
                //獲取原始圖片高度和寬度
                MemoryStream s = new MemoryStream((Byte[])sdr[0]);
                Image img = Image.FromStream(s);
                int width = img.Width;
                int height = img.Height;                
            }
            conn.Close();
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


前台頁面綁定:

<td id="tdImage" style="width: 67px;" runat="server">
                        <asp:Image ID="image1" runat="server" ImageUrl='<%# "ImageHandler.ashx?ImID="+Eval("UID") %>'
                            Height='100px' Width='65px' />
                    </td>

請問如何修改使之能夠得到我想要的大小,比如Height='100px' Width='65px' ?

3 个解决方案

#1


可以應該可以的


MemoryStream s = new MemoryStream((Byte[])sdr[0]);
Image img = Image.FromStream(s);
img.GetThumbnailImage(100,65, null, IntPtr.Zero);
img.Save(s,System.Drawing.Imaging.ImageFormat.Jpeg); 
s.WriteTo(Response.OutputStream);
s = null;
img = null;

#2


這樣
Response.ClearContent();
MemoryStream s = new MemoryStream((Byte[])sdr[0]);
System.Drawing.Image img = System.Drawing.Image.FromStream(s);
System.Drawing.Image image = img.GetThumbnailImage(100, 65, null, IntPtr.Zero);
image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
image.Dispose();
img.Dispose(); 
Response.End();

#3


引用 2 樓  的回復:
這樣

C# code

Response.ClearContent();
MemoryStream s = new MemoryStream((Byte[])sdr[0]);
System.Drawing.Image img = System.Drawing.Image.FromStream(s);
System.Drawing.Image image = img.GetThumb……


可以使用,謝謝!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com