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)}; } } }
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); }
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()); } }
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; }
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); } }
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; }
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 } }; }
public SettingsValidator(Settings settings) { this._settings = settings; }