private static void StartCompression(MagickImage image, bool lossless) { ImageOptimizerHelper.CheckFormat(image, MagickFormat.Png); if (!lossless) { image.Strip(); image.Settings.SetDefine(MagickFormat.Png, "exclude-chunks", "all"); image.Settings.SetDefine(MagickFormat.Png, "include-chunks", "tRNS,gAMA"); } }
private bool DoLosslessCompress(FileInfo file) { bool isCompressed = false; using (MagickImage image = new MagickImage(file)) { ImageOptimizerHelper.CheckFormat(image, MagickFormat.Png); image.Strip(); image.Settings.SetDefine(MagickFormat.Png, "exclude-chunks", "all"); image.Settings.SetDefine(MagickFormat.Png, "include-chunks", "tRNS,gAMA"); CheckTransparency(image); Collection <TemporaryFile> tempFiles = new Collection <TemporaryFile>(); try { TemporaryFile bestFile = null; foreach (int quality in GetQualityList()) { TemporaryFile tempFile = new TemporaryFile(); tempFiles.Add(tempFile); image.Quality = quality; image.Write(tempFile); if (bestFile == null || bestFile.Length > tempFile.Length) { bestFile = tempFile; } } if (bestFile.Length < file.Length) { isCompressed = true; bestFile.CopyTo(file); file.Refresh(); } } finally { foreach (TemporaryFile tempFile in tempFiles) { tempFile.Dispose(); } } } return(isCompressed); }
private static bool DoLosslessCompress(FileInfo file, IMagickImage <QuantumType> image) { ImageOptimizerHelper.CheckFormat(image, MagickFormat.Gif); bool isCompressed = false; using (TemporaryFile tempFile = new TemporaryFile()) { LosslessCompress(image); image.Write(tempFile); if (tempFile.Length < file.Length) { isCompressed = true; tempFile.CopyTo(file); file.Refresh(); } } return(isCompressed); }
private static bool DoLosslessCompress(Stream stream, long startPosition, IMagickImage image) { ImageOptimizerHelper.CheckFormat(image, MagickFormat.Gif); bool isCompressed = false; using (MemoryStream memStream = new MemoryStream()) { LosslessCompress(image); image.Write(memStream); if (memStream.Length < (stream.Length - startPosition)) { isCompressed = true; memStream.CopyTo(stream); stream.SetLength(startPosition + memStream.Length); } } return(isCompressed); }