public static Task <int> Optimize(FileInfo source, FileInfo output) { using var bytes = new MemoryPoolBufferWriter(); using (FileStream stream = source.OpenRead()) { ReadAllBytes(stream, bytes); } var optimizer = new JpegOptimizer(); optimizer.SetInput(bytes.GetReadOnlySequence()); optimizer.Scan(); using var writer = new MemoryPoolBufferWriter(); optimizer.SetOutput(writer); optimizer.Optimize(); using (FileStream stream = output.OpenWrite()) { WriteAllBytes(writer.GetReadOnlySequence(), stream); } return(Task.FromResult(0)); }
private void CompressJpgImage(TemporaryFile tempFile) { var jpegOptimizer = new JpegOptimizer(); if (chkQuality.Checked) { jpegOptimizer.Compress(tempFile, int.Parse(txtQuality.Text)); } else { jpegOptimizer.Compress(tempFile); } }
public void Optimizing_an_image_will_reduce_the_size() { var image = Resources.full; var stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); var size = stream.Length; var mImage = new MagickImage(stream); var newImage = new Bitmap(Processing.OptimizeImage(mImage)); newImage.Save(stream, ImageFormat.Jpeg); newImage.Save("jpgtan.jpg"); var newSize = stream.Length; var stream1 = new MemoryStream(); image = Resources.full; image.Save(stream1, ImageFormat.Jpeg); var outputStream = new MemoryStream(); stream1.Seek(0, SeekOrigin.Begin); using (MagickImage nImage = new MagickImage(stream1)) { nImage.Strip(); nImage.Resize(1920, 0); nImage.Interlace = Interlace.Plane; nImage.Quality = 80; nImage.FilterType = FilterType.Lanczos2; nImage.GaussianBlur(0.05, 10); nImage.Write(outputStream, MagickFormat.Jpg); nImage.AddProfile(ColorProfile.SRGB); nImage.Write("MagickNet.jpg"); nImage.Resize(100, 100); var colors = nImage.Histogram().OrderByDescending(h => h.Value); nImage.Depth = 8; var opt = new JpegOptimizer(); opt.Progressive = true; opt.LosslessCompress("MagickNet.jpg"); nImage.Quantize(new QuantizeSettings() { }); var color = nImage.Histogram().FirstOrDefault().Key.ToColor(); } var newSize1 = outputStream.Length; Assert.IsTrue(newSize < size, "Die Bildgröße hat sich nicht geändert"); Assert.IsTrue(newSize1 < newSize, "Die Bildgröße von Magick war nicht kleiner sich nicht geändert"); }
public void ShouldResultInSmallerFileWHenQualityIsSetTo40() { using (var tempFile = new TemporaryFile(Files.ImageMagickJPG)) { var optimizer = new JpegOptimizer(); optimizer.Compress(tempFile.FileInfo); var info = new MagickImageInfo(tempFile.FileInfo); Assert.Equal(85, info.Quality); FileHelper.Copy(Files.ImageMagickJPG, tempFile.FullName); optimizer.Compress(tempFile.FileInfo, 40); info = new MagickImageInfo(tempFile.FileInfo); Assert.Equal(40, info.Quality); } }
public void ShouldResultInSmallerFileWHenQualityIsSetTo40() { using (TemporaryFile tempFile = new TemporaryFile(Files.ImageMagickJPG)) { JpegOptimizer optimizer = new JpegOptimizer(); optimizer.Compress(tempFile); IMagickImageInfo info = new MagickImageInfo(tempFile); Assert.AreEqual(85, info.Quality); File.Copy(Files.ImageMagickJPG, tempFile.FullName, true); optimizer.Compress(tempFile, 40); info = new MagickImageInfo(tempFile); Assert.AreEqual(40, info.Quality); } }
public void TestOptimize(string path, bool strip) { byte[] jpegBytes = File.ReadAllBytes(path); using var refImage = Image.Load <Rgb24>(path); var optimizer = new JpegOptimizer(); optimizer.SetInput(jpegBytes); optimizer.Scan(); var buffer = new ArrayBufferWriter <byte>(); optimizer.SetOutput(buffer); optimizer.Optimize(strip); Assert.True(buffer.WrittenCount < jpegBytes.Length); using var testImage = Image.Load <Rgb24>(buffer.WrittenSpan); AssertEqual(refImage, testImage); }
public void Test_Compress_Quality() { FileInfo tempFile = CreateTemporaryFile(Files.ImageMagickJPG); try { JpegOptimizer optimizer = new JpegOptimizer(); optimizer.Compress(tempFile); IMagickImageInfo info = new MagickImageInfo(tempFile); Assert.AreEqual(85, info.Quality); File.Copy(Files.ImageMagickJPG, tempFile.FullName, true); optimizer.Compress(tempFile, 40); info = new MagickImageInfo(tempFile); Assert.AreEqual(40, info.Quality); } finally { tempFile.Delete(); } }
public void Process(GetMediaStreamPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (args.Options.Thumbnail) { return; } MediaStream outputStream = args.OutputStream; if (outputStream == null) { return; } if (!outputStream.AllowMemoryLoading) { Tracer.Error("Could not resize image as it was larger than the maximum size allowed for memory processing. Media item: {0}", outputStream.MediaItem.Path); return; } string mimeType = args.MediaData.MimeType; if (!mimeType.StartsWith("image/", StringComparison.Ordinal)) { return; } string extension = args.MediaData.Extension; IImageOptimizer optimizer = null; if (extension.Equals("png")) { optimizer = new PngOptimizer(outputStream.Stream); } if (extension.Equals("jpg") || extension.Equals("jpeg")) { optimizer = new JpegOptimizer(outputStream.Stream); } if (optimizer == null) { return; } var sw = new Stopwatch(); sw.Start(); var result = optimizer.Optimize(); sw.Stop(); if (result.Success) { outputStream.Stream.Close(); Log.Info("Dianoga: optimized {0}.{1} ({2} bytes) - saved {3} bytes / {4:p}. Optimized in {5}ms.".FormatWith(args.OutputStream.MediaItem.MediaPath, args.OutputStream.MediaItem.Extension, result.SizeAfter, result.SizeBefore - result.SizeAfter, 1 - ((result.SizeAfter / (float)result.SizeBefore)), sw.ElapsedMilliseconds), this); args.OutputStream = new MediaStream(result.CreateResultStream(), outputStream.Extension, outputStream.MediaItem); } else { Log.Error("Dianoga: unable to optimize {0} because {1}".FormatWith(args.OutputStream.MediaItem.Name, result.ErrorMessage), this); } }