コード例 #1
0
        /// <summary>
        /// Executes this command.
        /// </summary>
        /// <param name="imageId">The image id.</param>
        /// <returns>The view model.</returns>
        public ImageViewModel Execute(Guid imageId)
        {
            var image = Repository.First <MediaImage>(imageId);
            var dimensionsCalculator = new ImageDimensionsCalculator(image);

            return(new ImageViewModel
            {
                Id = image.Id.ToString(),
                Caption = image.Caption,
                Title = image.Title,
                Description = image.Description,
                Url = FileUrlResolver.EnsureFullPathUrl(image.PublicUrl),
                ThumbnailUrl = FileUrlResolver.EnsureFullPathUrl(image.PublicThumbnailUrl),
                Version = image.Version.ToString(CultureInfo.InvariantCulture),
                FileName = image.OriginalFileName,
                FileExtension = image.OriginalFileExtension,
                FileSize = image.SizeAsText(),
                ImageWidth = image.Width,
                ImageHeight = image.Height,
                CroppedWidth = dimensionsCalculator.ResizedCroppedWidth,
                CroppedHeight = dimensionsCalculator.ResizedCroppedHeight,
                OriginalImageWidth = image.OriginalWidth,
                OriginalImageHeight = image.OriginalHeight,
                ImageAlign = image.ImageAlign.HasValue ? image.ImageAlign.Value : MediaImageAlign.Center,
                CropCoordX1 = image.CropCoordX1.HasValue ? image.CropCoordX1.Value : 0,
                CropCoordY1 = image.CropCoordY1.HasValue ? image.CropCoordY1.Value : 0,
                CropCoordX2 = image.CropCoordX2.HasValue ? image.CropCoordX2.Value : image.OriginalWidth,
                CropCoordY2 = image.CropCoordY2.HasValue ? image.CropCoordY2.Value : image.OriginalHeight,
                OriginalImageUrl = FileUrlResolver.EnsureFullPathUrl(image.PublicOriginallUrl + string.Format("?{0}", DateTime.Now.ToString(MediaManagerModuleDescriptor.HardLoadImageDateTimeFormat))),
                FolderId = image.Folder != null ? image.Folder.Id : (Guid?)null,
                Tags = TagService.GetMediaTagNames(imageId)
            });
        }
コード例 #2
0
        /// <summary>
        /// Creates the image view model.
        /// </summary>
        /// <param name="media">The media.</param>
        /// <returns>Created image view model</returns>
        protected override MediaViewModel ToViewModel(Media media)
        {
            var image = media as MediaImage;

            if (image != null)
            {
                var model = new MediaImageViewModel();
                FillMediaFileViewModel(model, image);

                var dimensionsCalculator = new ImageDimensionsCalculator(image);

                model.Tooltip      = image.Caption;
                model.ThumbnailUrl = FileUrlResolver.EnsureFullPathUrl(image.PublicThumbnailUrl + string.Format("?{0}", DateTime.Now.ToString(MediaManagerModuleDescriptor.HardLoadImageDateTimeFormat)));
                model.IsProcessing = image.IsUploaded == null || image.IsThumbnailUploaded == null || image.IsOriginalUploaded == null;
                model.IsFailed     = image.IsUploaded == false || image.IsThumbnailUploaded == false || image.IsOriginalUploaded == false;
                model.Height       = dimensionsCalculator.ResizedCroppedHeight;
                model.Width        = dimensionsCalculator.ResizedCroppedWidth;

                return(model);
            }

            throw new InvalidOperationException("Cannot convert image media to image view model. Wrong entity passed.");
        }
コード例 #3
0
        /// <summary>
        /// Resizes and crops the image.
        /// </summary>
        /// <param name="mediaImage">The image.</param>
        /// <param name="request">The request.</param>
        private MemoryStream 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 = 0;
                x2      = mediaImage.OriginalWidth;
                y2      = mediaImage.OriginalHeight;
                cropped = false;
            }

            var newWidth  = request.ImageWidth;
            var newHeight = request.ImageHeight;
            var resized   = (newWidth != mediaImage.OriginalWidth || newHeight != mediaImage.OriginalHeight);

            MemoryStream memoryStream = null;

            var hasChanges = (mediaImage.Width != newWidth ||
                              mediaImage.Height != newHeight ||
                              x1 != mediaImage.CropCoordX1 ||
                              x2 != mediaImage.CropCoordX2 ||
                              y1 != mediaImage.CropCoordY1 ||
                              y2 != mediaImage.CropCoordY2);

            if (hasChanges)
            {
                DownloadResponse 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);
                    }

                    memoryStream = new MemoryStream();
                    destination.Save(memoryStream, codec, null);
                    mediaImage.Size = memoryStream.Length;
                }

                mediaImage.CropCoordX1 = x1;
                mediaImage.CropCoordY1 = y1;
                mediaImage.CropCoordX2 = x2;
                mediaImage.CropCoordY2 = y2;

                mediaImage.Width  = newWidth;
                mediaImage.Height = newHeight;
            }

            return(memoryStream);
        }
