上传图片并给所上传的图片添加水印

 1  HttpPostedFile file = Context.Request.Files[0]; //有这个0说明一次只能上传一张
2 if (file.ContentLength > 0)
3 {
4 string allfilename = Path.GetFileName(file.FileName); //获取文件名称包含扩展名
5 string filenameextension = Path.GetExtension(file.FileName); // 获取文件扩展名
6 //校验文件类型
7 string[] extension = { ".jpg", ".png", ".bmp", ".jpeg", ".gif", ".svg", ".tiff" }; //将所有图片扩展名做成一个数组
8
9
10 for (int i = 0; i < extension.Length; i++)
11 {
12 if (filenameextension == extension[i])
13 {
14 break;
15 }
16 else
17 {
18
19 }
20 if ((extension.Length - 1) == i)
21 {
22 Context.Response.Write("<script>alert('请选择图片类型!')</script>");
23 }
24
25 }
26
27
28 //1.使用Guid对上传文件进行重新命名,以防止重名产生的覆盖问题
29
30 string newallfilename = Guid.NewGuid().ToString(); //使用Guid重新命名的文件名称
31
32 //2.将上传文件放在不同文件夹下,防止文件过多出现搜索效率降低
33
34 //以下是根据日期来创建不同的文件夹,当然也有其他方法
35
36 string dir = "/Images/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/"; //这个是文件目录名
37
38 if (!Directory.Exists(Context.Request.MapPath(dir))) //判断这个文件夹是否存在,如果不存在则创建
39 {
40 Directory.CreateDirectory(Context.Request.MapPath(dir));
41 }
42 string fullpath = dir + newallfilename + filenameextension; //文件存放的完整路径 文件夹+新的文件名+文件扩展名
43
44 file.SaveAs(Context.Request.MapPath(fullpath)); //完成文件保存
45
46
47
48
49
50
51
52 //在加水印时,如果file.SaveAs(Context.Request.MapPath(fullpath));没有注释,那么在加完水印之后就会有两张图片,一个有水印一个没有水印。
53 //在创建images实例时,如果有保存的这行代码,就可以有两种方式 一种是根据文件物理全路径,一种是根据文件流 没有保存就只能根据文件流
54
55
56
57 //给图片添加水印
58 //using (Image img = Image.FromStream(file.InputStream)) //根据文件流
59 //根据上传成功的图片创建一个img实例
60 using (System.Drawing.Image img = System.Drawing.Image.FromFile(Context.Request.MapPath(fullpath))) //根据文件物理全路径
61 {
62 using (Bitmap map = new Bitmap(img.Width, img.Height)) //根据图片的高宽来设定画布的高宽
63 {
64 using (Graphics g = Graphics.FromImage(map)) //创建一个画笔
65 {
66 g.DrawImage(img, 0, 0, img.Width, img.Height);//将整个图片画到画布上
67 g.DrawString("独家所有", new Font("楷体", 15, FontStyle.Bold), Brushes.Red, new PointF(img.Width - 60, img.Height - 15));
68 string watherfilename = Guid.NewGuid().ToString();
69 map.Save(Context.Request.MapPath("/Images/" + watherfilename + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
70 }
71 }
72
73 }
74
75
76 }
77 else
78 {
79
80 Context.Response.Write("<script>alert('请选择上传图片!')</script>");
81 }
82
83 Context.Response.Write("<script>alert('上传图片成功!')</script>");
        /// <summary>
/// 做一个普通水印
/// </summary>
public void GDI()
{
//这段也相当于是做水印 Bitmap map = new Bitmap(400,400); //创建一个画布 Graphics g = Graphics.FromImage(map);//创建一个画笔
g.Clear(Color.Gray); //清除画布并指定背景色填充 //Brushes.Yellow 指定用什么颜色填充字体
g.DrawString("要写的字", new Font("楷体", 15, FontStyle.Bold), Brushes.Yellow, new PointF(320, 80)); string filename = Guid.NewGuid().ToString();
//将画布保存为一张图片
map.Save(Context.Request.MapPath("/Images/" + filename + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); //
}

  

 1  /// <summary>
2 /// 图片缩略图 其本质就是将一个大图画在一个小画布上面,缩略图是将图片宽高都缩小并且图片文件的实际占用内存也变小,好处是可以减少宽带的占用,快速加载出来,
3 /// </summary> 但是如果比例不正确,会导致图片变形
4 public void minipicture()
5 {
6 string fullpath = Context.Request.MapPath("/Images/aaa.jpg");
7 using (Bitmap MAP = new Bitmap(320, 180))
8 {
9 using (System.Drawing.Image img = System.Drawing.Image.FromFile(fullpath))
10 {
11 using(Graphics g=Graphics.FromImage(MAP)){
12 g.DrawImage(img, 0, 0, MAP.Width, MAP.Height);
13 string newfile = Guid.NewGuid().ToString();
14 MAP.Save(Context.Request.MapPath("/Images/" + newfile + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
15
16 }
17
18 }
19 }
20
21 }

图片上传 加水印 以及GDI基本画图的更多相关文章

  1. ThinkPHP5+Layui实现图片上传加预览

    html代码 <div class="layui-upload"> <button type="button" class="lay ...

  2. 小程序OSS图片上传

    图片上传加水印问题,代码如下! chooseImage: function (e) { var that = this; wx.chooseImage({ sizeType: ['original', ...

  3. elementUI 图片上传限制上传图片的宽高

    文件上传,需当上传的文件类型为图片的时候,需要限制图片的宽高. 此处采用了new Promise异步加载的方式,等图片上传加载完成后, 页面代码: <el-form-item label=&qu ...

  4. PHP多图片上传 并检查 加水印 源码

    参数说明:$max_file_size : 上传文件大小限制, 单位BYTE$destination_folder : 上传文件路径$watermark : 是否附加水印(1为加水印,其他为不加水印) ...

  5. [原创]超强C#图片上传,加水印,自动生成缩略图源代码

    <%@ Page Language=“C#“ AutoEventWireup=“true“ %> <%@ Import Namespace=“System“ %> <%@ ...

  6. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  7. 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题

    微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...

  8. 基于Jcrop的图片上传裁剪加预览

    最近自己没事的时候研究了下图片上传,发现之前写的是有bug的,这里自己重新写了一个! 1.页面结构 <!DOCTYPE html> <html lang="en" ...

  9. layui加tp5图片上传实例

    <div class="layui-fluid"> <div class="layui-row"> <form class=&qu ...

  10. yii php 图片上传与生成缩略图

    今天需要做图片上传与生成缩略图的功能,把代码进行记录如下: html 视图              ($pic_action_url = $this->createAbsoluteUrl('h ...

随机推荐

  1. JS逆向之补环境过瑞数详解

    JS逆向之补环境过瑞数详解 "瑞数" 是逆向路上的一座大山,是许多JS逆向者绕不开的一堵围墙,也是跳槽简历上的一个亮点,我们必须得在下次跳槽前攻克它!! 好在现在网上有很多讲解瑞数 ...

  2. 第一次Kaggle比赛心得

    新手避雷 在未组队的情况下私下共享资料属于违规行为,组队截止时间过后尤其不能这样 提交notebook的时候,kaggle的服务器只能找到前两个输出文件,所以一定要把你要提交的文件放在前两个(我们就是 ...

  3. Python面向对象(上)

    Python面向对象(上) python是一门面向对象的编程语言.何为对象?对象是类的实例.在生活中,任何一个事物都是一个对象,如牡丹花.牡丹花的类是花类,同样属于花类的还有荷花.月季花.金银花.菊花 ...

  4. 保姆级教程-分分钟掌握常用TS语法

    十分钟就搞懂TS用法 先全局安装一些工具,有助于我们编写运行代码哦 1.VScode插件 code runner 2.安装依赖 npm install typescript ts-node -g 开始 ...

  5. (23)go-micro微服务客户端开发(使用负载均衡)

    目录 一 main.go开发 二 客户端代码开发: 三 客户端测试功能 1.发送注册邮件 2.实现注册功能 3.查询用户功能 四 运行项目 五 最后 一 main.go开发 至此,咱们的项目服务端代码 ...

  6. Linux环境下:程序的链接, 装载和库[ELF文件详解]

    编译过程拆解 预处理处理生成.i文件, .i文件还是源码文件 将所有的宏定义#define展开. 处理#if, #else, #endif等条件编译指令 处理#include, 原地插入文件 cpp ...

  7. 文献阅读01:由I类HLA转录缺失导致的联合免疫治疗的获得性癌症耐药性

    背景 Merkel cell carcinoma:梅克尔细胞癌又名皮肤小梁状癌.原发性皮肤神经内分泌癌.皮肤原发性小细胞癌及皮肤APUD瘤. HLA:MHC基因产物在不同细胞表面表达,通常称之为MHC ...

  8. redis06-事务

    1 基本说明 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞. 2 事务相关的几个命令 2.1 MULTI 标记一个事务块 ...

  9. 学习Java Day30

    今天回顾了一下整章对象与类,对自己进行了查漏补缺,依旧存在许多知识点的掌握不充分,类的使用的不熟练,同志仍需努力,革命尚未成功.

  10. 鼎阳SDS6204长波形读取的潜力挖掘及上海光源测试

    ​​​ https://blog.csdn.net/weixin_43767046/category_11089525.html 上学期我搭建起来的逐束团3维质心位置测量系统一直是获取500us长的一 ...