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