public MediaFile Execute(UploadFileRequest request) { var maxLength = CmsConfiguration.Storage.MaximumFileNameLength > 0 ? CmsConfiguration.Storage.MaximumFileNameLength : 100; var fileName = request.FileName; if (fileName.Length > maxLength) { fileName = string.Concat(Path.GetFileNameWithoutExtension(fileName.Substring(0, maxLength)), Path.GetExtension(fileName)); } if (request.Type == MediaType.File || request.Type == MediaType.Audio || request.Type == MediaType.Video) { var media = MediaFileService.UploadFile(request.Type, request.RootFolderId, fileName, request.FileLength, request.FileStream); Events.MediaManagerEvents.Instance.OnMediaFileUploaded(media); return(media); } if (request.Type == MediaType.Image) { var media = MediaImageService.UploadImage(request.RootFolderId, fileName, request.FileLength, request.FileStream, request.ReuploadMediaId); Events.MediaManagerEvents.Instance.OnMediaFileUploaded(media); return(media); } throw new CmsException(string.Format("A given media type {0} is not supported to upload.", request.Type)); }
/// <summary> /// Executes this command. /// </summary> /// <param name="request">The request.</param> public void Execute(ImageViewModel request) { var mediaImage = Repository.First <MediaImage>(request.Id.ToGuidOrDefault()); var archivedImage = MediaImageService.MoveToHistory(mediaImage); // Calling resize and after then crop var croppedFileStream = ResizeAndCropImage(mediaImage, request); mediaImage.Caption = request.Caption; mediaImage.Title = request.Title; mediaImage.Description = request.Description; mediaImage.ImageAlign = request.ImageAlign; if (croppedFileStream != null) { MediaImageService.SaveEditedImage(mediaImage, archivedImage, croppedFileStream, request.ShouldOverride); } else { MediaImageService.SaveImage(mediaImage); } UnitOfWork.BeginTransaction(); // Save tags IList <Root.Models.Tag> newTags; TagService.SaveMediaTags(mediaImage, request.Tags, out newTags); UnitOfWork.Commit(); // Notify. Events.MediaManagerEvents.Instance.OnMediaFileUpdated(mediaImage); }
/// <summary> /// Executes this command. /// </summary> /// <param name="request">The request.</param> public void Execute(ImageViewModel request) { var mediaImage = Repository.First <MediaImage>(request.Id.ToGuidOrDefault()); mediaImage.PublishedOn = DateTime.Now; mediaImage.Caption = request.Caption; mediaImage.Title = request.Title; mediaImage.Description = request.Description; mediaImage.ImageAlign = request.ImageAlign; // Calling resize and after then crop var archivedImage = MediaImageService.MoveToHistory(mediaImage); var croppedFileStream = ResizeAndCropImage(mediaImage, request); MediaImageService.SaveEditedImage(mediaImage, archivedImage, croppedFileStream); UnitOfWork.BeginTransaction(); // Save tags IList <Root.Models.Tag> newTags; TagService.SaveMediaTags(mediaImage, request.Tags, out newTags); UnitOfWork.Commit(); // Update thumbnail MediaImageService.UpdateThumbnail(mediaImage, Size.Empty); // Notify. Events.MediaManagerEvents.Instance.OnMediaFileUpdated(mediaImage); }
public MediaFile Execute(UploadFileRequest request) { if (request.Type == MediaType.File || request.Type == MediaType.Audio || request.Type == MediaType.Video) { var media = MediaFileService.UploadFile(request.Type, request.RootFolderId, request.FileName, request.FileLength, request.FileStream); Events.MediaManagerEvents.Instance.OnMediaFileUploaded(media); return(media); } if (request.Type == MediaType.Image) { var media = MediaImageService.UploadImage(request.RootFolderId, request.FileName, request.FileLength, request.FileStream); Events.MediaManagerEvents.Instance.OnMediaFileUploaded(media); return(media); } throw new CmsException(string.Format("A given media type {0} is not supported to upload.", request.Type)); }
/// <summary> /// Resizes and crops the image. /// </summary> /// <param name="mediaImage">The image.</param> /// <param name="request">The request.</param> private void ResizeAndCropImage(MediaImage mediaImage, ImageViewModel request) { int?x1 = request.CropCoordX1; int?x2 = request.CropCoordX2; int?y1 = request.CropCoordY1; int?y2 = request.CropCoordY2; Byte[] bytes = null; var cropped = true; if ((x1 <= 0 && y1 <= 0 && ((x2 >= mediaImage.OriginalWidth && y2 >= mediaImage.OriginalHeight) || (x2 <= 0 && y2 <= 0)))) { x1 = y1 = x2 = y2 = null; cropped = false; } var newWidth = request.ImageWidth; var newHeight = request.ImageHeight; var resized = (newWidth != mediaImage.OriginalWidth || newHeight != mediaImage.OriginalHeight); var hasChanges = (mediaImage.Width != newWidth || mediaImage.Height != newHeight || x1 != mediaImage.CropCoordX1 || x2 != mediaImage.CropCoordX2 || y1 != mediaImage.CropCoordY1 || y2 != mediaImage.CropCoordY2); if (hasChanges) { var downloadResponse = StorageService.DownloadObject(mediaImage.OriginalUri); var image = new WebImage(downloadResponse.ResponseStream); ImageFormat format = null; if (DefaultMediaImageService.transparencyFormats.TryGetValue(image.ImageFormat, out format)) { using (Image resizedBitmap = new Bitmap(newWidth, newHeight)) { using (Bitmap source = new Bitmap(new MemoryStream(image.GetBytes()))) { using (Graphics g = Graphics.FromImage(resizedBitmap)) { if (resized) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(source, 0, 0, newWidth, newHeight); using (MemoryStream ms = new MemoryStream()) { resizedBitmap.Save(ms, format); image = new WebImage(ms.ToArray()); } } } } } if (cropped) { var xRatio2 = (decimal)newWidth / (mediaImage.OriginalWidth == 0 ? newWidth : mediaImage.OriginalWidth); var yRatio2 = (decimal)newHeight / (mediaImage.OriginalHeight == 0 ? newHeight : mediaImage.OriginalHeight); var weigth = (int)((x2.Value - x1.Value) * xRatio2); var heigth = (int)((y2.Value - y1.Value) * yRatio2); var cropX12 = (int)Math.Floor(x1.Value * xRatio2); var cropY12 = (int)Math.Floor(y1.Value * yRatio2); Rectangle rec = new Rectangle(cropX12, cropY12, weigth, heigth); using (Bitmap source = new Bitmap(new MemoryStream(image.GetBytes()))) { var resizedBitmap = source.Clone(rec, source.PixelFormat); using (MemoryStream ms = new MemoryStream()) { resizedBitmap.Save(ms, format); image = new WebImage(ms.ToArray()); resizedBitmap.Dispose(); } } } } else { if (resized) { image = image.Resize(newWidth, newHeight, false); } if (cropped) { var xRatio = (decimal)newWidth / (mediaImage.OriginalWidth == 0 ? newWidth : mediaImage.OriginalWidth); var yRatio = (decimal)newHeight / (mediaImage.OriginalHeight == 0 ? newHeight : mediaImage.OriginalHeight); var cropX1 = (int)Math.Floor(x1.Value * xRatio); var cropY1 = (int)Math.Floor(y1.Value * yRatio); var cropX2 = image.Width - (int)Math.Floor(x2.Value * xRatio); var cropY2 = image.Height - (int)Math.Floor(y2.Value * yRatio); // Fix for small resized images if (cropX2 - cropX1 < image.Width && cropY2 - cropY1 < image.Height) { image = image.Crop(cropY1, cropX1, cropY2, cropX2); } } } // Change image file names depending on file version var newVersion = mediaImage.Version + 1; mediaImage.FileUri = ApplyVersionToFileUri(mediaImage.FileUri, mediaImage.OriginalUri, newVersion); mediaImage.PublicUrl = ApplyVersionToFileUrl(mediaImage.PublicUrl, mediaImage.PublicOriginallUrl, newVersion); mediaImage.ThumbnailUri = ApplyVersionToFileUri(mediaImage.ThumbnailUri, mediaImage.OriginalUri, newVersion); mediaImage.PublicThumbnailUrl = ApplyVersionToFileUrl(mediaImage.PublicThumbnailUrl, mediaImage.PublicOriginallUrl, newVersion); // Upload image to storage bytes = image.GetBytes(); var memoryStream = new MemoryStream(bytes); StorageService.UploadObject(new UploadRequest { InputStream = memoryStream, Uri = mediaImage.FileUri, IgnoreAccessControl = true }); mediaImage.Size = bytes.Length; // Update thumbnail MediaImageService.UpdateThumbnail(mediaImage, Size.Empty); } mediaImage.CropCoordX1 = x1; mediaImage.CropCoordY1 = y1; mediaImage.CropCoordX2 = x2; mediaImage.CropCoordY2 = y2; mediaImage.Width = newWidth; mediaImage.Height = newHeight; }
/// <summary> /// Resizes and crops the image. /// </summary> /// <param name="mediaImage">The image.</param> /// <param name="request">The request.</param> private void ResizeAndCropImage(MediaImage mediaImage, ImageViewModel request) { int?x1 = request.CropCoordX1; int?x2 = request.CropCoordX2; int?y1 = request.CropCoordY1; int?y2 = request.CropCoordY2; var cropped = true; if ((x1 <= 0 && y1 <= 0 && ((x2 >= mediaImage.OriginalWidth && y2 >= mediaImage.OriginalHeight) || (x2 <= 0 && y2 <= 0)))) { x1 = y1 = x2 = y2 = null; cropped = false; } var newWidth = request.ImageWidth; var newHeight = request.ImageHeight; var resized = (newWidth != mediaImage.OriginalWidth || newHeight != mediaImage.OriginalHeight); var hasChanges = (mediaImage.Width != newWidth || mediaImage.Height != newHeight || x1 != mediaImage.CropCoordX1 || x2 != mediaImage.CropCoordX2 || y1 != mediaImage.CropCoordY1 || y2 != mediaImage.CropCoordY2); if (hasChanges) { var downloadResponse = StorageService.DownloadObject(mediaImage.OriginalUri); var dimensionsCalculator = new ImageDimensionsCalculator(newWidth, newHeight, mediaImage.OriginalWidth, mediaImage.OriginalHeight, x1, x2, y1, y2); using (var image = Image.FromStream(downloadResponse.ResponseStream)) { var destination = image; var codec = ImageHelper.GetImageCodec(destination); if (resized) { destination = ImageHelper.Resize(destination, new Size { Width = newWidth, Height = newHeight }); } if (cropped) { var width = dimensionsCalculator.ResizedCroppedWidth; var heigth = dimensionsCalculator.ResizedCroppedHeight; var cropX12 = dimensionsCalculator.ResizedCropCoordX1.Value; var cropY12 = dimensionsCalculator.ResizedCropCoordY1.Value; Rectangle rec = new Rectangle(cropX12, cropY12, width, heigth); destination = ImageHelper.Crop(destination, rec); } // Change image file names depending on file version var newVersion = mediaImage.Version + 1; mediaImage.FileUri = ApplyVersionToFileUri(mediaImage.FileUri, mediaImage.OriginalFileName, newVersion); mediaImage.PublicUrl = ApplyVersionToFileUrl(mediaImage.PublicUrl, mediaImage.OriginalFileName, newVersion); mediaImage.ThumbnailUri = ApplyVersionToFileUri(mediaImage.ThumbnailUri, mediaImage.OriginalFileName, newVersion); mediaImage.PublicThumbnailUrl = ApplyVersionToFileUrl(mediaImage.PublicThumbnailUrl, mediaImage.OriginalFileName, newVersion); // Upload image to storage var memoryStream = new MemoryStream(); destination.Save(memoryStream, codec, null); mediaImage.Size = memoryStream.Length; StorageService.UploadObject(new UploadRequest { InputStream = memoryStream, Uri = mediaImage.FileUri, IgnoreAccessControl = true }); // Update thumbnail MediaImageService.UpdateThumbnail(mediaImage, Size.Empty); } } mediaImage.CropCoordX1 = x1; mediaImage.CropCoordY1 = y1; mediaImage.CropCoordX2 = x2; mediaImage.CropCoordY2 = y2; mediaImage.Width = newWidth; mediaImage.Height = newHeight; }