public JsonResult SaveTempFileAndCrop(HttpPostedFileBase file, ImageCropModel cropArea, string configUniqueName) { var config = FileUploadDefinitions.GetByUniqueName(configUniqueName); if (config == null || !(config is ImageUploadConfig)) { throw new HttpException(400, "Invalid config"); } var imageConfig = (ImageUploadConfig)config; ImageFormat imageFormat; using (Image image = imageConfig.ProcessImage(file, cropArea.Rectangle, out imageFormat)) { FileWriterResponse response = FileHelper.SaveFileToTempFolder(config, file, image, imageFormat); return(Json(FileUploadResponseModel.FromFileWriterResponse(response))); } }
public virtual ActionResult EditImage(string folderName, string uuid, [System.Web.Mvc.Bind(Prefix = "Crop")] ImageCropModel cropModel, [System.Web.Mvc.Bind(Prefix = "Scale")] ImageScaleModel scaleModel, string rotateTypes, string @return) { var mediaFolder = FolderHelper.Parse <MediaFolder>(Repository.Current, folderName); var mediaContent = mediaFolder.CreateQuery().WhereEquals("UUID", uuid).FirstOrDefault(); JsonResultData data = new JsonResultData(ModelState); Stream targetStream = new MemoryStream(); MemoryStream resizedImage = new MemoryStream(); Stream imageStream = new MemoryStream(); int width = 0, height = 0; try { ImageFormat imageFormat = ImageTools.ConvertToImageFormat(Path.GetExtension(mediaContent.PhysicalPath)); imageStream = RotateImage(rotateTypes, mediaContent.PhysicalPath, imageFormat); if (cropModel != null && cropModel.X.HasValue && cropModel.Width.Value > 0 && cropModel.Height.Value > 0) { ImageTools.CropImage(imageStream, targetStream, imageFormat, cropModel.X.Value, cropModel.Y.Value, cropModel.Width.Value, cropModel.Height.Value); targetStream.Position = 0; } else { targetStream = imageStream; } if (scaleModel != null && scaleModel.Height.HasValue && scaleModel.Width.HasValue) { ImageTools.ResizeImage(targetStream, resizedImage, imageFormat, scaleModel.Width.Value, scaleModel.Height.Value, scaleModel.PreserveAspectRatio, scaleModel.Quality ?? 80); resizedImage.Position = 0; targetStream = resizedImage; } Image image = Image.FromStream(targetStream); width = image.Width; height = image.Height; targetStream.Position = 0; ServiceFactory.MediaContentManager.Update(Repository.Current, mediaFolder, uuid, mediaContent.FileName, targetStream, User.Identity.Name); image.Dispose(); targetStream.Close(); //data.ClosePopup = true; //data.AddMessage("The image has been changed.".Localize()); } catch (Exception e) { data.AddException(e); } finally { if (targetStream != null) { targetStream.Close(); targetStream.Dispose(); targetStream = null; } if (resizedImage != null) { resizedImage.Close(); resizedImage.Dispose(); resizedImage = null; } if (imageStream != null) { imageStream.Close(); imageStream.Dispose(); imageStream = null; } } data.Model = new { Width = width, Height = height }; data.RedirectToOpener = false; data.ReloadPage = true; return(Json(data)); }