コード例 #4
0
        /// <summary>
        /// Executes the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Media preview.</returns>
        public MediaPreviewViewModel Execute(Guid request)
        {
            var response = new MediaPreviewViewModel();

            var media = Repository.AsQueryable <Media>(m => m.Id == request).Fetch(m => m.Original).FirstOne();
            var file  = media as MediaFile;

            if (file != null)
            {
                var image = media as MediaImage;

                if (cmsConfiguration.Security.AccessControlEnabled)
                {
                    AccessControlService.DemandAccess(file.Original as MediaFile ?? file, Context.Principal, AccessLevel.Read);
                }

                response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_Title, file.Title);

                if (image != null)
                {
                    response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_Caption, image.Caption);
                }

                var publicUrl = fileService.GetDownloadFileUrl(MediaType.File, file.Id, fileUrlResolver.EnsureFullPathUrl(file.PublicUrl));
                response.AddUrl(MediaGlobalization.MediaHistory_Preview_Properties_PublicUrl, publicUrl);

                if (image != null)
                {
                    response.AddUrl(
                        MediaGlobalization.MediaHistory_Preview_Properties_PublicThumbnailUrl,
                        fileUrlResolver.EnsureFullPathUrl(
                            image.PublicThumbnailUrl + string.Format("?{0}", DateTime.Now.ToString(MediaManagerModuleDescriptor.HardLoadImageDateTimeFormat))));
                }

                response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_FileSize, file.SizeAsText());

                if (image != null)
                {
                    var dimensionCalculator = new ImageDimensionsCalculator(image);

                    if (dimensionCalculator.Height != dimensionCalculator.ResizedCroppedHeight || dimensionCalculator.Width != dimensionCalculator.ResizedCroppedWidth)
                    {
                        response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_CroppedImageDimensions,
                                             string.Format("{0} x {1}", dimensionCalculator.ResizedCroppedWidth, dimensionCalculator.ResizedCroppedHeight));
                    }
                    response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_ImageDimensions,
                                         string.Format("{0} x {1}", dimensionCalculator.Width, dimensionCalculator.Height));
                }

                if (!string.IsNullOrWhiteSpace(file.Description))
                {
                    response.AddProperty(MediaGlobalization.MediaHistory_Preview_Properties_Description, file.Description);
                }

                if (media.Image != null)
                {
                    response.AddImage(
                        media.Image.Caption,
                        fileUrlResolver.EnsureFullPathUrl(
                            media.Image.PublicUrl + string.Format("?{0}", DateTime.Now.ToString(MediaManagerModuleDescriptor.HardLoadImageDateTimeFormat))));
                }

                if (image != null)
                {
                    response.AddImage(
                        image.Caption,
                        fileUrlResolver.EnsureFullPathUrl(
                            image.PublicUrl + string.Format("?{0}", DateTime.Now.ToString(MediaManagerModuleDescriptor.HardLoadImageDateTimeFormat))));
                }
            }

            return(response);
        }
コード例 #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;

            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;
        }
コード例 #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;

            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);
                var         dimensionsCalculator = new ImageDimensionsCalculator(newWidth, newHeight, mediaImage.OriginalWidth, mediaImage.OriginalHeight, x1, x2, y1, y2);
                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 width   = dimensionsCalculator.ResizedCroppedWidth;
                        var heigth  = dimensionsCalculator.ResizedCroppedHeight;
                        var cropX12 = dimensionsCalculator.CropCoordX1.Value;
                        var cropY12 = dimensionsCalculator.CropCoordY1.Value;

                        Rectangle rec = new Rectangle(cropX12, cropY12, width, 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 cropX1 = dimensionsCalculator.ResizedCropCoordX1.Value;
                        var cropY1 = dimensionsCalculator.ResizedCropCoordY1.Value;
                        var cropX2 = image.Width - dimensionsCalculator.ResizedCropCoordX2.Value;
                        var cropY2 = image.Height - dimensionsCalculator.ResizedCropCoordY2.Value;

                        // 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.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
                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;
        }