Esempio n. 1
0
        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");
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }