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));
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
        /// <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;
        }
Beispiel #6
0
        /// <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;
        }