public async Task <IActionResult> Crop([FromQuery] ImageCropInputModel imageCropInputModel)
        {
            if (ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var modifiedImage = await _imageProcessor.CropImage(imageCropInputModel);

            return(File(modifiedImage.ImageAsBytes, modifiedImage.ImageFormat));
        }
        public async Task <ModifiedImage> CropImage(ImageCropInputModel imageCropInputModel)
        {
            var image = await _imageService.GetImageAsSkBitmap(imageCropInputModel.Url);

            var info     = GetImageInfo(imageCropInputModel);
            var encoding = imageCropInputModel.GetEncoding();

            using (var surface = SKSurface.Create(info))
            {
                var sourceRectangle = new SKRect(imageCropInputModel.Left,
                                                 imageCropInputModel.Top,
                                                 imageCropInputModel.Right,
                                                 imageCropInputModel.Bottom);

                var destRectangle = GetDestinationRectangle(imageCropInputModel);

                surface.Canvas.DrawBitmap(image, sourceRectangle, destRectangle);
                return(await _imageService.SaveImage(surface, encoding));
            }
        }