c# .net 生成缩略图(按比例) By shawl.qiu
说明:
这个功能我想了很久了...
以前用 ASP 的时候, 我就老想不靠第三方组件生成缩略图, 为的啥...通用...
现在好了, .net 提供了一大堆一大堆的类库, 让我们可以实现很多功能, 比如生成缩略图, 当然还有N多的高级功能, 哈哈, 我的想法挺多的, 这下该我兴奋的地方真是太多太多了..
总之, 从 ASP 升级到 .net 准没错.
shawl.qiu
2007-01-31
http://blog.csdn.net/btbtd
c# .net 生成缩略图类 thumb 源代码 及演示(支持从文件或从流读取内容):
<%@ Page
Language="C#" AutoEventWireup="True" %> <%@ import
Namespace="System.IO"%> <!DOCTYPE html PUBLIC "-//
W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
xmlns="http://www.w3.org/1999/xhtml"> <head> <meta
http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>shawl.qiu template</title> <script
runat="server"> void Page_Load(Object sender, EventArgs e) { /*
// overloading file 1 String sImgNm="01.jpg"; String sImg=MapPath("uploads/"+sImgNm); String sImgThumb=MapPath("uploads/thumb/"+sImgNm); thumb.file(sImg, sImgThumb, 200, 200); */ /*
// overloading file 2 String sImg=MapPath("uploads/04.jpg"); thumb.file(sImg); */ /*
// overloading file 3 thumb.file("uploads/01.jpg", true); */ /*
// overloading stream 1 String sFlNm="01.jpg"; String sFlPh=MapPath("uploads/"+sFlNm); String sThPh=MapPath("uploads/thumb/"+sFlNm); using(FileStream fs=new FileStream(sFlPh, FileMode.Open, FileAccess.Read)) { thumb.stream(fs, sThPh); } */ /*
// overloading stream 2 String sFlNm="03.jpg"; String sFlPh=MapPath("uploads/"+sFlNm); String sThPh="uploads/thumb/"+sFlNm; using(FileStream fs=new FileStream(sFlPh, FileMode.Open, FileAccess.Read)) { thumb.stream(fs, sThPh, true); } */ /*
// overloading stream 3 String sFlNm="04.jpg"; String sFlPh=MapPath("uploads/"+sFlNm); String sThPh="uploads/thumb/"+sFlNm; using(FileStream fs=new FileStream(sFlPh, FileMode.Open, FileAccess.Read)) { thumb.stream(fs, sThPh, 200, 200, true); } */ /*
// overloading stream 4 String sFlNm="04.jpg"; String sFlPh=MapPath("uploads/"+sFlNm); String sThPh=MapPath("uploads/thumb/"+sFlNm); using(FileStream fs=new FileStream(sFlPh, FileMode.Open, FileAccess.Read)) { thumb.stream(fs, sThPh, 200, 200); } */ //
overloading file 3 //
thumb.file("uploads/01.jpg", true); //
overloading file 3 //
thumb.file("uploads/01.png", true); //
overloading file 3 thumb.file("uploads/01.gif", true); } //
end Page_Load /*-----------------------------------------------------------------------------------*/
* shawl.qiu c# .net thumb class v1.0 /*-----------------------------------------------------------------------------------*/ //
---------------------------------------------------------------------begin class thumb public class thumb { //
-----------------------------------begin event public thumb() { } ~thumb() { } //
-----------------------------------end event //
-----------------------------------begin public constant //
-----------------------begin about public const String
auSubject="shawl.qiu c# .net thumb class"; public const String
auVersion="v1.0"; public const String
au="shawl.qiu"; public const String
auEmail="shawl.qiu@gmail.com"; public const String
auBlog="http://blog.csdn.net/btbtd"; public const String
auCreateDate="2007-1-31"; //
-----------------------end about //
-----------------------------------end public constant //
-----------------------------------begin private constant //
-----------------------------------end private constant //
-----------------------------------begin public static method //
------------------begin stream public static void stream(Stream oStm, String sThumbPath) { saveThumb_stream(oStm, sThumbPath, 200, 200); } public static void stream(Stream oStm, String sThumbPath, Boolean bCov) {
if(bCov) {
sThumbPath=System.Web.HttpContext.Current.Server.MapPath(sThumbPath); } saveThumb_stream(oStm, sThumbPath, 200, 200); } public static void stream(Stream oStm, String sThumbPath, Int32 iWidth, Int32 iHeight, Boolean bCov) {
if(bCov) {
sThumbPath=System.Web.HttpContext.Current.Server.MapPath(sThumbPath); } saveThumb_stream(oStm, sThumbPath, iWidth, iHeight); } public static void stream(Stream oStm, String sThumbPath, Int32 iWidth, Int32 iHeight) { saveThumb_stream(oStm, sThumbPath, iWidth, iHeight); } //
------------------end stream //
------------------begin file public static void file(String sImgPath, String sThumbPath, Int32 iImgWidth, Int32 iImgHeight) {
thumb.saveThumb(sImgPath, sThumbPath, iImgWidth, iImgHeight); } //
end public static void file public static void file(String sImgPath) { //
检测同级目录是否存在 thumb 目录 String
sCreateThumbPath=System.IO.Path.GetDirectoryName(sImgPath)+"//thumb//";
if(!
System.IO.Directory.Exists(sCreateThumbPath)) {
System.IO.Directory.CreateDirectory(sCreateThumbPath); } String
sThumbPath=sCreateThumbPath+System.IO.Path.GetFileName(sImgPath); Int32
iImgWidth=200; Int32
iImgHeight=200; thumb.saveThumb(sImgPath, sThumbPath, iImgWidth, iImgHeight); } //
end public static void file public static void file(String sImgPath, Boolean bCov) {
if(bCov) {
sImgPath=System.Web.HttpContext.Current.Server.MapPath(sImgPath); }
thumb.file(sImgPath); } //
end public static void file //
------------------end file //
-----------------------------------end public static method //
-----------------------------------begin private static method private static void saveThumb_stream(Stream oStm, String sThumbPath, Int32 iImgWidth, Int32 iImgHeight) { using(System.Drawing.Image
oImg=System.Drawing.Image.FromStream(oStm)) { System.Drawing.Image.GetThumbnailImageAbort
callback = new System.Drawing.Image.GetThumbnailImageAbort(thumb.callback); Int32
iOldWidth=oImg.Width; Int32
iOldHeight=oImg.Height; //
按比较设置宽高 thumb.mtSetSize(ref iOldWidth, ref iOldHeight, iImgWidth, iImgHeight); //
生成并保存缩略图 using(System.Drawing.Image
oThumb= oImg.GetThumbnailImage(iOldWidth, iOldHeight, callback, IntPtr.Zero)) {
oThumb.Save(sThumbPath, System.Drawing.Imaging.ImageFormat.Jpeg); } } } //
end private static void saveThumb private static bool callback() {
return false; } //
end private static bool callback private static void mtSetSize(ref Int32 iWidth_, ref Int32 iHeight_, Int32 iSetWidth, Int32 iSetHeight) { Single
iWidth=(Single)iWidth_; Single
iHeight=(Single)iHeight_; if(iWidth>iHeight) {
if(iWidth>iSetWidth) {
iHeight=iHeight-(iHeight/(iWidth/(iWidth-iSetWidth))); iWidth=iSetWidth; } }
if(iWidth<iHeight) {
if(iHeight>iSetHeight) {
iWidth=iWidth-(iWidth/(iHeight/(iHeight-iSetHeight))); iHeight=iSetHeight; } }
if(
iWidth==iHeight) {
if(iHeight>iSetHeight) {
iHeight=iSetHeight; iWidth=iSetWidth; } }
iWidth_=(Int32)iWidth; iHeight_=(Int32)iHeight; } //
end private static void mtSetSize private static void saveThumb(String sImgPath, String sThumbPath, Int32 iImgWidth, Int32 iImgHeight) { using(System.Drawing.Image
oImg=System.Drawing.Image.FromFile(sImgPath)) { System.Drawing.Image.GetThumbnailImageAbort
callback = new System.Drawing.Image.GetThumbnailImageAbort(thumb.callback); Int32
iOldWidth=oImg.Width; Int32
iOldHeight=oImg.Height; //
按比较设置宽高 thumb.mtSetSize(ref iOldWidth, ref iOldHeight, iImgWidth, iImgHeight); //
生成并保存缩略图 using(System.Drawing.Image
oThumb= oImg.GetThumbnailImage(iOldWidth, iOldHeight, callback, IntPtr.Zero)) { //
oThumb.Save(sThumbPath, System.Drawing.Imaging.ImageFormat.Jpeg);
oThumb.Save(sThumbPath, oImg.RawFormat); } } } //
end private static void saveThumb //
-----------------------------------end private static method //
-----------------------------------begin public variable //
-----------------------------------end public variable //
-----------------------------------begin public method //
-----------------------------------end public method //
-----------------------------------begin private variable //
-----------------------------------end private variable //
-----------------------------------begin private method //
-----------------------------------end private method //
-----------------------------------begin public property //
-----------------------------------end public property //
-----------------------------------begin private property //
-----------------------------------end private property } //
---------------------------------------------------------------------end class thumb </script> </head> <body> <form
runat="server"> </form> </body> </html>