コード例 #1
0
        public IEnumerable<ProcessFileResult> ProcessFiles(string[] files, Settings settings)
        {
            ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
            var encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, settings.Quality);

            foreach (var file in files)
            {
                using (var original = (Bitmap)Image.FromFile(file))
                {
                    string fileName = Path.Combine(settings.OutputDir, Path.GetFileName(file));

                    if (!settings.OverwriteFiles && File.Exists(fileName))
                    {
                        yield return new ProcessFileResult { ErrorMessage = "File name is the same." };
                    }

                    if (settings.Width > 0 || settings.Height > 0)
                    {
                        using (Bitmap scaled = original.Scale(settings.Size))
                        {
                            AddLogoOrText(scaled, settings);
                            scaled.Save(fileName, jgpEncoder, encoderParameters);
                        }
                    }
                    else
                    {
                        AddLogoOrText(original, settings);
                        original.Save(fileName, jgpEncoder, encoderParameters);
                    }

                    yield return new ProcessFileResult {FileInfo = new FileInfo(fileName)};
                }
            }
        }
コード例 #2
0
 public static void WriteSettingsInfo(Settings settings, string[] files)
 {
     if (!settings.Verbose) return;
     Console.WriteLine("{0,-20}{1,20}", "Number of files", files.Length);
     Console.WriteLine("{0,-20}{1,20}", "Quality", settings.Quality);
     Console.WriteLine("{0,-20}{1,20}", "Width", settings.Width);
     Console.WriteLine("{0,-20}{1,20}", "Height", settings.Height);
 }
コード例 #3
0
 public static void WriteProcessFileResult(ProcessFileResult processFileResult, Settings settings)
 {
     if (!string.IsNullOrEmpty(processFileResult.ErrorMessage))
     {
         ShowError(processFileResult.ErrorMessage);
     }
     else if (settings.Verbose)
     {
         Console.WriteLine("{0,-20}{1,20}",
             processFileResult.FileInfo.Name,
             processFileResult.FileInfo.GetHumanReadableLength());
     }
 }
コード例 #4
0
        private static bool ValidateSettings(Settings settings)
        {
            var validator = new SettingsValidator(settings);

            var validationResult = validator.Validate();

            if (validationResult.ErrorMessages.Any())
            {
                validationResult.ErrorMessages.ForEach(ConsoleWriter.ShowError);
                return false;
            }

            return true;
        }
コード例 #5
0
        private void AddLogoOrText(Bitmap bitmap, Settings settings)
        {
            if (!string.IsNullOrWhiteSpace(settings.LogoPath))
            {
                using (Image logoImg = Image.FromFile(settings.LogoPath))
                {
                    bitmap.DrawLogo(logoImg, settings.Corner);
                }
            }

            if (!string.IsNullOrWhiteSpace(settings.CustomString))
            {
                bitmap.DrawString(settings.CustomString, settings.Corner, settings.Font, settings.Color);
            }
        }
コード例 #6
0
        public static Settings GetSettings(string[] args)
        {
            var settings = new Settings();
            var options = ConsoleOptions.DefineOptions(settings);

            try
            {
                options.Parse(args);
            }
            catch (OptionException e)
            {
                ConsoleWriter.WriteOptionsException(e);
                return null;
            }

            if (settings.ShowHelp)
            {
                ConsoleWriter.ShowHelp(options);
                return null;
            }

            return settings;
        }
コード例 #7
0
 public static OptionSet DefineOptions(Settings settings)
 {
     return new OptionSet
     {
         {
             "i|input=",
             "{PATH} to input directory",
             x => settings.InputDir = x
         },
         {
             "o|output=",
             "{PATH} to output directory",
             x => settings.OutputDir = x
         },
         {
             "q|quality=",
             "quality of scaled images {0-100}. Default is 90.",
             x =>
             {
                 int temp;
                 settings.QualityError = !int.TryParse(x, out temp) || temp < 0 || temp > 100;
                 settings.Quality = temp;
             }
         },
         {
             "w|width=",
             "width {INTEGER} of scaled images",
             x =>
             {
                 int temp;
                 settings.WidthError = !int.TryParse(x, out temp) || temp < 0;
                 settings.Width = temp;
             }
         },
         {
             "h|height=",
             "height {INTEGER} of scaled images",
             x =>
             {
                 int temp;
                 settings.HeightError = !int.TryParse(x, out temp) || temp < 0;
                 settings.Height = temp;
             }
         },
         {
             "l|logo=",
             "{PATH} to the logo image to be drawn on every transformed image",
             x => settings.LogoPath = x
         },
         {
             "t|text=",
             "custom {TEXT} to be drawn on every transformed image",
             x => settings.CustomString = x
         },
         {
             "c|corner=",
             "{CORNER} of the image in which logo or custom string will be drawn. Default is bottom right. List of valid values: " +
             "UpperLeft, UpperRight, BottomLeft, BottomRight",
             x =>
                 {
                     Corner corner;
                     Corner.TryParse(x, true, out corner);
                     settings.Corner = corner;
                 }
         },
         {
             "ff|FontFamily=",
             "custom text font family {NAME}",
             x => settings.FontFamily = x
         },
         {
             "fc|FontColor=",
             "custom text font color. Can be a name or in {alpha;red;green;blue} format: [0-254;0-254;0-254;0-254].",
             x => settings.FontColor = x
         },
         {
             "fs|FontSize=",
             "custom text font {SIZE}",
             x =>
             {
                 int temp;
                 settings.FontSizeError = !int.TryParse(x, out temp) || temp < 0;
                 settings.FontSize = temp;
             }
         },
         {
             "v|verbose",
             "verbose mode",
             x => settings.Verbose = x != null
         },
         {
             "help",
             "show help",
             x => settings.ShowHelp = x != null
         }
     };
 }
コード例 #8
0
 public SettingsValidator(Settings settings)
 {
     this._settings = settings;
 }