none
怎样使用ASP.Net剪切图片,根据原图Width、原图Height、需求的Top坐标、需求Left坐标、需求的Width、需求的Height? RRS feed

  • 问题

  • 在服务器上我有一种宽500px,高400px的图片,现在我要利用ASP.Net剪切图片,已知X坐标为20px、Y坐标为20px,目的是得到一个宽为100px,高为100px的图片,请问代码怎么写?
    努力!奋斗
    2009年10月20日 12:00

答案

  • 原理就是:客户端使用js选择区域。将这些数据提交,然后服务器gdi+切割

    private static Image cropImage( Image img, Rectangle cropArea)
    {
       Bitmap bmpImage = new Bitmap ( img) ;
       Bitmap bmpCrop = bmpImage.Clone ( cropArea, bmpImage.PixelFormat ) ;
       return ( Image ) ( bmpCrop) ;
    }
    【孟子E章】
    2009年10月20日 13:13
    版主

全部回复

  • 原理就是:客户端使用js选择区域。将这些数据提交,然后服务器gdi+切割

    private static Image cropImage( Image img, Rectangle cropArea)
    {
       Bitmap bmpImage = new Bitmap ( img) ;
       Bitmap bmpCrop = bmpImage.Clone ( cropArea, bmpImage.PixelFormat ) ;
       return ( Image ) ( bmpCrop) ;
    }
    【孟子E章】
    2009年10月20日 13:13
    版主
  • 网上有很多例子

    //Namespace Reference
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;

    /// <summary>
    /// method for cropping an image.
    /// </summary>
    /// <param name="img">the image to crop</param>
    /// <param name="width">new height</param>
    /// <param name="height">new width</param>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public Image Crop(string img, int width, int height, int x, int y)
    {
        try
        {
            Image image = Image.FromFile(img);
            Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            bmp.SetResolution(80, 60);

            Graphics gfx = Graphics.FromImage(bmp);
            gfx.SmoothingMode = SmoothingMode.AntiAlias;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gfx.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
            // Dispose to free up resources
            image.Dispose();
            bmp.Dispose();
            gfx.Dispose();

            return bmp;
        }
        catch (Exception ex)
        {
          
            return null;
        }           
    }
    【孟子E章】
    2009年10月20日 13:14
    版主
  • 我这样调用,怎么不能将图片保存到服务器的硬盘呢?

            string physicalImagePath = Server.MapPath("~/images/users/1001.jpg");
            FileStream fs = new FileStream(Server.MapPath("~/images/users/AAA.jpg"), FileMode.Create, FileAccess.Write);
            System.Drawing.Image resultImage = Crop(physicalImagePath, imageWidth, imageHeight, imageLeft, imageTop);
            
            resultImage.Save(fs,System.Drawing.Imaging.ImageFormat.Jpeg);
            resultImage.Dispose();
    请高手指点?
    努力!奋斗
    2009年10月21日 1:28
  • 刚才在网上查了一些资料,现在解决了。

    谢谢孟老师。
    努力!奋斗
    2009年10月21日 2:52