剪切上传图片源码
2013-02-22 12:15
281 查看
在交友类网站经常见到以上这种制作上传头像的效果,在网上找了个js剪切效果,现加上上传完善了一下。
整体源码下载
客户端js不能操作文件,所以只能先上传图片再在服务器端剪切。
1、上传图片
2、js剪切图片(其实只是选取要剪切的部分)
3、服务器端剪切
(1)在页面的cs文件中剪切。须放几个隐藏控件以便回传js选取的坐标。
其中剪切图片源码:
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中剪切,可回传文件流。用参数传递坐标。
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;
}
}
}
源码下载
相关文章推荐
- 剪切上传图片源码
- Asp.net MVC 实现图片上传剪切
- OneThink框架图片上传源码分析
- 上传图片功能源码
- .net+ajax+jquery.form实现简单的图片批量上传 含Demo源码下载
- asp.Net_图片上传的一个类库的源码
- 在ASP.NET中上传图片并生成缩略图的C#源码
- asp.Net_图片上传的一个类库的源码
- php图片上传存储源码并且可以预览
- JavaWeb集成百度UMEditor详细操作(实现上传图片)+demo源码
- 在ASP.NET中上传图片并生成缩略图的C#源码
- 源码推荐(0723B):视频压缩上传,图片无限轮播
- JSP上传图片源码
- php+ajax实现带进度条的上传图片功能【附demo源码下载】
- Android中使用封装的OKHttp上传图片,从相机和相册中获取图片并剪切
- php实现图片上传、剪切功能
- android 选择图片拍照并剪切照片上传到服务器
- flex图片剪切示例--预览、保存到本地、保存到服务器(附源码)
- SpringMVC+Ajax异步上传图片并显示(源码)
- .Net 图片上传的一个类库的源码