Ejemplo n.º 1
0
        public void Process(GetMediaStreamPipelineArgs args)
        {
            Sitecore.Diagnostics.Assert.ArgumentNotNull((object)args, "args");
            if (args.Options.Thumbnail)
            {
                return;
            }
            MediaStream outputStream = args.OutputStream;

            if (outputStream == null)
            {
                return;
            }
            if (!outputStream.AllowMemoryLoading)
            {
                Tracer.Error((object)"Could not resize image as it was larger than the maximum size allowed for memory processing. Media item: {0}", (object)outputStream.MediaItem.Path);
            }
            else
            {
                if (!args.MediaData.MimeType.StartsWith("image/", StringComparison.Ordinal))
                {
                    return;
                }
                string          str            = args.MediaData.Extension.ToLower();
                IImageOptimizer imageOptimizer = (IImageOptimizer)null;
                if (str.Equals("png"))
                {
                    imageOptimizer = (IImageOptimizer) new PngOptimizer(outputStream.Stream);
                }
                if (str.Equals("jpg") || str.Equals("jpeg"))
                {
                    imageOptimizer = (IImageOptimizer) new JpegOptimizer(outputStream.Stream);
                }
                if (imageOptimizer == null)
                {
                    return;
                }
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                IOptimizerResult optimizerResult = imageOptimizer.Optimize();
                stopwatch.Stop();
                if (optimizerResult.Success)
                {
                    outputStream.Stream.Close();
                    Sitecore.Diagnostics.Log.Info(StringExtensions.FormatWith("HealthIS: optimized {0}.{1} ({2} bytes) - saved {3} bytes / {4:p}. Optimized in {5}ms.", (object)args.OutputStream.MediaItem.MediaPath, (object)args.OutputStream.MediaItem.Extension, (object)optimizerResult.SizeAfter, (object)(optimizerResult.SizeBefore - optimizerResult.SizeAfter), (object)(float)(1.0 - (double)optimizerResult.SizeAfter / (double)optimizerResult.SizeBefore), (object)stopwatch.ElapsedMilliseconds), (object)this);
                    args.OutputStream = new MediaStream(optimizerResult.CreateResultStream(), outputStream.Extension, outputStream.MediaItem);
                }
                else
                {
                    Sitecore.Diagnostics.Log.Error(StringExtensions.FormatWith("HealthIS: unable to optimize {0} because {1}", (object)args.OutputStream.MediaItem.Name, (object)optimizerResult.ErrorMessage), (object)this);
                }
            }
        }
        public static bool Optimize(this IImageOptimizer imageOptimizer, string inputFilePath, string outputFilePath, ImageOptimizationMode optimizationMode)
        {
            using (MemoryStream ms = new MemoryStream()) {
                using (FileStream inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read))
                    inputStream.CopyTo(ms);

                ms.Seek(0, SeekOrigin.Begin);

                bool success = imageOptimizer.Optimize(ms, optimizationMode);

                if (success)
                {
                    ms.Seek(0, SeekOrigin.Begin);

                    using (FileStream outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
                        ms.CopyTo(outputStream);
                }

                return(success);
            }
        }
Ejemplo n.º 3
0
        public static void Save(this IImage image, Stream stream, IFileFormat imageFormat, IImageEncoderOptions encoderOptions)
        {
            IImageEncoder encoder = ImageCodec.FromFileFormat(imageFormat);

            if (encoder is null)
            {
                throw new UnsupportedFileFormatException();
            }

            encoder.Encode(image, stream, encoderOptions);

            if (stream.CanSeek && encoderOptions.OptimizationMode != ImageOptimizationMode.None)
            {
                IImageOptimizer imageOptimizer = ImageOptimizer.FromImageFormat(imageFormat);

                if (!(imageOptimizer is null))
                {
                    stream.Seek(0, SeekOrigin.Begin);

                    imageOptimizer.Optimize(stream, encoderOptions.OptimizationMode);
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Get an optimizer from the factory
        /// </summary>
        /// <param name="optimizer">The name of the optimizer.</param>
        /// <param name="sourcePath">The path of the file to optimize.</param>
        /// <param name="outputPath">The output path for the optimized image.</param>
        public ImageOptimizerResult Optimize(string optimizer, FilePath sourcePath, FilePath outputPath)
        {
            //Get Optimizer
            IImageOptimizer optim = null;

            if (!String.IsNullOrEmpty(optimizer))
            {
                optim = this.GetByName(optimizer);
            }

            if (optim == null)
            {
                optim = this.GetByPath(sourcePath);
            }



            //Get Result
            ImageOptimizerResult result = null;

            if (optim != null)
            {
                try
                {
                    //Optimize
                    IFile file = _FileSystem.GetFile(sourcePath);

                    if ((optim.FileSize == 0) || (file.Length < optim.FileSize))
                    {
                        result = optim.Optimize(sourcePath);



                        //Check Sizes
                        if (result.SizeBefore == 0)
                        {
                            result.SizeBefore = file.Length;
                            result.SizeAfter  = result.SizeBefore;
                        }



                        //Replace File
                        if (result.SizeAfter != result.SizeBefore)
                        {
                            Directory.CreateDirectory(outputPath.GetDirectory().FullPath);

                            using (WebClient client = new WebClient())
                            {
                                client.DownloadFile(result.DownloadUrl, outputPath.FullPath);
                            }

                            //Date Modified
                            result.ModifiedDate = new FileInfo(file.Path.FullPath).LastWriteTime;
                        }
                        else
                        {
                            //Skipped
                            result = new ImageOptimizerResult(optim.Name, sourcePath, "Matching FileSize");
                        }
                    }
                    else
                    {
                        //Skipped
                        result = new ImageOptimizerResult(optim.Name, sourcePath, "Invalid FileSize");
                    }
                }
                catch (Exception ex)
                {
                    //Error
                    result = new ImageOptimizerResult(optim.Name, sourcePath, ex.Message);
                }
            }
            else
            {
                //Unsupported File
                result = new ImageOptimizerResult(optimizer, sourcePath, "Unsupported File");
            }

            return(result);
        }