WebImage裁剪到正方形

时间:2010-12-26 19:56:44

标签: c# asp.net-mvc image asp.net-mvc-3

有谁知道如何使用新的ASP.Net MVC 3 Html Helper WebImage将上传的文件裁剪成正方形。如果可能的话,我想让它居中。在过去的几个小时里,我一直在试图解决这个问题......任何帮助都表示赞赏!

场景非常简单,用户可以上传图片,然后将图片调整为正方形,以便稍后用作网站中的缩略图。

3 个答案:

答案 0 :(得分:13)

这对我有用,希望为别人节省一些时间......!

private static void CropImage (HttpPostedFileBase sourceImage) {
  var newImage = new WebImage(sourceImage.InputStream);

  var width = newImage.Width;
  var height = newImage.Height;

  if (width > height) {
    var leftRightCrop = (width - height) / 2;
    newImage.Crop(0, leftRightCrop, 0, leftRightCrop);
  }
  else if (height > width) {
    var topBottomCrop = (height - width) / 2;
    newImage.Crop(topBottomCrop, 0, topBottomCrop, 0);
  }

  //do something with cropped image...
  //newImage.GetBytes();
}

答案 1 :(得分:3)

我建议使用Jquery image crop plugin。因为我认为不能自动裁剪方形,因为你可以删除图像的主要部分,例如,如果它是用户照片,你可以裁剪他的头。

图像裁剪插件易于使用。用户只需选择他想要用作预览。在服务器端,您可以查看起点坐标和宽度/高度。对于服务器端的图像调整大小/裁剪,我使用image magick。有wrapper for image magick at .net。还要小心包装,因为它只有32位。我为我的需求开发了自己的图像魔法包装器。但我相信用.net可以轻松完成。

如果您仍然认为自动裁剪是您所需要的,我建议裁剪图像的最大中心位置,然后重新调整到您想要的大小。

希望这有帮助。

P.S。我不知道,但我认为使用mvc WebImage无法完成此类任务。

答案 2 :(得分:3)

这是一个小功能,从中心裁剪图像,但保持通缉比率。我用它来为画廊等裁剪图像。

public static WebImage BestUsabilityCrop(WebImage image, decimal targetRatio)
    {
        decimal currentImageRatio = image.Width/(decimal) image.Height;
        int difference;

        //image is wider than targeted
        if (currentImageRatio > targetRatio)
        {
            int targetWidth = Convert.ToInt32(Math.Floor(targetRatio * image.Height));
            difference = image.Width - targetWidth;
            int left = Convert.ToInt32(Math.Floor(difference/(decimal) 2));
            int right = Convert.ToInt32(Math.Ceiling(difference/(decimal) 2));
            image.Crop(0, left, 0, right);
        }
        //image is higher than targeted
        else if (currentImageRatio < targetRatio)
        {
            int targetHeight = Convert.ToInt32(Math.Floor(image.Width / targetRatio));
            difference = image.Height - targetHeight;
            int top = Convert.ToInt32(Math.Floor(difference/(decimal) 2));
            int bottom = Convert.ToInt32(Math.Ceiling(difference/(decimal) 2));
            image.Crop(top, 0, bottom, 0);
        }
        return image;
    }