Exemplo n.º 1
0
 protected virtual void SetMode(ImageState state, AutoCropState data, AutoCropSettings settings)
 {
     if (settings.SetMode)
     {
         state.settings.Mode = settings.Mode;
     }
 }
Exemplo n.º 2
0
        protected virtual ICropAnalyzer GetCropAnalyzer(BitmapData data, AutoCropSettings settings)
        {
            if (settings.Method == AutoCropMethod.Edge)
            {
                return(new SobelAnalyzer(data, settings.Threshold, 0.945f));
            }

            return(new BoundsAnalyzer(data, settings.Threshold, 0.945f));
        }
        private static bool ParseSettings(string autoCropParameter, string resizeModeParameter, out AutoCropSettings settings)
        {
            settings = null;

            if (string.IsNullOrWhiteSpace(autoCropParameter))
            {
                return(false);
            }

            var data   = autoCropParameter.Split(',', ';', '|');
            var parsed = int.TryParse(data[0], out var padX);

            if (!parsed)
            {
                return(false);
            }

            settings = new AutoCropSettings
            {
                PadX = Clamp(padX, 0, 100)
            };

            if (data.Length > 3 && int.TryParse(data[3], out var bucketThreshold))
            {
                settings.BucketThreshold = Clamp(bucketThreshold, 0, 100) / 100.0f;
            }
            else
            {
                settings.BucketThreshold = 0.945f;
            }

            if (data.Length > 2 && int.TryParse(data[2], out var colorThreshold))
            {
                settings.ColorThreshold = Clamp(colorThreshold, 0, 254);
            }
            else
            {
                settings.ColorThreshold = 35;
            }

            if (data.Length > 1 && int.TryParse(data[1], out var padY))
            {
                settings.PadY = Clamp(padY, 0, 100);
            }
            else
            {
                settings.PadY = Clamp(padX, 0, 100);
            }

            if (Enum.TryParse(resizeModeParameter, true, out ResizeMode resizeMode))
            {
                settings.PadMode = GetPadMode(resizeMode);
            }

            return(true);
        }
Exemplo n.º 4
0
        protected AutoCropSettings ParseSettings(ResizeSettings settings)
        {
            var settingsValue = settings["autoCrop"];

            if (settingsValue == null)
            {
                return(null);
            }

            var modeValue   = settings["autoCropMode"];
            var methodValue = settings["autoCropMethod"];
            var debugValue  = settings["autoCropDebug"];

            var result = new AutoCropSettings
            {
                Debug = debugValue != null
            };

            var data   = settingsValue.Split(',', ';', '|');
            var parsed = int.TryParse(data[0], out var padX);

            if (!parsed)
            {
                return(result);
            }

            result.Parsed = true;
            result.PadX   = Math.Max(padX, 0);

            if (data.Length > 2 && int.TryParse(data[2], out var threshold))
            {
                result.Threshold = Math.Max(threshold, 0);
            }

            if (data.Length > 1 && int.TryParse(data[1], out var padY))
            {
                result.PadY = Math.Max(padY, 0);
            }
            else
            {
                result.PadY = Math.Max(padX, 0);
            }

            if (Enum.TryParse(methodValue, true, out AutoCropMethod autoCropMethod))
            {
                result.Method = autoCropMethod;
            }

            if (Enum.TryParse(modeValue, true, out FitMode fitMode))
            {
                result.SetMode = true;
                result.Mode    = fitMode;
            }

            return(result);
        }
Exemplo n.º 5
0
        public void CanAnalyzeCrop()
        {
            var settings     = new AutoCropSettings();
            var cropAnalysis = (ICropAnalysis)null;

            using var image = Image.Load("TestImages/test.png");

            image.Mutate(ctx => ctx.AnalyzeCrop(settings, out cropAnalysis));

            Assert.NotNull(cropAnalysis);
            Assert.Equal(Color.White, cropAnalysis.Background);
            Assert.True(cropAnalysis.Success);
        }
Exemplo n.º 6
0
        public void CanReuseAnalysis()
        {
            var settings       = new AutoCropSettings();
            var cropAnalysis   = (ICropAnalysis)null;
            var weightAnalysis = (IWeightAnalysis)null;

            using var sourceImage = Image.Load("TestImages/test.png");

            using var firstImage  = sourceImage.Clone(ctx => ctx.AutoCrop(settings, out cropAnalysis, out weightAnalysis));
            using var secondImage = sourceImage.Clone(ctx => ctx.AutoCropKnown(settings, cropAnalysis, weightAnalysis));

            Assert.True(cropAnalysis.Success);
            Assert.NotNull(secondImage);
            Assert.Equal(secondImage.Size(), firstImage.Size());
        }
Exemplo n.º 7
0
        public void CanAnalyzeWeights()
        {
            var settings = new AutoCropSettings
            {
                AnalyzeWeights = true
            };

            var weightAnalysis = (IWeightAnalysis)null;

            using var image = Image.Load("TestImages/test.png");

            image.Mutate(ctx => ctx.AutoCrop(settings, out _, out weightAnalysis));

            Assert.NotNull(weightAnalysis);
            Assert.Equal(new PointF(-0.0002448041f, -0.0009081508f), weightAnalysis.Weight);
        }
Exemplo n.º 8
0
        public void CanPadOnLeftEdge()
        {
            var settings = new AutoCropSettings
            {
                PadX = 20,
                PadY = 20
            };

            using var image = Image.Load("TestImages/test_edge_left.png");

            image.Mutate(ctx => ctx.AutoCrop(settings));

            image.SaveAsPng("TestImages/test_edge_left_result.png");

            Assert.Equal(377, image.Width);
            Assert.Equal(327, image.Height);
        }
Exemplo n.º 9
0
        public void CanCrop()
        {
            var settings = new AutoCropSettings
            {
                PadX            = 5,
                PadY            = 5,
                ColorThreshold  = 35,
                BucketThreshold = 0.945f
            };

            using var image = Image.Load("TestImages/test.png");

            image.Mutate(ctx => ctx.AutoCrop(settings));

            Assert.Equal(301, image.Width);
            Assert.Equal(251, image.Height);
        }
Exemplo n.º 10
0
        protected virtual void SetBackground(ImageState state, AutoCropState data, AutoCropSettings settings)
        {
            if (settings.Debug)
            {
                if (settings.Method == AutoCropMethod.Edge)
                {
                    state.settings.BackgroundColor = Color.FromArgb(255, 0, 0, 0);
                }
                else
                {
                    var backgroundColor = state.settings.BackgroundColor;
                    state.settings.BackgroundColor = backgroundColor.ToColorBucket().ToColor();
                }
            }

            if (state.settings.BackgroundColor.Equals(Color.Transparent))
            {
                state.settings.BackgroundColor = data.BorderColor;
            }
        }
Exemplo n.º 11
0
        public void CanPad()
        {
            var cropSettings = new AutoCropSettings
            {
                PadX = 0,
                PadY = 0
            };

            var padSettings = new AutoCropSettings
            {
                PadX = 20,
                PadY = 20
            };

            using var image = Image.Load("TestImages/test.png");

            image.Mutate(ctx => ctx.AutoCrop(cropSettings));
            image.Mutate(ctx => ctx.AutoCrop(padSettings));

            Assert.Equal(377, image.Width);
            Assert.Equal(327, image.Height);
        }