使用ASP.net(C#)批量上傳圖片並自動生成縮圖,文字水印圖,圖片水印圖
因本網站上傳圖片的需要,參考很多成熟的經驗,在ASP.net平臺上使用C#語言,做了這一自動批量上傳圖片的.ASPX檔案,並經除錯成功,在本網站上使用,現發出來供大家參考,也希望高手多加指點。 本程式主要功能有: (1)可以根據自己的需要更改上傳到伺服器上的目錄,上傳的源圖、縮圖、文字水印圖和圖片水印圖分別存入所定目錄下的不同目錄; (2)自動檢查目錄,如無所選擇的目錄,則自動建立它們; (3)自行設定生成縮圖的大小; (4)可以選擇是否需要生成文字水印、圖片水印,預設為不生成水印圖; (5)可以新增、刪除所需上傳的圖片。 在本程式中均加了相關注釋,所以直接發程式碼,不再多作解釋。 後臺程式:
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.IO;
- using System.Net;
- using System.Text.RegularExpressions;
- /// <summary>
- /// FileUpload1.HasFile 如果是true,則表示該控制元件有檔案要上傳
- /// FileUpload1.FileName 返回要上傳檔案的名稱,不包含路徑資訊
- /// FileUpload1.FileContent 返回一個指向上傳檔案的流物件
- /// FileUpload1.PostedFile 返回已經上傳檔案的引用
- /// FileUpload1.PostedFile.ContentLength 返回上傳檔案的按位元組表示的檔案大小
- /// FileUpload1.PostedFile.ContentType 返回上傳檔案的MIME內容型別,也就是檔案型別,如返回"image/jpg"
- /// FileUpload1.PostedFile.FileName 返回檔案在客戶端的完全路徑(包括檔名全稱)
- /// FileUpload1.PostedFile.InputStream 返回一個指向上傳檔案的流物件
- /// FileInfo物件表示磁碟或網路位置上的檔案。提供檔案的路徑,就可以建立一個FileInfo物件:
- /// </summary>
- public partial class BackManagement_ImagesUpload : System.Web.UI.Page
- {
- publicstring treePath = "";
- publicint imageW = 100;
- publicint imageH = 100;
- protectedvoid Page_Load(object sender, EventArgs e)
- {
- this.Button5.Attributes.Add("Onclick", "window.close();"); //在本地關閉當前頁,而不需要傳送到伺服器去關閉當前頁時
- if (!Page.IsPostBack)
- {
- Label2.Text = Server.MapPath("/");
- TextBox3.Text = "ImageUpload";
- treePath = Server.MapPath("/") + TextBox3.Text.Trim() + "/";
- TextBox4.Text = imageW.ToString();
- TextBox5.Text = imageH.ToString();
- }
- }
- protectedvoid btnload_Click(object sender, EventArgs e)
- {
- //如果儲存圖片的目錄不存在,由建立它
- treePath = Server.MapPath("/") + TextBox3.Text.Trim() + "/";
- imageW = Convert.ToInt32(TextBox4.Text.ToString());
- imageH = Convert.ToInt32(TextBox5.Text.ToString());
- if (!File.Exists(treePath + "images")) //如果/ImageUpload/images不存在,則建立/ImageUpload/images,用於存放源圖片
- {
- System.IO.Directory.CreateDirectory(treePath + "images");
- }
- if (!File.Exists(treePath + "thumbnails")) //如果/ImageUpload/thumbnails不存在,則建立/ImageUpload/thumbnails,用於存放縮圖片
- {
- System.IO.Directory.CreateDirectory(treePath + "thumbnails");
- }
- if (!File.Exists(treePath + "textImages")) //如果/ImageUpload/textImages不存在,則建立/ImageUpload/textImages,用於存文字水印圖片
- {
- System.IO.Directory.CreateDirectory(treePath + "textImages");
- }
- if (!File.Exists(treePath + "waterImages")) //如果/ImageUpload/waterImages不存在,則建立/ImageUpload/waterImages,用於存圖形水印圖片
- {
- System.IO.Directory.CreateDirectory(treePath + "waterImages");
- }
- if (FileUpload1.HasFile) //如果是true,則表示該控制元件有檔案要上傳
- {
- string fileContentType = FileUpload1.PostedFile.ContentType;
- if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/pjpeg")
- {
- string name = FileUpload1.PostedFile.FileName; //返回檔案在客戶端的完全路徑(包括檔名全稱)
- FileInfo file = new FileInfo(name); //FileInfo物件表示磁碟或網路位置上的檔案。提供檔案的路徑,就可以建立一個FileInfo物件:
- string fileName = file.Name; // 檔名稱
- string fileName_s = "x_" + file.Name; // 縮圖檔名稱
- string fileName_sy = "text_" + file.Name; // 水印圖檔名稱(文字)
- string fileName_syp = "water_" + file.Name; // 水印圖檔名稱(圖片)
- string webFilePath = treePath + "images/" + fileName; // 伺服器端檔案路徑
- string webFilePath_s = treePath + "thumbnails/" + fileName_s; // 伺服器端縮圖路徑
- string webFilePath_sy = treePath + "textImages/" + fileName_sy; // 伺服器端帶水印圖路徑(文字)
- string webFilePath_syp = treePath + "waterImages/" + fileName_syp; // 伺服器端帶水印圖路徑(圖片)
- string webFilePath_sypf = Server.MapPath("../images/tzwhx.png"); // 伺服器端水印圖路徑(圖片)
- if (!File.Exists(webFilePath))
- {
- try
- {
- FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法儲存檔案
- if (CheckBox1.Checked) //是否生成文字水印圖
- {
- AddWater(webFilePath, webFilePath_sy);
- }
- if (CheckBox2.Checked) //是否生成圖形水印圖
- {
- AddWaterPic(webFilePath, webFilePath_syp, webFilePath_sypf);
- }
- MakeThumbnail(webFilePath, webFilePath_s, imageW, imageH, "Cut"); // 生成縮圖方法
- Label1.Text = "提示:檔案“" + fileName + "”成功上傳,並生成“" + fileName_s + "”縮圖,檔案型別為:" + FileUpload1.PostedFile.ContentType + ",檔案大小為:" + FileUpload1.PostedFile.ContentLength + "B";
- Image1.ImageUrl = "/" + TextBox3.Text.ToString() + "/images/" + fileName;
- TextBox1.Text = webFilePath;
- TextBox2.Text = "/" + TextBox3.Text.ToString() + "/images/" + fileName;
- }
- catch (Exception ex)
- {
- Label1.Text = "提示:檔案上傳失敗,失敗原因:" + ex.Message;
- }
- }
- else
- {
- Label1.Text = "提示:檔案已經存在,請重新命名後上傳";
- }
- }
- else
- {
- Label1.Text = "提示:檔案型別不符";
- }
- }
- }
- /**/
- /// <summary>
- /// 生成縮圖
- /// </summary>
- /// <param name="originalImagePath">源圖路徑(物理路徑)</param>
- /// <param name="thumbnailPath">縮圖路徑(物理路徑)</param>
- /// <param name="width">縮圖寬度</param>
- /// <param name="height">縮圖高度</param>
- /// <param name="mode">生成縮圖的方式</param>
- publicstaticvoid MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
- {
- System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
- int towidth = width;
- int toheight = height;
- int x = 0;
- int y = 0;
- int ow = originalImage.Width;
- int oh = originalImage.Height;
- switch (mode)
- {
- case"HW"://指定高寬縮放(可能變形)
- break;
- case"W"://指定寬,高按比例
- toheight = originalImage.Height * width / originalImage.Width;
- break;
- case"H"://指定高,寬按比例
- towidth = originalImage.Width * height / originalImage.Height;
- break;
- case"Cut"://指定高寬裁減(不變形)
- if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
- {
- oh = originalImage.Height;
- ow = originalImage.Height * towidth / toheight;
- y = 0;
- x = (originalImage.Width - ow) / 2;
- } else
- {
- ow = originalImage.Width;
- oh = originalImage.Width * height / towidth;
- x = 0;
- y = (originalImage.Height - oh) / 2;
- }
- break;
- default:
- break;
- }
- //新建一個bmp圖片
- System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
- //新建一個畫板
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
- //設定高質量插值法
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- //設定高質量,低速度呈現平滑程度
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- //清空畫布並以透明背景色填充
- g.Clear(System.Drawing.Color.Transparent);
- //在指定位置並且按指定大小繪製原圖片的指定部分
- g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
- new System.Drawing.Rectangle(x, y, ow, oh),
- System.Drawing.GraphicsUnit.Pixel);
- try
- {
- //以jpg格式儲存縮圖
- bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- catch (System.Exception e)
- {
- throw e;
- }
- finally
- {
- originalImage.Dispose();
- bitmap.Dispose();
- g.Dispose();
- }
- }
- /**/
- /// <summary>
- /// 在圖片上增加文字水印
- /// </summary>
- /// <param name="Path">原伺服器圖片路徑</param>
- /// <param name="Path_sy">生成的帶文字水印的圖片路徑</param>
- protectedvoid AddWater(string Path, string Path_sy)
- {
- string addText = "www.tzwhx.com";
- System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
- g.DrawImage(image, 0, 0, image.Width, image.Height);
- System.Drawing.Font f = new System.Drawing.Font("Verdana", 10); //字型位置為左空10
- System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
- g.DrawString(addText, f, b, 14, 14); //字型大小為14X14
- g.Dispose();
- image.Save(Path_sy);
- image.Dispose();
- }
- /**/
- /// <summary>
- /// 在圖片上生成圖片水印
- /// </summary>
- /// <param name="Path">原伺服器圖片路徑</param>
- /// <param name="Path_syp">生成的帶圖片水印的圖片路徑</param>
- /// <param name="Path_sypf">水印圖片路徑</param>
- protectedvoid AddWaterPic(string Path, string Path_syp, string Path_sypf)
- {
- System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
- System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
- g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
- g.Dispose();
- image.Save(Path_syp);
- image.Dispose();
- }
- protectedvoid Button2_Click(object sender, EventArgs e)
- {
- //自動儲存遠端圖片
- WebClient client = new WebClient();
- //備用Reg:<img.*?src=([/"/'])(http:////.+/.(jpg|gif|bmp|bnp))/1.*?>
- Regex reg = new Regex("IMG[^>]*?src//s*=//s*(?:/"(?<1>[^/"]*)/"|'(?<1>[^/']*)')", RegexOptions.IgnoreCase);
- MatchCollection m = reg.Matches(TextBox1.Text);
- foreach (Match math in m)
- {
- string imgUrl = math.Groups[1].Value;
- //在原圖片名稱前加YYMMDD重名名並上傳
- Regex regName = new Regex(@"/w+.(?:jpg|gif|bmp|png)", RegexOptions.IgnoreCase);
- string strNewImgName = DateTime.Now.ToShortDateString().Replace("-", "") + regName.Match(imgUrl).ToString();
- try
- {
- //儲存圖片
- //client.DownloadFile(imgUrl, Server.MapPath("../ImageUpload/Auto/" + strNewImgName));
- }
- catch
- {
- }
- finally
- {
- }
- client.Dispose();
- }
- Response.Write("<mce:script type="text/javascript"><!--
- alert('遠端圖片儲存成功,儲存路徑為ImageUpload/auto')
- // --></mce:script>");
- }
- }
- <%@ Page Language="C#"AutoEventWireup="true"CodeFile="ImagesAutoUpload.aspx.cs"Inherits="BackManagement_ImagesAutoUpload" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <headid="Head1"runat="server">
- <title>自動上傳圖片並加文字水印</title>
- </head>
- <body>
- <formid="form1"runat="server"method="post"enctype="multipart/form-data">
- <labelfor="pagebody1"style="display: none"mce_style="display: none">
- </label>
- <fieldsetid="container">
- <legend>上傳圖片並加文字水印</legend>
- <divclass="window"style="list-style: none;"mce_style="list-style: none;">
- <divstyle="padding: 0px; width: 808px; height: 200px; float: left; margin-right: 0px;">
- <ul>
- <listyle="width: 150px; margin: 0px; padding: 0px; float: left;">
- <asp:ImageID="Image1"runat="server" Heig, ht="200px"BorderWidth="2px"Width="150px"
- ImageUrl="~/images/Jpg/135X67/0_11_16.gif"/>
- </li>
- <listyle="width: 250px; margin: 0px;">
- <asp:ListBoxID="FileList"runat="server"Width="250px"Height="200px"></asp:ListBox>
- </li>
- <listyle="width: 400px; margin: 0px; float: right;">
- (1)圖片將儲存在你網站根目錄<asp:TextBoxID="TextBox3"runat="server"></asp:TextBox>中,你可以修改它,但建議你使用預設目錄。<br/>
- (2)上傳圖片儲存在所建目錄的子目錄 /images下;縮圖在 /thumbnails下;文字水印圖在 /textImages下;圖形水印圖在 /waterImages目錄下。<br/>
- (3)生成的縮圖的預設寬度和高度均為100px,你也可以修改它們,寬為: <asp:TextBoxID="TextBox4"runat="server"Width="54px"></asp:TextBox>高為:<asp:TextBox
- ID="TextBox5"runat="server"Width="56px"></asp:TextBox><br/>
- <asp:CheckBoxID="CheckBox1"runat="server"Text="文字水印"/>
- <asp:CheckBoxID="CheckBox2"runat="server"Text="圖形水印"/>
- 你可以選擇是否生成水印圖,預設不生成。 </li>
- </ul>
- </div>
- </div>
- <div>
- <asp:FileUploadID="FindFile"runat="server"Width="529px"/>
- </div>
- <div>
- <asp:TextBoxID="TipInfo"runat="server"Width="400px"></asp:TextBox>
- <asp:TextBoxID="TextBox1"runat="server"Width="400px"></asp:TextBox>
- </div>
- <div>
- <asp:ButtonID="Upload"runat="server"Text="上 傳"Style="height: 26px"mce_Style="height: 26px"OnClick="Upload_Click"/>
- <asp:ButtonID="AddFile"runat="server"Text="添 加"OnClick="AddFile_Click1"/>
- <asp:ButtonID="AddAllFile"runat="server"Text="全部新增"OnClick="AddAllFile_Click"
- Enabled="False"/>
- <asp:ButtonID="DelFile"runat="server"Text="刪 除"OnClick="DelFile_Click1"/>
- <asp:ButtonID="btnExit"runat="server"Text="完 成"/>
- </div>
- <div>
- </div>
- </fieldset>
- </form>
- </body>
- </html>
- <system.web>
- <httpRuntimeexecutionTimeout="90"maxRequestLength="20000"useFullyQualifiedRedirectUrl="false"requestLengthDiskThreshold="8192"/>
- </system.web>
相關推薦
使用ASP.net(C#)批量上傳圖片並自動生成縮圖,文字水印圖,圖片水印圖
因本網站上傳圖片的需要,參考很多成熟的經驗,在ASP.net平臺上使用C#語言,做了這一自動批量上傳圖片的.ASPX檔案,並經除錯成功,在本網站上使用,現發出來供大家參考,也希望高手多加指點。 本程式主要功能有: (1)可以根據自己的需要更改上傳到伺服器上的目錄,上傳
一個基於ASP.NET(C#)的ACCESS數據庫操作類
region array conn 數據庫操作類 ide try esc [] int using System; using System.Collections; using System.Collections.Specialized; using Syst
asp.net+JQuery實現檔案批量上傳!
做系統的時候難免會遇到需要批量上傳這樣的需求,之前一直沒有做過,今天經理給了這個需求並簡單講了一下思路,花了點時間把它給做出來了,細想起來還是比較簡單的。 思路:用JQuery來實現動態的新增或者刪除多個上傳控制元件(如<input type="file" name=
asp.net mvc 、 ajax 批量上傳檔案
<!DOCTYPE html> <html> <head> <title>多檔案上傳</title> </head> <body> <div> &
(ajaxfileupload)ajaxfileupload 上傳時會出現連接重置的問題
plugins err cor epo poi 前臺 element overflow 你在 1.ajaxfileupload 上傳時會出現如下問題: 2. 網上有很多的解決辦法,在這裏,我又發現了一種,可能你的錯誤會是這個原因引起的 ------原因是 : 你在一般
Spring Boot參考教程(九)配置上傳下載
.net blog 不想 center src 默認 tps servlet odi 7.配置上傳下載 使用上傳下載的功能我們需要配置multipartResolver,先啟動工程,不做配置。 訪問端點/beans: Spring Boot默認實例化了一個Multip
ASP.NET 基礎多文件上傳
filename req 操作 tex 多文件上傳 遍歷 httppost con get ////多圖上傳 [HttpPost] public string duo() { ///.net 多文件
IT輪子系列(六)——Excel上傳與解析,一套代碼解決所有Excel業務上傳,你Get到了嗎
tryparse mappath src 個推 列名 import ges bject tab 前言 在日常開發當中,excel的上傳與解析是很常見的。根據業務不同,解析的數據模型也都不一樣。不同的數據模型也就需要不同的校驗邏輯,這往往需要寫多套的代碼進行字段的檢驗,如必填
ASP.NET(一)—— ASP.NET基礎
msil 虛擬 語言 mvc .net 映射 pre 後置 文件 ASP.NET優勢(有了MVC後變成劣勢): 瀏覽器無關:生成的代碼遵循w3c 的XHTML標準,不同瀏覽器顯示的內容相同 易於調試:vs2010增加了JS調試功能 運行效率高:代碼先編譯成中間語音(MS
一周死磕fastreport ----ASP.NET (一)
如何 技術分享 inf 空間 組件 安裝 tps font 存在 https://blog.csdn.net/wuyuander/article/details/52692435 原文鏈接,點擊跳轉 首先是安裝好FastReport .net; 然後在vs2012
(轉)eclipse上傳項目到碼雲
title ace eclips fontsize log 知識庫 push tle mys 把Eclipse項目上傳到碼雲的步驟: 1、登錄碼雲:新建項目 2、輸入項目名: 3、空項目創建成功如下圖: 4、右鍵點擊Eclipse的項目,選擇“Team
蘋果手機(ios)拍照上傳圖片旋轉90度問題---java後臺處理
需要先匯入包 metadata-extractor-2.3.1.jar 地址 https://github.com/drewnoakes/metadata-extractor/releases?after=2.7.0 xmpcore-5.1.2.jar 依賴包 maven下載 med
FastSocket(C/C++)、FastSocket.NET(C#)與SuperSocket(純C#) 開源庫的區別、介紹、使用方法
一、FastSocket與SuperSocket 區別 裡面包含了視訊教程。 我們到底選擇哪一款開源的Socket框架?https://blog.csdn.net/abennet/article/details/79399713 二、新浪的FastSocket介紹
在.net(C#)中隨機生成較深的顏色
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Spring MVC(四)檔案上傳
檔案上傳步驟 1.寫一個檔案上傳的頁面 2.寫一個檔案上傳的控制器 注意: 1.method="post" 2.enctype="multipart/form-data" 3.檔案型別上傳元件 type="file" 4.接收檔案引數需要使用MultipartFile 型別的引數
C# 操作Excel公式(二)——批量刪除Excel公式並保留文字值
在Excel表格中,公式很常用,在處理資料時給我們提供了極大的方便。我們可以通過建立公式來批量處理資料,同理,我們也可以通過批量刪除公式來保護資料來源或方便於我們對資料的二次操作。下面的方法將介紹如何通過C#程式設計來批量刪除Excel公式並保留值。 所需工具:Spire.XLS for .
web安全(6)-- 檔案上傳漏洞
1.1 漏洞描述 上傳漏洞這個顧名思義,就是攻擊者通過上傳木馬檔案,直接得到WEBSHELL,危害等級超級高,現在的入侵中上傳漏洞也是常見的漏洞。 導致該漏洞的原因在於程式碼作者沒有對訪客提交的資
SpringMVC(六)檔案上傳
SpringMVC(六)檔案上傳 Spring MVC對上傳檔案的支援 首先,DispatcherServlet會使用介面卡模式,將HttpServletRequest介面物件轉換為MultipartHttpServertRequest物件。MultipartHttpServet
JavaEE(6)——檔案上傳下載
實驗6 檔案上傳下載 一、實驗目的 掌握通過Servlet實現檔案上傳下載功能; 重點掌握commons-fileupload.jar接收瀏覽器上傳檔案,實現上傳功能; 二、實驗注意事項 首先檔案上傳表單的資料也是被封裝到request物件中的。
.NET(C#)能開發出什麼樣的APP?盤點那些通過Smobiler開發的移動應用
.NET程式設計師一定最熟悉所見即所得式開發,熟悉的Visual Studio開發介面,熟悉的C#程式碼。 Smobiler也是因為具備這樣的特性,使開發人員,可以在VisualStudio上,像開發WinForm一樣拖拉控制元件,讓許多人在開發APP時,再次回到所見即所得的開發方式中去。 Smobile