剪切上传图片源码

93 篇文章 0 订阅
80 篇文章 0 订阅


在交友类网站经常见到以上这种制作上传头像的效果,在网上找了个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(00, 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(00, 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;
        }
    }
}
源码下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值