Как обрезать изображение с помощью C # с классом WebImage? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение, написанное с использованием C# вверху в ASP.NET MVC 5 framework.

Я пытаюсь использовать WebImage , чтобы обрезать изображение, которое у меня есть на диске. В графическом интерфейсе я использую плагин Jcrop , чтобы позволить пользователю пометить область, которую он хочет обрезать или сохранить. Как вы можете видеть, плагин Jcrop предоставляет мне X1, X2, Y1 и Y2, которые идентифицируют местоположение конечного изображения для сохранения. Jcrop также предоставляет мне окончательную высоту и ширину конечного изображения, хотя они также могут быть рассчитаны по следующей формуле W = X2 - X1; H = Y2 - Y1

enter image description here

Вот мой метод, в котором я обрезаю данное изображение и переопределяю его.

/// <summary>
/// Crop the given image and overrides it with the cropped image
/// </summary>
/// <param name="filename">The full path of the image and the location of the new image</param>
/// <param name="top">Y or Y1</param>
/// <param name="left">X or X1</param>
/// <param name="bottom">Y2</param>
/// <param name="right">X2</param>
/// <returns></returns>
public WebImage CropAndSave(string sourcePath, int top, int left, int bottom, int right)
{
    byte[] imageBytes = File.ReadAllBytes(sourcePath);

    var image = new WebImage(imageBytes)
    {
        FileName = ExtractFileName(sourcePath)
    };

    WebImage croppedImage = image.Crop(top, left, bottom, right);
    croppedImage.Save(sourcePath, "jpg", true);

    return croppedImage;
}

Однако обрезанное изображение - это не то, что я ожидаю. Это очень маленькое изображение, а не то, которое хочет сохранить пользователь.

Как я могу использовать WebImage.Crop(...), чтобы правильно обрезать изображение?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Согласно определению WebImage

Top : количество пикселей, удаляемых сверху.

Слева : количество пикселей для удаления слева.

Снизу : количество пикселей для удаления снизу.

Справа: количество пикселей, которые нужно удалить справа.

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

Попробуйте изменить свой вызов на Corp() на следующий

WebImage croppedImage = image.Crop(top, left, image.Height - bottom, image.Width - right);

. image.Height - bottom даст мне количество пикселей для удаления снизу, где image.Width - right даст вам номерпикселя для удаления справа.

0 голосов
/ 19 ноября 2018

При чтении предоставленного вами определения Crop ожидается следующее;

  • Количество пикселей для удаления сверху Y1
  • Количество пикселей, удаляемых слева X1
  • Полная высота оригинала минус Y2
  • Полная ширина оригинала минус X2

    image.Crop(Y1, X1, image.height - Y2, image.width - X2);
    
...