在上一篇文章介绍了指定图片文件,给指定的文件添加水印
- 在本文中将加水印应用于项目中,在用户上传图片文件时,为图片加相应的水印
- 仍然使用一般处理程序(.ashx)
用户都是通过上传控件,将图片文件添加进数据库和对应的存储文件夹中
因此,此项功能必须具备这样的流程
文件上传→控件接收→获取控件中文件的名称→实例化画布对象写入水印内容→释放画布保存绘制后的图片文件→输出图片向用户展示→停止http响应
此项中加一项小功能
System.Guid.NewGuid() 格式化
解决用户在上传时遇到同名文件上传失败的问题
记得要 ToString() 转下哟
显示页面就用标签代替服务器控件(用法一样)
<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeBehind=\"WebForm2.aspx.cs\" Inherits=\"给图片加水印.WebForm2\" %><!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head runat=\"server\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /><title></title></head><body><form id=\"form1\" runat=\"server\" action=\"Handler2.ashx\" method=\"post\" enctype=\"multipart/form-data\"><div><input type=\"file\" name=\"filew\" /><input type=\"submit\" name=\"sub\" value=\"上传图片\" /></div></form></body></html>
以表单的方式进行数据提交(可以无缝切换到服务器)
using System;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Web;namespace 给图片加水印{/// <summary>/// Handler2 的摘要说明/// </summary>public class Handler2 : IHttpHandler{public void ProcessRequest(HttpContext context){//获取上传的文件HttpPostedFile file = context.Request.Files[0];if (file.ContentLength > 0){//对上传的文件进行检测(是否是需要的图片类型)//(判断后缀名)获取上传文件的名称(包含的后缀名)1.jpgstring filename = Path.GetFileName(file.FileName);//获取上传文件的后缀名.jpgstring fileExit = Path.GetExtension(filename);//判断后缀名是否为.jpgif (fileExit == \".jpg\" || fileExit == \".png\"){//对上传文件进行重命名string newfilename = Guid.NewGuid().ToString();//将上传的文件放在目录下string dirupload = \"~/ImgUpLoad/\";//创建文件夹(判断磁盘上是否有现在的路径,没有就创建一个)if (!Directory.Exists(context.Request.MapPath(dirupload))){Directory.CreateDirectory(context.Request.MapPath(dirupload));}//找到文件的完整路径string allDir = dirupload + newfilename + fileExit;//保存路径file.SaveAs(context.Request.MapPath(allDir));//创建图片水印//创建一个Imageusing (Image tp = Image.FromFile(context.Request.MapPath(allDir))){//创建画布using (Bitmap map = new Bitmap(tp.Width, tp.Height)){//创建画笔using (Graphics grap = Graphics.FromImage(map)){//在指定的位置上绘制grap.DrawImage(tp, 0, 0, tp.Width, tp.Height);//创建字体对象Font ft = new Font(\"微软雅黑\", 18);//指定绘制的字符串grap.DrawString(\"新鲜美淘网\", ft, Brushes.Black, new Point(map.Width - 150, map.Height - ft.Height));//string WYImagename = Guid.NewGuid().ToString();map.Save(context.Request.MapPath(\"/ImgUpLoad/\" + WYImagename + \".jpg\"), ImageFormat.Jpeg);//输出context.Response.Write(\"<html><body><img src=\'/ImgUpLoad/\" + WYImagename + \".jpg\' /></body></html>\");context.Response.ContentType = \"text/html\";}}//释放图片tp.Dispose();}}}//停止http的响应context.Response.End();}public bool IsReusable{get{return false;}}}}
赘述下 System.Guid.NewGuid()为什么可以保证文件名不重
string str = System.Guid.NewGuid().ToString();
一般这样使用,不必考虑下面的格式使用方式
概念:
GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。
格式:
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 GUID 值。
System.Guid.NewGuid().ToString(“N”); 32位字符串
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
System.Guid.NewGuid().ToString(“D”); 连字符分隔的32位字符串
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
System.Guid.NewGuid().ToString(“B”); 在大括号中、由连字符分隔的32位字符串
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
System.Guid.NewGuid().ToString(“P”); 在圆括号中、由连字符分隔的32位字符串
(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- 点赞
- 收藏
- 分享
- 文章举报
黑夜中的潜行者发布了25 篇原创文章 · 获赞 18 · 访问量 877私信关注