Exemplo n.º 1
0
        static void Main(string[] args)
        {
            var app = new CommandLineApplication(false);

            app.Name        = "qr-art";
            app.Description = "An artistic QR code generator.";
            app.HelpOption("-?|-h|--help");
            app.VersionOption("-v|--version", "qr-art 1.0");

            var contentArg   = app.Argument("content", "Text to encode.");
            var imageArg     = app.Argument("image", "An image to be used as background.");
            var formatArg    = app.Argument("format", "Output image format. [png|gif|svg]");
            var pathArg      = app.Argument("outpath", "Output path.");
            var typeOpt      = app.Option("-t|--type <type>", "Type number of QR code. [1-39]", CommandOptionType.SingleValue);
            var errcorOpt    = app.Option("-e|--errcor <level>", "Error correct level. [L|M|Q|H]", CommandOptionType.SingleValue);
            var foregdOpt    = app.Option("-f|--foreground <color>", "Foreground color.", CommandOptionType.SingleValue);
            var backgdOpt    = app.Option("-b|--background <color>", "Background color.", CommandOptionType.SingleValue);
            var cellOpt      = app.Option("-c|--cell <size>", "Cell size.", CommandOptionType.SingleValue);
            var marginOpt    = app.Option("-m|--margin <margin>", "Margin.", CommandOptionType.SingleValue);
            var animationOpt = app.Option("-a|--animation", "Generate animated QR code.", CommandOptionType.NoValue);

            app.OnExecute(() =>
            {
                if (!animationOpt.HasValue())
                {
                    if (CheckContent(contentArg.Value) &&
                        CheckImagePath(imageArg.Value, out var bitmap, out var bitmapText) &&
                        CheckFormat(formatArg.Value, out var drawer, out var textDrawer) &&
                        CheckType(typeOpt.Value(), out var type) &&
                        CheckErrorCorrectLevel(errcorOpt.Value(), out var errcor) &&
                        CheckForeground(foregdOpt.Value(), out var foregd) &&
                        CheckBackground(backgdOpt.Value(), out var backgd) &&
                        CheckCell(cellOpt.Value(), out var cell) &&
                        CheckMargin(marginOpt.Value(), out var margin))
                    {
                        var builder = new QRArtCreator(
                            new QRCodeEncoder()
                        {
                            TypeNumber        = type,
                            ErrorCorrectLevel = errcor
                        },
                            new Binarizer(),
                            new Triparizer(),
                            new Colorizer(),
                            new Merger(),
                            drawer,
                            textDrawer
                            );
                        {
                            drawer.CellSize   = cell;
                            drawer.Margin     = margin;
                            drawer.Foreground = foregd;
                            drawer.Background = backgd;
                        }



                        Stopwatch stopWatch = new Stopwatch();
                        stopWatch.Start();
                        Console.WriteLine("Start Program ");

                        var image = builder.Create(contentArg.Value, bitmap, bitmapText);
                        //bitmap.Save("static/newbmp1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

                        stopWatch.Stop();
                        // Get the elapsed time as a TimeSpan value.
                        TimeSpan ts = stopWatch.Elapsed;

                        // Format and display the TimeSpan value.
                        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
                                                           ts.Hours, ts.Minutes, ts.Seconds,
                                                           ts.Milliseconds / 10);
                        Console.WriteLine("FullTime " + elapsedTime);

                        Write(image, pathArg.Value ??
                              (imageArg.Value == null ? "output." + formatArg.Value :
                               Path.Combine(Path.GetDirectoryName(imageArg.Value),
                                            Path.GetFileNameWithoutExtension(imageArg.Value) + "_output." + formatArg.Value)));
                        (bitmap as IDisposable)?.Dispose();
                        (image as IDisposable)?.Dispose();
                    }
                    else
                    {
                        app.ShowHelp();
                    }
                }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            var app = new CommandLineApplication(false);

            app.Name        = "qr-art";
            app.Description = "An artistic QR code generator.";
            app.HelpOption("-?|-h|--help");
            app.VersionOption("-v|--version", "qr-art 1.0");

            var contentArg   = app.Argument("content", "Text to encode.");
            var imageArg     = app.Argument("image", "An image to be used as background.");
            var formatArg    = app.Argument("format", "Output image format. [png|gif|svg]");
            var pathArg      = app.Argument("outpath", "Output path.");
            var typeOpt      = app.Option("-t|--type <type>", "Type number of QR code. [1-39]", CommandOptionType.SingleValue);
            var errcorOpt    = app.Option("-e|--errcor <level>", "Error correct level. [L|M|Q|H]", CommandOptionType.SingleValue);
            var foregdOpt    = app.Option("-f|--foreground <color>", "Foreground color.", CommandOptionType.SingleValue);
            var backgdOpt    = app.Option("-b|--background <color>", "Background color.", CommandOptionType.SingleValue);
            var cellOpt      = app.Option("-c|--cell <size>", "Cell size.", CommandOptionType.SingleValue);
            var marginOpt    = app.Option("-m|--margin <margin>", "Margin.", CommandOptionType.SingleValue);
            var animationOpt = app.Option("-a|--animation", "Generate animated QR code.", CommandOptionType.NoValue);

            app.OnExecute(() =>
            {
                if (!animationOpt.HasValue())
                {
                    if (CheckContent(contentArg.Value) &&
                        CheckImagePath(imageArg.Value, out var bitmap) &&
                        CheckFormat(formatArg.Value, out var drawer) &&
                        CheckType(typeOpt.Value(), out var type) &&
                        CheckErrorCorrectLevel(errcorOpt.Value(), out var errcor) &&
                        CheckForeground(foregdOpt.Value(), out var foregd) &&
                        CheckBackground(backgdOpt.Value(), out var backgd) &&
                        CheckCell(cellOpt.Value(), out var cell) &&
                        CheckMargin(marginOpt.Value(), out var margin))
                    {
                        var builder = new QRArtCreator(
                            new QRCodeEncoder()
                        {
                            TypeNumber        = type,
                            ErrorCorrectLevel = errcor
                        },
                            new Binarizer(),
                            new Merger(),
                            drawer
                            );
                        {
                            drawer.CellSize   = cell;
                            drawer.Margin     = margin;
                            drawer.Foreground = foregd;
                            drawer.Background = backgd;
                        }

                        var image = builder.Create(contentArg.Value, bitmap);

                        Write(image, pathArg.Value ??
                              (imageArg.Value == null ? "output." + formatArg.Value :
                               Path.Combine(Path.GetDirectoryName(imageArg.Value),
                                            Path.GetFileNameWithoutExtension(imageArg.Value) + "_output." + formatArg.Value)));
                        (bitmap as IDisposable)?.Dispose();
                        (image as IDisposable)?.Dispose();
                    }
                    else
                    {
                        app.ShowHelp();
                    }
                }
                else
                {
                    if (CheckContent(contentArg.Value) &&
                        CheckImagePathAnimation(imageArg.Value, out var animation) &&
                        CheckFormatAnimation(formatArg.Value, out var drawer) &&
                        CheckType(typeOpt.Value(), out var type) &&
                        CheckErrorCorrectLevel(errcorOpt.Value(), out var errcor) &&
                        CheckForeground(foregdOpt.Value(), out var foregd) &&
                        CheckBackground(backgdOpt.Value(), out var backgd) &&
                        CheckCell(cellOpt.Value(), out var cell) &&
                        CheckMargin(marginOpt.Value(), out var margin))
                    {
                        var builder = new QRAnimationCreator(
                            new QRCodeEncoder()
                        {
                            TypeNumber        = type,
                            ErrorCorrectLevel = errcor
                        },
                            new Binarizer(),
                            new Merger(),
                            drawer,
                            // frames => new BitmapImage(frames.Select(f => f as BitmapFrame))
                            frames => new Rgb24Bitmap(frames.Select(f => f as Rgb24BitmapFrame))
                            );
                        {
                            drawer.CellSize   = cell;
                            drawer.Margin     = margin;
                            drawer.Foreground = foregd;
                            drawer.Background = backgd;
                        }

                        var image = builder.Create(contentArg.Value, animation);

                        Write(image, pathArg.Value ??
                              (imageArg.Value == null ? "output." + formatArg.Value :
                               Path.Combine(Path.GetDirectoryName(imageArg.Value),
                                            Path.GetFileNameWithoutExtension(imageArg.Value) + "_output." + formatArg.Value)));
                        (animation as IDisposable)?.Dispose();
                        (image as IDisposable)?.Dispose();
                    }
                    else
                    {
                        app.ShowHelp();
                    }
                }
                return(0);
            });

            app.Execute(args);
        }