ASP.NET2.0打通文件图片处理任督二脉【月儿原创】
ASP.NET2.0打通文件圖片處理任督二脈
作者:清清月兒
主頁:http://blog.csdn.net/21aspnet/?????????? 時間:2007.4.1
1.最簡單的單文件上傳(沒花頭)
2.多文件上傳
3.客戶端檢查上傳文件類型(以上傳圖片為例)
4.服務器端檢查上傳文件類型(以上傳圖片為例)
5.服務器端檢查上傳文件類型(可以檢測真正文件名)
6.上傳文件文件名唯一性處理(時間戳+SessionID)
7.上傳圖片生成等比例縮略圖
8.上傳圖片加水印(文字水印,圖片水印,文字+圖片水印)
9.
1.最簡單的單文件上傳(沒花頭)
效果圖:
說明:這是最基本的文件上傳,在asp.net1.x中沒有這個FileUpload控件,只有html的上傳控件,那時候要把html控件轉化為服務器控件,很不好用。其實所有文件上傳的美麗效果都是從這個FileUpload控件衍生,第一個例子雖然簡單卻是根本。
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
??????? try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????? string serverpath = Server.MapPath("images/") + filename;
??????????????? FileUpload1.PostedFile.SaveAs(serverpath);
??????????????? this.lb_info.Text = "上傳成功!";
??????????? }
??????? }
??????? catch (Exception ex)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因是:" + ex.ToString();
??????? }
??? }
}
前臺代碼:
?<table style="width: 343px">
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? 單文件上傳</td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? <asp:FileUpload ID="FileUpload1" runat="server" Width="475px" />
??????????????????? </td>
??????????????? <td style="width: 100px">
??????????????????? <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="上傳" /></td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px; height: 21px;">
??????????????????? <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
??????????????? <td style="width: 100px; height: 21px">
??????????????? </td>
??????????? </tr>
??????? </table>
2.多文件上傳
效果圖:
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
???????
??????????? if ((FileUpload1.PostedFile.FileName == "" && FileUpload2.PostedFile.FileName == "")&&FileUpload3.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? HttpFileCollection myfiles = Request.Files;
??????????????? for (int i = 0; i < myfiles.Count; i++)
??????????????? {
??????????????????? HttpPostedFile mypost = myfiles[i];
??????????????????? try
??????????????????? {
??????????????????????? if (mypost.ContentLength > 0)
??????????????????????? {
???????????????????????????? string filepath = mypost.FileName;
???????????????????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
???????????????????????????? string serverpath = Server.MapPath("images/") + filename;
???????????????????????????? mypost.SaveAs(serverpath);
???????????????????????????? this.lb_info.Text = "上傳成功!";
??????????????????????? }
??????????????????? }
??????????????????? catch (Exception error)
??????????????????? {
??????????????????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????????????????? }
??????????????? }
??????????????
??????????? }
??????? }
??????
??? }
前臺代碼:
?<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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 runat="server">
??? <title>多文件上傳 清清月兒http://blog.csdn.net/21aspnet/</title>
</head>
<body>
??? <form id="form1" runat="server">
??? <div>
??????? <table style="width: 343px">
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? 多文件上傳</td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? <asp:FileUpload ID="FileUpload1" runat="server" Width="475px" />
??????????????????? </td>
??????????????? <td style="width: 100px">
??????????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? <asp:FileUpload ID="FileUpload2" runat="server" Width="475px" /></td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? <asp:FileUpload ID="FileUpload3" runat="server" Width="475px" /></td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 100px">
??????????????????? <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="一起上傳" />
??????????????????? <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????? </table>
???
??? </div>
??? </form>
</body>
</html>
3.客戶端檢查上傳文件類型(以上傳圖片為例)
效果圖:
后臺代碼和1.最簡單的單文件上傳一樣;
前臺代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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 runat="server">
??? <title>清清月兒 http://blog.csdn.net/21aspnet</title>
<script?? language="javascript">?
?function Check_FileType()
{
var str=document.getElementById("FileUpload1").value;
?var pos = str.lastIndexOf(".");
?var lastname = str.substring(pos,str.length)?
?if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")
?{
???? alert("您上傳的文件類型為"+lastname+",圖片必須為.jpg,.gif類型");
???? return false;
?}
?else
?{
? return true;
?}
}
?</script>?
</head>
<body>
??? <form id="form1" runat="server">
??? <div>
??????? <table style="width: 343px">
??????????? <tr>
??????????????? <td style="width: 104px">
??????????????????? 文件上傳判斷</td>
??????????????? <td style="width: 100px">
??????????????? </td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 104px">
??????????????????? <asp:FileUpload ID="FileUpload1" runat="server" Width="400px" />
??????????????????? </td>
??????????????? <td style="width: 100px">
??????????????????? <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="上傳"? OnClientClick="return Check_FileType()"/></td>
??????????? </tr>
??????????? <tr>
??????????????? <td style="width: 104px; height: 21px;">
??????????????????? <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
??????????????? <td style="width: 100px; height: 21px">
??????????????? </td>
??????????? </tr>
??????? </table>
???
??? </div>
??? </form>
</body>
</html>
說明:點擊上傳時先觸發(fā)客戶端事件Check_FileType;
4.服務器端檢查上傳文件類型(以上傳圖片為例)
效果圖:
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
??????? try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? if (IsAllowedExtension(FileUpload1) == true)
??????????????? {
??????????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????????? string serverpath = Server.MapPath("images/") + filename;
??????????????????? FileUpload1.PostedFile.SaveAs(serverpath);
??????????????????? this.lb_info.Text = "上傳成功!";
??????????????? }
??????????????? else
??????????????? {
??????????????????? this.lb_info.Text = "請上傳圖片";
??????????????? }
??????????? }
??????? }
??????? catch (Exception error)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????? }
??? }
???public static bool IsAllowedExtension(FileUpload hifile)
??? {
??????? string strOldFilePath = "", strExtension = "";
??????? string[] arrExtension =?? { ".gif", ".jpg", ".jpeg", ".bmp", ".png" };
??????? if (hifile.PostedFile.FileName != string.Empty)
??????? {
??????????? strOldFilePath = hifile.PostedFile.FileName;
??????????? strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf("."));
??????????? for (int i = 0; i < arrExtension.Length; i++)
??????????? {
??????????????? if (strExtension.Equals(arrExtension[i]))
??????????????? {
??????????????????? return true;
??????????????? }
??????????? }
??????? }
??????? return false;
??? }??
}
?5.服務器端檢查上傳文件類型(可以檢測真正文件名)
其實方法4并不好,因為用戶可以把XXX.txt偽裝為XXX.jpg。
效果圖:
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? //清清月兒 http://blog.csdn.net/21aspnet
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
??????? try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? if (IsAllowedExtension(FileUpload1) == true)
??????????????? {
??????????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????????? string serverpath = Server.MapPath("images/") + filename;
??????????????????? FileUpload1.PostedFile.SaveAs(serverpath);
??????????????????? this.lb_info.Text = "上傳成功!";
??????????????? }
??????????????? else
??????????????? {
??????????????????? this.lb_info.Text = "請上傳圖片";
??????????????? }
??????????? }
??????? }
??????? catch (Exception error)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????? }
??? }
??? public static bool IsAllowedExtension(FileUpload hifile)
??? {
??????? System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
??????? System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
??????? string fileclass = "";
??????? byte buffer;
??????? try
??????? {
??????????? buffer = r.ReadByte();
??????????? fileclass = buffer.ToString();
??????????? buffer = r.ReadByte();
??????????? fileclass += buffer.ToString();
??????? }
??????? catch
??????? {
??????????
??????? }
??????? r.Close();
??????? fs.Close();
??????? if (fileclass == "255216" || fileclass == "7173")//說明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
??????? {
??????????? return true;
??????? }
??????? else
??????? {
??????????? return false;
??????? }
??? }??
}
6.上傳文件文件名唯一性處理(時間戳+SessionID)
效果圖:
說明:年月日時分秒+臨時session+原文件名 如果大家怕還會重復可以加GUID
后臺代碼:
try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????? string serverpath = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
??????????????? FileUpload1.PostedFile.SaveAs(serverpath);
??????????????? this.lb_info.Text = "上傳成功!";
??????????? }
??????? }
??????? catch (Exception error)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????? }
注:GUID的方法:Guid myGuid=Guid.NewGuid();
7.上傳圖片生成等比例縮略圖
效果圖:
縮略圖代碼:
ImageThumbnail.cs
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
public class ImageThumbnail
{
??? public Image ResourceImage;
??? private int ImageWidth;
??? private int ImageHeight;
??? public string ErrorMessage;
??? public ImageThumbnail(string ImageFileName)
??? {
??????? ResourceImage = Image.FromFile(ImageFileName);
??????? ErrorMessage = "";
??? }
??? public bool ThumbnailCallback()
??? {
??????? return false;
??? }
??? // 方法1,按大小
??? public bool ReducedImage(int Width, int Height, string targetFilePath)
??? {
??????? try
??????? {
??????????? Image ReducedImage;
??????????? Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
??????????? ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
??????????? ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
??????????? ReducedImage.Dispose();
??????????? return true;
??????? }
??????? catch (Exception e)
??????? {
??????????? ErrorMessage = e.Message;
??????????? return false;
??????? }
??? }
??? // 方法2,按百分比? 縮小60% Percent為0.6 targetFilePath為目標路徑
??? public bool ReducedImage(double Percent, string targetFilePath)
??? {
??????? try
??????? {
??????????? Image ReducedImage;
??????????? Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
??????????? ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
??????????? ImageHeight = (ResourceImage.Height)*ImageWidth/ ResourceImage.Width;//等比例縮放
??????????? ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
??????????? ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
??????????? ReducedImage.Dispose();
??????????? return true;
??????? }
??????? catch (Exception e)
??????? {
??????????? ErrorMessage = e.Message;
??????????? return false;
??????? }
??? }
}
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
??????? try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????? string serverpath1 = Server.MapPath("images/") + filename;
??????????????? string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
??????????????? FileUpload1.PostedFile.SaveAs(serverpath1);
??????????????? ImageThumbnail img = new ImageThumbnail(filepath);
??????????????? img.ReducedImage(0.4, serverpath2);//0.4表示縮小40%
??????????????? this.lb_info.Text = "上傳成功!";
??????????? }
??????? }
??????? catch (Exception error)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????? }
??? }
}
8.上傳圖片加水印(文字水印,圖片水印,文字+圖片水印)
效果圖:
原圖
水印
給圖片加水印以后(注意右上角+正下方)
代碼:
DrawImg.cs? 出自http://www.codeproject.com/csharp/watermark.asp
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
public class DrawImg
{
?private string? WorkingDirectory = string.Empty ; //路徑
?private string? ImageName = string.Empty;?? //被處理的圖片
?private string? ImageWater = string.Empty;? //水印圖片
?private string? FontString = string.Empty;? //水印文字
?
?enum DealType{NONE,WaterImage,WaterFont,DoubleDo}; //枚舉命令
?private DealType dealtype;
?
?public DrawImg()
?{}
?public string PublicWorkingDirectory
?{
??get
??{
???return WorkingDirectory;
??}
??set
??{
???WorkingDirectory = value;
??}
?}
?public string PublicImageName
?{
??get
??{
???return ImageName;
??}
??set
??{
???ImageName = value;
??}
?}
?public string PublicImageWater
?{
??get
??{
???return ImageWater;
??}
??set? //設置了水印圖片的話說明是要水印圖片效果的
??{
???dealtype = DealType.WaterImage;
???ImageWater = value;
??}
?}
?public string PublicFontString
?{
??get
??{
???return FontString;
??}
??set //設置了水印文字的話說明是要水印文字效果的
??{
???dealtype = DealType.WaterFont;
???FontString = value;
??}
?}
?
?public void DealImage()
?{
??IsDouble();
??switch( dealtype )
??{
???case DealType.WaterFont: WriteFont(); break;
???case DealType.WaterImage: WriteImg(); break;
???case DealType.DoubleDo: WriteFontAndImg(); break;
??}
?}
?private void IsDouble()
?{
??if(ImageWater+""!="" && FontString+""!="")
??{
??????????? dealtype = DealType.DoubleDo;
??}
?}
?private void WriteFont()
?{
??//set a working directory
??//string WorkingDirectory = @"C:/Watermark_src/WaterPic";
??//define a string of text to use as the Copyright message
??//string Copyright = "Copyright ?2002 - AP Photo/David Zalubowski";
??//create a image object containing the photograph to watermark
??Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
??int phWidth = imgPhoto.Width;
??int phHeight = imgPhoto.Height;
??//create a Bitmap the Size of the original photograph
??Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
??bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
??//load the Bitmap into a Graphics object
??Graphics grPhoto = Graphics.FromImage(bmPhoto);
??//------------------------------------------------------------
??//Step #1 - Insert Copyright message
??//------------------------------------------------------------
??//Set the rendering quality for this Graphics object
??grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
??//Draws the photo Image object at original size to the graphics object.
??grPhoto.DrawImage(
???imgPhoto,?????????????????????????????? // Photo Image object
???new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
???0,????????????????????????????????????? // x-coordinate of the portion of the source image to draw.
???0,????????????????????????????????????? // y-coordinate of the portion of the source image to draw.
???phWidth,??????????????????????????????? // Width of the portion of the source image to draw.
???phHeight,?????????????????????????????? // Height of the portion of the source image to draw.
???GraphicsUnit.Pixel);??????????????????? // Units of measure
??//-------------------------------------------------------
??//to maximize the size of the Copyright message we will
??//test multiple Font sizes to determine the largest posible
??//font we can use for the width of the Photograph
??//define an array of point sizes you would like to consider as possiblities
??//-------------------------------------------------------
??int[] sizes = new int[]{16,14,12,10,8,6,4};
??Font crFont = null;
??SizeF crSize = new SizeF();
??//Loop through the defined sizes checking the length of the Copyright string
??//If its length in pixles is less then the image width choose this Font size.
??for (int i=0 ;i<7; i++)
??{
???//set a Font object to Arial (i)pt, Bold
???//crFont = new Font("arial", sizes[i], FontStyle.Bold);
???crFont = new Font("arial",sizes[i],FontStyle.Bold);
???//Measure the Copyright string in this Font
???crSize = grPhoto.MeasureString(FontString, crFont);
???if((ushort)crSize.Width < (ushort)phWidth)
????break;
??}
??//Since all photographs will have varying heights, determine a
??//position 5% from the bottom of the image
??int yPixlesFromBottom = (int)(phHeight *.05);
??//Now that we have a point size use the Copyrights string height
??//to determine a y-coordinate to draw the string of the photograph
??float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));
??//Determine its x-coordinate by calculating the center of the width of the image
??float xCenterOfImg = (phWidth/2);
??//Define the text layout by setting the text alignment to centered
??StringFormat StrFormat = new StringFormat();
??StrFormat.Alignment = StringAlignment.Center;
??//define a Brush which is semi trasparent black (Alpha set to 153)
??SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));
??//Draw the Copyright string
??grPhoto.DrawString(FontString,???????????????? //string of text
???crFont,?????????????????????????????????? //font
???semiTransBrush2,?????????????????????????? //Brush
???new PointF(xCenterOfImg+1,yPosFromBottom+1),? //Position
???StrFormat);
??//define a Brush which is semi trasparent white (Alpha set to 153)
??SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));
??//Draw the Copyright string a second time to create a shadow effect
??//Make sure to move this text 1 pixel to the right and down 1 pixel
??grPhoto.DrawString(FontString,???????????????? //string of text
???crFont,?????????????????????????????????? //font
???semiTransBrush,?????????????????????????? //Brush
???new PointF(xCenterOfImg,yPosFromBottom),? //Position
???StrFormat);???
??
??imgPhoto = bmPhoto;
??grPhoto.Dispose();
??//save new image to file system.
??imgPhoto.Save(WorkingDirectory + ImageName + "_finally.jpg", ImageFormat.Jpeg);
??imgPhoto.Dispose();
??
??//Text alignment
?}
?private void WriteImg()
?{
??//set a working directory
??//string WorkingDirectory = @"C:/Watermark_src/WaterPic";
??//create a image object containing the photograph to watermark
??Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
??int phWidth = imgPhoto.Width;
??int phHeight = imgPhoto.Height;
??//create a Bitmap the Size of the original photograph
??Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
??bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
??//load the Bitmap into a Graphics object
??Graphics grPhoto = Graphics.FromImage(bmPhoto);
??//create a image object containing the watermark
??Image imgWatermark = new Bitmap(WorkingDirectory + ImageWater);
??int wmWidth = imgWatermark.Width;
??int wmHeight = imgWatermark.Height;
??//Set the rendering quality for this Graphics object
??grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
??//Draws the photo Image object at original size to the graphics object.
??grPhoto.DrawImage(
???imgPhoto,?????????????????????????????? // Photo Image object
???new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
???0,????????????????????????????????????? // x-coordinate of the portion of the source image to draw.
???0,????????????????????????????????????? // y-coordinate of the portion of the source image to draw.
???phWidth,??????????????????????????????? // Width of the portion of the source image to draw.
???phHeight,?????????????????????????????? // Height of the portion of the source image to draw.
???GraphicsUnit.Pixel);??????????????????? // Units of measure
??//------------------------------------------------------------
??//Step #2 - Insert Watermark image
??//------------------------------------------------------------
??//Create a Bitmap based on the previously modified photograph Bitmap
??Bitmap bmWatermark = new Bitmap(bmPhoto);
??bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
??//Load this Bitmap into a new Graphic Object
??Graphics grWatermark = Graphics.FromImage(bmWatermark);
??//To achieve a transulcent watermark we will apply (2) color
??//manipulations by defineing a ImageAttributes object and
??//seting (2) of its properties.
??ImageAttributes imageAttributes = new ImageAttributes();
??//The first step in manipulating the watermark image is to replace
??//the background color with one that is trasparent (Alpha=0, R=0, G=0, B=0)
??//to do this we will use a Colormap and use this to define a RemapTable
??ColorMap colorMap = new ColorMap();
??//My watermark was defined with a background of 100% Green this will
??//be the color we search for and replace with transparency
??colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
??colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
??ColorMap[] remapTable = {colorMap};
??imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
??//The second color manipulation is used to change the opacity of the
??//watermark.? This is done by applying a 5x5 matrix that contains the
??//coordinates for the RGBA space.? By setting the 3rd row and 3rd column
??//to 0.3f we achive a level of opacity
??float[][] colorMatrixElements = {
???????????new float[] {1.0f,? 0.0f,? 0.0f,? 0.0f, 0.0f},??????
???????????new float[] {0.0f,? 1.0f,? 0.0f,? 0.0f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 1.0f,? 0.0f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 0.0f,? 0.3f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 0.0f,? 0.0f, 1.0f}};
??ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
??imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
???ColorAdjustType.Bitmap);
??//For this example we will place the watermark in the upper right
??//hand corner of the photograph. offset down 10 pixels and to the
??//left 10 pixles
??int xPosOfWm = ((phWidth - wmWidth)-10);
??int yPosOfWm = 10;
??grWatermark.DrawImage(imgWatermark,
???new Rectangle(xPosOfWm,yPosOfWm,wmWidth,wmHeight),? //Set the detination Position
???0,????????????????? // x-coordinate of the portion of the source image to draw.
???0,????????????????? // y-coordinate of the portion of the source image to draw.
???wmWidth,??????????? // Watermark Width
???wmHeight,????? // Watermark Height
???GraphicsUnit.Pixel, // Unit of measurment
???imageAttributes);?? //ImageAttributes Object
??//Replace the original photgraphs bitmap with the new Bitmap
??imgPhoto = bmWatermark;
??grPhoto.Dispose();
??grWatermark.Dispose();
??//save new image to file system.
??imgPhoto.Save(WorkingDirectory + ImageName +"_finally.jpg", ImageFormat.Jpeg);
??imgPhoto.Dispose();
??imgWatermark.Dispose();
?}
?private void WriteFontAndImg()
?{??
??
??//create a image object containing the photograph to watermark
??Image imgPhoto = Image.FromFile(WorkingDirectory + ImageName);
??int phWidth = imgPhoto.Width;
??int phHeight = imgPhoto.Height;
??//create a Bitmap the Size of the original photograph
??Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);
??bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
??//load the Bitmap into a Graphics object
??Graphics grPhoto = Graphics.FromImage(bmPhoto);
??//create a image object containing the watermark
??Image imgWatermark = new Bitmap(WorkingDirectory + ImageWater);
??int wmWidth = imgWatermark.Width;
??int wmHeight = imgWatermark.Height;
??//------------------------------------------------------------
??//Step #1 - Insert Copyright message
??//------------------------------------------------------------
??//Set the rendering quality for this Graphics object
??grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
??//Draws the photo Image object at original size to the graphics object.
??grPhoto.DrawImage(
???imgPhoto,?????????????????????????????? // Photo Image object
???new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
???0,????????????????????????????????????? // x-coordinate of the portion of the source image to draw.
???0,????????????????????????????????????? // y-coordinate of the portion of the source image to draw.
???phWidth,??????????????????????????????? // Width of the portion of the source image to draw.
???phHeight,?????????????????????????????? // Height of the portion of the source image to draw.
???GraphicsUnit.Pixel);??????????????????? // Units of measure
??//-------------------------------------------------------
??//to maximize the size of the Copyright message we will
??//test multiple Font sizes to determine the largest posible
??//font we can use for the width of the Photograph
??//define an array of point sizes you would like to consider as possiblities
??//-------------------------------------------------------
??int[] sizes = new int[]{16,14,12,10,8,6,4};
??Font crFont = null;
??SizeF crSize = new SizeF();
??//Loop through the defined sizes checking the length of the Copyright string
??//If its length in pixles is less then the image width choose this Font size.
??for (int i=0 ;i<7; i++)
??{
???//set a Font object to Arial (i)pt, Bold
???crFont = new Font("arial", sizes[i], FontStyle.Bold);
???//Measure the Copyright string in this Font
???crSize = grPhoto.MeasureString(FontString, crFont);
???if((ushort)crSize.Width < (ushort)phWidth)
????break;
??}
??//Since all photographs will have varying heights, determine a
??//position 5% from the bottom of the image
??int yPixlesFromBottom = (int)(phHeight *.05);
??//Now that we have a point size use the Copyrights string height
??//to determine a y-coordinate to draw the string of the photograph
??float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));
??//Determine its x-coordinate by calculating the center of the width of the image
??float xCenterOfImg = (phWidth/2);
??//Define the text layout by setting the text alignment to centered
??StringFormat StrFormat = new StringFormat();
??StrFormat.Alignment = StringAlignment.Center;
??//define a Brush which is semi trasparent black (Alpha set to 153)
??SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));
??//Draw the Copyright string
??grPhoto.DrawString(FontString,???????????????? //string of text
???crFont,?????????????????????????????????? //font
???semiTransBrush2,?????????????????????????? //Brush
???new PointF(xCenterOfImg+1,yPosFromBottom+1),? //Position
???StrFormat);
??//define a Brush which is semi trasparent white (Alpha set to 153)
??SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));
??//Draw the Copyright string a second time to create a shadow effect
??//Make sure to move this text 1 pixel to the right and down 1 pixel
??grPhoto.DrawString(FontString,???????????????? //string of text
???crFont,?????????????????????????????????? //font
???semiTransBrush,?????????????????????????? //Brush
???new PointF(xCenterOfImg,yPosFromBottom),? //Position
???StrFormat);?????????????????????????????? //Text alignment
???
??//------------------------------------------------------------
??//Step #2 - Insert Watermark image
??//------------------------------------------------------------
??//Create a Bitmap based on the previously modified photograph Bitmap
??Bitmap bmWatermark = new Bitmap(bmPhoto);
??bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
??//Load this Bitmap into a new Graphic Object
??Graphics grWatermark = Graphics.FromImage(bmWatermark);
??//To achieve a transulcent watermark we will apply (2) color
??//manipulations by defineing a ImageAttributes object and
??//seting (2) of its properties.
??ImageAttributes imageAttributes = new ImageAttributes();
??//The first step in manipulating the watermark image is to replace
??//the background color with one that is trasparent (Alpha=0, R=0, G=0, B=0)
??//to do this we will use a Colormap and use this to define a RemapTable
??ColorMap colorMap = new ColorMap();
??//My watermark was defined with a background of 100% Green this will
??//be the color we search for and replace with transparency
??colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
??colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
??ColorMap[] remapTable = {colorMap};
??imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
??//The second color manipulation is used to change the opacity of the
??//watermark.? This is done by applying a 5x5 matrix that contains the
??//coordinates for the RGBA space.? By setting the 3rd row and 3rd column
??//to 0.3f we achive a level of opacity
??float[][] colorMatrixElements = {
???????????new float[] {1.0f,? 0.0f,? 0.0f,? 0.0f, 0.0f},??????
???????????new float[] {0.0f,? 1.0f,? 0.0f,? 0.0f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 1.0f,? 0.0f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 0.0f,? 0.3f, 0.0f},???????
???????????new float[] {0.0f,? 0.0f,? 0.0f,? 0.0f, 1.0f}};
??ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
??imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
???ColorAdjustType.Bitmap);
??//For this example we will place the watermark in the upper right
??//hand corner of the photograph. offset down 10 pixels and to the
??//left 10 pixles
??int xPosOfWm = ((phWidth - wmWidth)-10);
??int yPosOfWm = 10;
??grWatermark.DrawImage(imgWatermark,
???new Rectangle(xPosOfWm,yPosOfWm,wmWidth,wmHeight),? //Set the detination Position
???0,????????????????? // x-coordinate of the portion of the source image to draw.
???0,????????????????? // y-coordinate of the portion of the source image to draw.
???wmWidth,??????????? // Watermark Width
???wmHeight,????? // Watermark Height
???GraphicsUnit.Pixel, // Unit of measurment
???imageAttributes);?? //ImageAttributes Object
??//Replace the original photgraphs bitmap with the new Bitmap
??imgPhoto = bmWatermark;
??grPhoto.Dispose();
??grWatermark.Dispose();
??//save new image to file system.
??imgPhoto.Save(WorkingDirectory + ImageName +"_finally.jpg", ImageFormat.Jpeg);
??imgPhoto.Dispose();
??imgWatermark.Dispose();
???????
?}
}
?//水印圖片加水印文字
//???ReDrawImg img = new ReDrawImg();
//???img .PublicWorkingDirectory = @"C:/Watermark_src/WaterPic/";
//???img .PublicImageName = "watermark_photo.jpg";
//???img .PublicImageWater = "watermark.bmp";
//???img .PublicFontString = "清清月兒";
//???img .DealImage();?
??
???//水印文字
???ReDrawImg img = new ReDrawImg();
???img .PublicWorkingDirectory = @"C:/Watermark_src/WaterPic/";
???img .PublicImageName = "watermark_photo.jpg";???
???img .PublicFontString = @"清清月兒";
???img .DealImage();
?
???//水印圖片
//???ReDrawImg img = new ReDrawImg();
//???img .PublicWorkingDirectory = @"C:/Watermark_src/WaterPic/";
//???img .PublicImageName = "watermark_photo.jpg";
//???img .PublicImageWater = "watermark.bmp";???
//???img .DealImage();?
??
?
后臺代碼:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? protected void bt_upload_Click(object sender, EventArgs e)
??? {
??????? try
??????? {
??????????? if (FileUpload1.PostedFile.FileName == "")
??????????? {
??????????????? this.lb_info.Text = "請選擇文件!";
??????????? }
??????????? else
??????????? {
??????????????? string filepath = FileUpload1.PostedFile.FileName;
??????????????? string filename = filepath.Substring(filepath.LastIndexOf("//") + 1);
??????????????? string serverpath1 = Server.MapPath("images/") + filename;
??????????????? //string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
??????????????? FileUpload1.PostedFile.SaveAs(serverpath1);
??????????????? //ImageThumbnail img = new ImageThumbnail(filepath);
??????????????? //img.ReducedImage(0.4, serverpath2);
??????????????? DrawImg img = new DrawImg();
??????????????? img.PublicWorkingDirectory = Server.MapPath("images/");
??????????????? img.PublicImageName = filename;
??????????????? img.PublicFontString = "http://blog.csdn.net/21aspnet";
??????????????? img.PublicImageWater = "yyy.jpg";
??????????????? img.DealImage();
??????????????? this.lb_info.Text = "上傳成功!";
??????????? }
??????? }
??????? catch (Exception error)
??????? {
??????????? this.lb_info.Text = "上傳發(fā)生錯誤!原因:" + error.ToString();
??????? }
??? }
}
?此文未完,待續(xù)
總結
以上是生活随笔為你收集整理的ASP.NET2.0打通文件图片处理任督二脉【月儿原创】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET2.0雷霆之怒盗链者的祝福
- 下一篇: 红豆多少钱一啊?