Пример #1
0
        internal static ISettings GetSettings(IConfiguration configuration)
        {
            string sourceRoot          = configuration.GetValue <string>("SourceRoot");
            string destinationRootUrl  = configuration.GetValue <string>("DestinationRootUrl");
            string destinationRootPath = configuration.GetValue <string>("DestinationRootPath");

            ILocation destinationRoot = new Location(new Uri(destinationRootUrl), destinationRootPath);

            IConfigurationSection rateLimiterConfig   = configuration.GetSection("RateLimiter");
            IRateLimiterSettings  rateLimiterSettings = new RateLimiterSettings
            {
                Enabled                 = rateLimiterConfig.GetValue("Enabled", false),
                TimeWindowInMinutes     = rateLimiterConfig.GetValue("TimeWindowInMinutes", 10),
                MaxRequestsInTimeWindow = rateLimiterConfig.GetValue("MaxRequestsInTimeWindow", 100),
                MaxBytesInTimeWindow    = rateLimiterConfig.GetValue("MaxBytesInTimeWindow", 1024 * 1024 * 50),
                Whitelist               = rateLimiterConfig.GetSection("Whitelist").GetChildren().ToList().Select(x => x.Value).ToArray(),
                Blacklist               = rateLimiterConfig.GetSection("Blacklist").GetChildren().ToList().Select(x => x.Value).ToArray()
            };

            IConfigurationSection loggerConfig   = configuration.GetSection("Logger");
            ILoggerSettings       loggerSettings = new LoggerSettings
            {
                WriteInfo     = loggerConfig.GetValue("WriteInfo", false),
                WriteWarnings = loggerConfig.GetValue("WriteWarnings", false),
                WriteErrors   = loggerConfig.GetValue("WriteErrors", false),
                ToConsole     = loggerConfig.GetValue("ToConsole", false),
                ToFile        = loggerConfig.GetValue("ToFile", false),
                Directory     = loggerConfig.GetValue("Directory", string.Empty)
            };

            IConfigurationSection gifConfig   = configuration.GetSection("GifSettings");
            IGifSettings          gifSettings = new GifSettings
            {
                PostProcessorEnabled = gifConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = gifConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            IConfigurationSection jpegConfig   = configuration.GetSection("JpegSettings");
            IJpegSettings         jpegSettings = new JpegSettings
            {
                Quality = jpegConfig.GetValue("Quality", 75),
                PostProcessorEnabled = jpegConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = jpegConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            IConfigurationSection pngConfig   = configuration.GetSection("PngSettings");
            IPngSettings          pngSettings = new PngSettings
            {
                CompressionLevel     = pngConfig.GetValue("CompressionLevel", 6),
                PostProcessorEnabled = pngConfig.GetValue("PostProcessorEnabled", false),
                PostProcessorCommand = pngConfig.GetValue("PostProcessorCommand", string.Empty)
            };

            Settings settings = new Settings(sourceRoot, destinationRoot, rateLimiterSettings, loggerSettings, gifSettings, jpegSettings, pngSettings);

            return(settings);
        }
    /// <summary>
    /// Copies all Adobe resources including clipping path
    /// </summary>
    private static void CopyClippingPath()
    {
        using (var reader = new JpegReader("../../../../_Input/Apple.jpg"))
            using (var bitmap = reader.Frames[0].GetBitmap())
            {
                var jpegSettings = new JpegSettings();
                jpegSettings.AdobeResources = reader.AdobeResources;

                bitmap.Save("../../../../_Output/CopyClippingPath.jpg", jpegSettings);
            }
    }
    /// <summary>
    /// Reads and writes image in JPEG format
    /// </summary>
    private static void ReadAndWriteJpeg()
    {
        using (var bitmap = new Bitmap("../../../../_Input/Chicago.jpg"))
        {
            bitmap.Transforms.Flip(FlipType.Vertical);

            var jpegSettings = new JpegSettings()
            {
                Quality        = 90,
                UseSubsampling = false,
                IsProgressive  = true
            };

            bitmap.Save("../../../../_Output/ReadWriteJpeg.jpg", jpegSettings);
        }
    }
Пример #4
0
        private string SaveHtmlToImage(string htmlsource, string exportedfile)
        {
            try
            {
                // let's configure image settings
                var jpegSettings = new JpegSettings();
                jpegSettings.WindowSize         = new Size(1443, 1100);
                jpegSettings.CompressionQuality = 100;

                // let's save HTML page to jpeg image
                using (var htmlRenderer = new GcHtmlRenderer(htmlsource))
                {
                    htmlRenderer.RenderToJpeg(exportedfile, jpegSettings);
                }
                return(exportedfile);
            }
            catch (Exception ex)
            {
                return(string.Empty);
            }
        }
    /// <summary>
    /// Modifies clipping path explicitly
    /// </summary>
    private static void ModifyClippingPathExplicitly()
    {
        using (var reader = new JpegReader("../../../../_Input/Apple.jpg"))
            using (var bitmap = reader.Frames[0].GetBitmap())
            {
                var crop = new Crop(20, 20, bitmap.Width - 40, bitmap.Height - 40);

                var cropped = crop.Apply(bitmap);

                var clippingPath = reader.ClippingPaths[0];

                clippingPath.ApplyTransform(crop.GetPathTransformMatrix(bitmap.Width, bitmap.Height).ToGdiPlusMatrix());

                var adobeResources = new AdobeResourceDictionary();
                adobeResources.Add(FirstPathId, new AdobeResourceBlock("Apple", clippingPath.Data));

                var jpegSettings = new JpegSettings();
                jpegSettings.AdobeResources = adobeResources;

                cropped.Save("../../../../_Output/ModifyClippingPathExplicitly.jpg", jpegSettings);
            }
    }
Пример #6
0
        public void TestFullConfiguration()
        {
            string   sourceRoot      = "source/root";
            Location destinationRoot = new Location(new Uri("http://site.com/images"), "/var/www/site.com/images");

            RateLimiterSettings rateLimiterSettings = new RateLimiterSettings();

            rateLimiterSettings.Enabled                 = true;
            rateLimiterSettings.TimeWindowInMinutes     = 42;
            rateLimiterSettings.MaxRequestsInTimeWindow = 1337;
            rateLimiterSettings.MaxBytesInTimeWindow    = 1000000;
            rateLimiterSettings.Whitelist               = new string[] { "1.3.3.7" };
            rateLimiterSettings.Blacklist               = new string[] { "6.6.6.666", "666.666.666.666" };

            LoggerSettings loggerSettings = new LoggerSettings();

            loggerSettings.WriteInfo     = true;
            loggerSettings.WriteWarnings = true;
            loggerSettings.WriteErrors   = true;
            loggerSettings.ToConsole     = true;
            loggerSettings.ToFile        = true;
            loggerSettings.Directory     = "path/to/log";

            GifSettings gifSettings = new GifSettings();

            gifSettings.PostProcessorEnabled = true;
            gifSettings.PostProcessorCommand = "path/to/gifsicle some gifsicle args";

            JpegSettings jpegSettings = new JpegSettings();

            jpegSettings.Quality = 50;
            jpegSettings.PostProcessorEnabled = true;
            jpegSettings.PostProcessorCommand = "path/to/jpegtran some jpegtran args";

            PngSettings pngSettings = new PngSettings();

            pngSettings.CompressionLevel     = 3;
            pngSettings.PostProcessorEnabled = true;
            pngSettings.PostProcessorCommand = "path/to/optipng some optipng args";

            Settings settings = new Settings(sourceRoot, destinationRoot, rateLimiterSettings, loggerSettings, gifSettings, jpegSettings, pngSettings);

            Assert.True(settings.SourceRoot == sourceRoot);
            Assert.True(settings.DestinationRoot.AbsoluteUrl == destinationRoot.AbsoluteUrl);
            Assert.True(settings.DestinationRoot.AbsolutePath == destinationRoot.AbsolutePath);

            Assert.True(settings.RateLimiterSettings.Enabled == true);
            Assert.True(settings.RateLimiterSettings.TimeWindowInMinutes == 42);
            Assert.True(settings.RateLimiterSettings.MaxRequestsInTimeWindow == 1337);
            Assert.True(settings.RateLimiterSettings.MaxBytesInTimeWindow == 1000000);
            Assert.True(settings.RateLimiterSettings.Whitelist.Length == 1 && settings.RateLimiterSettings.Whitelist[0] == "1.3.3.7");
            Assert.True(settings.RateLimiterSettings.Blacklist.Length == 2 && settings.RateLimiterSettings.Blacklist[0] == "6.6.6.666" && settings.RateLimiterSettings.Blacklist[1] == "666.666.666.666");

            Assert.True(settings.LoggerSettings.WriteInfo == true);
            Assert.True(settings.LoggerSettings.WriteWarnings == true);
            Assert.True(settings.LoggerSettings.WriteErrors == true);
            Assert.True(settings.LoggerSettings.ToConsole == true);
            Assert.True(settings.LoggerSettings.ToFile == true);
            Assert.True(settings.LoggerSettings.Directory == "path/to/log");

            Assert.True(settings.GifSettings.PostProcessorEnabled);
            Assert.True(settings.GifSettings.PostProcessorCommand == "path/to/gifsicle some gifsicle args");

            Assert.True(settings.JpegSettings.Quality == 50);
            Assert.True(settings.JpegSettings.PostProcessorEnabled);
            Assert.True(settings.JpegSettings.PostProcessorCommand == "path/to/jpegtran some jpegtran args");

            Assert.True(settings.PngSettings.CompressionLevel == 3);
            Assert.True(settings.PngSettings.PostProcessorEnabled);
            Assert.True(settings.PngSettings.PostProcessorCommand == "path/to/optipng some optipng args");
        }