asp.net產生縮圖實現代碼

來源:互聯網
上載者:User

複製代碼 代碼如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.IO;
namespace web三層
{
/// <summary>
/// 顯示請求圖片的縮圖,以寬度100像素為最大單位
/// </summary>
public class imgSmall : IHttpHandler
{
//圖片所在檔案夾
static string picturesPath = @"d:\wordpictures\";
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
//擷取到傳遞過來的img字串,比如
//http://localhost:5002/imgSmall.ashx?img=abacus8.jpg這種
string img = context.Request.Params["img"];
string path = picturesPath + img;
//如果檔案存在才會去讀取,減少使用try,catch,提高程式效能
if (File.Exists(path))
{
//載入這個圖片
Image big = Image.FromFile(path);
//如果可以擷取到檔案,才會執行下面的代碼
if (big != null)
{
//設定最大的寬度,可以修改來產生更小的縮圖
int newWidth = 100;
//根據圖片的寬高比來產生一個位元影像
Bitmap bitmap = new Bitmap(newWidth, newWidth * big.Height / big.Width);
//根據圖板來建立一個圖畫
Graphics g = Graphics.FromImage(bitmap);
using (g)
{
//將大圖big畫到自己定義的小圖中bitmap
g.DrawImage(big, 0, 0, bitmap.Width, bitmap.Height);
//直接將處理好的位元影像儲存到響應輸出資料流中,格式為jpeg!
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
else
{
//否則就發送一個檔案不存在的資訊到瀏覽器
context.Response.ContentType = "text/html";
context.Response.Write("檔案不存在");
//或者發送一個檔案不存在的圖片
//context.Response.WriteFile("todo此處修改為圖片所在路徑");
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

這是一個一般處理常式,只需要給其發送一個檔案名稱的參數就可以在瀏覽器上顯示出圖片(可以修改成發送一個圖片的序號id),比如下面的GridView控制項中使用了此處理常式

縮圖欄位中將其DataImageUrlField設定為檔案名稱,這個欄位是資料庫中一個欄位(初學的時候我喜歡用中文欄位,比較好理解),再將其DataImageUrlFormatString設定為:imgSmall.ashx?img={0},這樣在產生html代碼的時候就會把{0}替換成檔案名稱這個欄位的內容,實際的效果如:

縮圖非常的小,才3040位元組,看官也可以發現當瀏覽器請求圖片時,請求的地址是imgSmall.ashx?img=abacus8.jpg

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.