您的位置:首页 > 其它

剪切上传图片源码

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;

        }

    }

}
源码下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: