WebImage Crop To Square - PullRequest
       6

WebImage Crop To Square

6 голосов
/ 26 декабря 2010

Кто-нибудь знает, как использовать новый ASP.Net MVC 3 Html Helper WebImage для обрезки загруженного файла в квадрат. Я хотел бы, чтобы это было в центре, если это возможно. Последние несколько часов я бился головой, пытаясь понять это ... любая помощь приветствуется!

Сценарий довольно прост, пользователь может загрузить изображение, затем размер изображения будет изменен на квадрат, который впоследствии будет использоваться в качестве эскиза на сайте.

Ответы [ 3 ]

13 голосов
/ 27 декабря 2010

Это сработало для меня, надеюсь, сэкономит время для других ...!

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();
}
3 голосов
/ 22 декабря 2011

вот небольшая функция, которая обрезает изображение от центра, но сохраняя требуемое соотношение.Я использую его для обрезки изображений для галерей и тому подобное.

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;
    }
3 голосов
/ 26 декабря 2010

Я предлагаю использовать Jquery плагин для обрезки изображений . Потому что я считаю нехорошо обрезать квадрат автоматически, потому что вы можете удалить основную часть изображения, например, если это пользовательская фотография, вы можете обрезать его голову.

Плагин кадрирования изображений прост в использовании. Пользователь просто выбирает то, что он хочет использовать в качестве предварительного просмотра. На стороне сервера вы получаете координаты начальной точки и ширину / высоту. Для изменения размера / обрезки изображения на стороне сервера я использую image magick . *. * * * * * * * * * * * * * * * * * * * * *. * Также будьте осторожны с оберткой, потому что она только 32-битная. Я разработал для моих нужд собственную оболочку для изображения магии. Но я верю, что это легко сделать с помощью .net.

Если вы все еще считаете, что автообрезка - это то, что вам нужно, я советую обрезать максимальный центральный размер изображения и затем изменить его до нужного размера.

Надеюсь, это поможет.

P.S. Я не знаю, но я полагаю, что такую ​​задачу невозможно выполнить с помощью mvc WebImage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...