1 原有图片添加水印
1.1 封装一个类,用于获取文件路径
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; namespace _06_图片处理 { public static class FileHelper { public static string GetFilePath() { //02 创建文件保存路径 string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Upload\"); //02-01 根据日期创建文件夹 DateTime dt = DateTime.Now; savePath += dt.Year + "\" + dt.Month + "\" + dt.Day; if (!Directory.Exists(savePath)) { //创建文件夹 Directory.CreateDirectory(savePath); } //02-02文 件名为当前时间 //savePath += "\" + dt.ToString().Replace(':', '-') + ".gif"; savePath += "\" + dt.ToString().Replace(':', '-') ; return savePath; } } }
1.2 html页面和ashx页面
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form action="AddLogo.ashx" method="post" enctype="multipart/form-data"> <input type="file" name="OrImg" /> <input type="submit" value="添加水印" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Web; namespace _06_图片处理 { /// <summary> /// AddLogo 的摘要说明 /// </summary> public class AddLogo : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //01 获取上传图片 HttpPostedFile pf = context.Request.Files["OrImg"]; #region 02 添加水印 //02-01 创建画布 Bitmap bm = new Bitmap(pf.InputStream); //02-02 创建绘图工具 Graphics gs = Graphics.FromImage(bm); //02-03 拿到logo图片 Bitmap bmLogo = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "/images/LogoYK.GIF"); //02-04 开始绘制 gs.DrawImage(bmLogo,bm.Width-bmLogo.Width,bm.Height-bmLogo.Height,bmLogo.Width,bmLogo.Height); #endregion #region 03 保存 //03-01 获取文件扩展名 string extName = pf.FileName.Substring(pf.FileName.LastIndexOf('.')); //03-02 获取文件路径 string ph = FileHelper.GetFilePath(); string savePath = ph + extName; //03-03 saveAs bm.Save(savePath); #endregion //04 展示 context.Response.Write("<img src='" + savePath.Substring(savePath.IndexOf("Upload")) + "'/> "); } public bool IsReusable { get { return false; } } } }
1.3 运行效果
2 验证码
2.1 ashx页面
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Web; using System.Drawing.Imaging; namespace _06_图片处理 { /// <summary> /// ValidateCode 的摘要说明 /// </summary> public class ValidateCode : IHttpHandler { public void ProcessRequest(HttpContext context) { //01 验证码是图片,所以修改Type context.Response.ContentType = "image/jpeg"; //02 创建画布 Bitmap bm = new Bitmap(70,30); //03 创建绘图工具 Graphics g = Graphics.FromImage(bm); //03-01 设置背景色 g.Clear(Color.Green); //04 准备绘制 string strArry = "abcdefghijklmnopqrstuvwxyz0123456789"; string vCode = string.Empty; Random r = new Random (); for (int i = 0; i < 4; i++) { vCode += strArry[r.Next(strArry.Length)]; } //05 开始绘制 g.DrawString(vCode,new Font (new FontFamily("宋体"),20),new SolidBrush(Color.Red),0,0); //06 保存 bm.Save(context.Response.OutputStream,ImageFormat.Jpeg); //context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } } }
2.2 HTML页面
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="Script/jquery-1.7.1.min.js"></script>
<title></title>
<script>
$(function () {
$("#changeCode").click(function () {
$('#validateCode').attr("src", $('#validateCode').attr("src")+'1');
});
})
</script>
</head>
<body>
<img id="validateCode" src="ValidateCode.ashx?1"/>
<a href="#" id="changeCode">看不清,换一张</a>
</body>
</html>
2.3 效果图
3 缩略图
3.1 HTML页面和ashx代码
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form method="post" action="SmallImag.ashx" enctype="multipart/form-data"> <input type="file" name="OrImg"/> <input type="submit" value="制作缩略图" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Web; namespace _06_图片处理 { /// <summary> /// SmallImag 的摘要说明 /// </summary> public class SmallImag : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //01 获取上传对象 HttpPostedFile hf = context.Request.Files["OrImg"]; //01-01 获取文件名称和后缀名 string name = hf.FileName; string extName = hf.FileName.Substring(hf.FileName.IndexOf('.')); //01-02 获取文件路径 和 相对路径 string path = FileHelper.GetFilePath(); string showPath = path.Substring(path.IndexOf("Upload")); //02 保存原图片 hf.SaveAs(path+extName); #region 03 绘制缩略后的小图 //03-00 规定缩放比例 float scale = 0.3f; //03-01 获取原图片 Bitmap bmBig = new Bitmap(hf.InputStream); //03-02 创建画布 Bitmap bm = new Bitmap((int)(bmBig.Width * scale),(int)(bmBig.Height * scale)); //03-03 获取绘制工具 Graphics g = Graphics.FromImage(bm); //03-04 开始绘制 g.DrawImage(bmBig, 0, 0, (bmBig.Width * scale), (bmBig.Height * scale)); #endregion //04 保存缩略图 bm.Save(path +"_small"+ extName); //05 展示缩略图 context.Response.Write("<img src='"+showPath+"_small"+extName+"'/>"); } public bool IsReusable { get { return false; } } } }
3.2 效果图