-
C#教程之.net实现裁剪网站上传图片的方法
本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。
1、上传图片
2、Javascript剪切图片(其实只是选取要剪切的部分)
3、服务器端剪切
(1)在页面的cs文件中剪切。须放几个隐藏控件以便回传js选取的坐标。
其中剪切图片源码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
using System; using System.Collections.Generic; using System.Text; using System.Drawing; public class Cut { /// <summary> /// 裁剪图片 /// </summary> /// <param name="sourceImg">原图片路径</param> /// <param name="desImg">裁剪图片路径</param> /// <param name="left">X</param> /// <param name="top">Y</param> /// <param name="width">宽</param> /// <param name="height">高</param> public static void CutImage( string sourceImg, string desImg, int left, int top, int width, int height) { System.Drawing.Image img = System.Drawing.Bitmap.FromFile(sourceImg); System.Drawing.Image imgToSave = new System.Drawing.Bitmap(width, height); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(imgToSave); RectangleF sourceRect = new RectangleF(left, top, width, height); RectangleF destinationRect = new RectangleF(0, 0, width, height); g.DrawImage(img, destinationRect, sourceRect, GraphicsUnit.Pixel ); g.Save(); imgToSave.Save(desImg, System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); imgToSave.Dispose(); img.Dispose(); } } |
(2)在ashx中剪切,可回传文件流。用参数传递坐标。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
using System; using System.Web; using System.Drawing; using System.IO; public class ImgCropper_WebHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string Pic = Convert.ToString(context.Request[ "p" ]); int PointX = Convert.ToInt32(context.Request[ "x" ]); int PointY = Convert.ToInt32(context.Request[ "y" ]); int CutWidth = Convert.ToInt32(context.Request[ "w" ]); int CutHeight = Convert.ToInt32(context.Request[ "h" ]); int PicWidth = Convert.ToInt32(context.Request[ "pw" ]); int PicHeight = Convert.ToInt32(context.Request[ "ph" ]); context.Response.ContentType = "image/jpeg" ; ResetImg(context, System.Web.HttpContext.Current.Server.MapPath(Pic), PicWidth, PicHeight, PointX, PointY, CutWidth, CutHeight).WriteTo(context.Response.OutputStream); } public MemoryStream ResetImg(HttpContext context, string ImgFile, int PicWidth, int PicHeight, int PointX, int PointY, int CutWidth, int CutHeight) { Image imgPhoto = Image.FromFile(ImgFile); Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics gbmPhoto = Graphics.FromImage(bmPhoto); gbmPhoto.DrawImage(imgPhoto, new Rectangle(0, 0, CutWidth, CutHeight), PointX * imgPhoto.Width / PicWidth, PointY * imgPhoto.Height / PicHeight, CutWidth * imgPhoto.Width / PicWidth, CutHeight * imgPhoto.Height / PicHeight, GraphicsUnit.Pixel); //保存图片到服务器 bmPhoto.Save(context.Server.MapPath( "upload/" ) + Guid.NewGuid() + ".jpg" , System.Drawing.Imaging.ImageFormat.Jpeg); //生成文件流回传 MemoryStream ms2 = new MemoryStream(); bmPhoto.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg); imgPhoto.Dispose(); gbmPhoto.Dispose(); bmPhoto.Dispose(); return ms2; } public bool IsReusable { get { return false ; } } } |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式