csaki

Image Resizer (console) [Final]

Oct 26th, 2013
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.35 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Drawing.Drawing2D;
  5. using System.Drawing.Imaging;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Windows.Forms;
  9.  
  10. // Credits to: csaki
  11. // Exe download: https://hostr.co/eMXIFkX16sdR
  12.  
  13. namespace imageProcessor
  14. {
  15.     class Program
  16.     {
  17.         static string folder;
  18.         static string[] filenames;
  19.         static string path;
  20.         static DateTime starttime;
  21.         static DateTime endtime;
  22.         static DateTime creationTime;
  23.         static string filename;
  24.  
  25.         [STAThread()]
  26.         static void Main()
  27.         {
  28.         Start:
  29.             OpenFileDialog dialog = new OpenFileDialog();
  30.             Console.Clear();
  31.             Console.ForegroundColor = ConsoleColor.Yellow;
  32.             Console.WriteLine("Welcome to my simple image resizer!");
  33.             Console.WriteLine("Select all the .jpg/.png images you want to resize.");
  34.             Console.WriteLine("(...and let the magic happen!)\n");
  35.             Console.WriteLine("Currently jpg/png generating quality is set to 30 percent (optimal)");
  36.             Console.WriteLine("Resized pictures are kept in a folder named \"Resized\".\n");
  37.             Console.ForegroundColor = ConsoleColor.White;
  38.  
  39.             dialog.Multiselect = true;
  40.             dialog.Title = "Select images";
  41.             dialog.InitialDirectory = @"C:\";
  42.             dialog.Filter = "Images (*.jpg, *.jpeg *.png) | *.JPG; *.jpg; *.JPEG; *.jpeg; *.PNG; *.png";
  43.             if (dialog.ShowDialog() == DialogResult.OK)
  44.             {
  45.                 starttime = DateTime.Now;
  46.                 folder = Path.GetDirectoryName(dialog.FileNames[0]);
  47.                 Log("Selected folder: " + folder);
  48.                 filenames = dialog.FileNames;
  49.                 Log("Got " + filenames.Length + " files!");
  50.                 Log("Starting image processing...");
  51.                 for (int i = 0; i < filenames.Length; i++)
  52.                 {
  53.                     try
  54.                     {
  55.                         using (Bitmap img = new Bitmap(filenames[i]))
  56.                         {
  57.                             creationTime = File.GetCreationTime(filenames[i]);
  58.                             filename = Path.GetFileName(filenames[i]);
  59.                             FolderExists("Resized\\" + String.Format("{0:yyyy_MM}", creationTime));
  60.                             path = Path.Combine(folder, "Resized", String.Format("{0:yyyy_MM}",
  61.                                                                                               creationTime), filename);
  62.                             SaveImage(path, img, 30);
  63.                             Log("Resized: " + filename + " (" + (filenames.Length - i - 1) + " left)");
  64.                         }
  65.                     }
  66.                     catch (Exception ex)
  67.                     {
  68.                         Console.ForegroundColor = ConsoleColor.Red;
  69.                         Log("Ooops! Something happened!");
  70.                         if (MessageBox.Show("Exception message:\n\n" + ex.Message + "\n\nDo you want to restart from the beginning?", "Error!", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
  71.                         {
  72.                             goto Start;
  73.                         }
  74.                         else Environment.Exit(-1);
  75.                     }
  76.                 }
  77.                 Log("All of the images were successfully processed!");
  78.             }
  79.             else
  80.             {
  81.                 if (MessageBox.Show("You haven't selected any files! Do you want to do so again?\n"
  82.                     + "Press yes for restart, or no for exit.", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
  83.                 {
  84.                     goto Start;
  85.                 }
  86.                 else Environment.Exit(0);
  87.             }
  88.  
  89.             endtime = DateTime.Now;
  90.             Log("Passed time: " + String.Format("{0} seconds\n", Math.Round((endtime - starttime).TotalSeconds, 2)));
  91.             Log("Perhaps you want to resize more images? Y/N");
  92.         Retry:
  93.             ConsoleKeyInfo decision = Console.ReadKey();
  94.             switch (decision.Key)
  95.             {
  96.                 case ConsoleKey.Y:
  97.                     goto Start;
  98.  
  99.                 case ConsoleKey.N:
  100.                     Environment.Exit(0);
  101.                     break;
  102.                 default:
  103.                     Log("Press Y or N!");
  104.                     goto Retry;
  105.  
  106.             }
  107.         }
  108.         // Main ends
  109.  
  110.         //static void RenameFolders()
  111.         //{
  112.         //    string[] folders = Directory.GetDirectories(Path.Combine(folder, "Resized"));
  113.         //    List<string> foldersForModify = new List<string>();
  114.         //    for (int i = 0; i < folders.Length; i++)
  115.         //    {
  116.         //        if (folders[i].Substring(folders[i].LastIndexOf('\\') + 1).Contains(' '))
  117.         //        {
  118.         //            foldersForModify.Add(folders[i]);
  119.         //        }
  120.         //    }
  121.         //    if (foldersForModify.Count == 0) return;
  122.  
  123.         //    string[] renamed = new string[foldersForModify.Count];
  124.         //    string[] actualFoldernames = new string[renamed.Length];
  125.         //    char[] chars = null;
  126.         //    for (int i = 0; i < actualFoldernames.Length; i++)
  127.         //    {
  128.         //        actualFoldernames[i] = folders[i].Substring(folders[i].LastIndexOf('\\') + 1);
  129.         //        chars = actualFoldernames[i].ToCharArray();
  130.         //        for (int j = 0; j < chars.Length; j++)
  131.         //        {
  132.         //            if (chars[j] == ' ') chars[j] = '_';
  133.         //        }
  134.         //        actualFoldernames[i] = new string(chars);
  135.         //        renamed[i] = folders[i].Substring(0, folders[i].LastIndexOf('\\') + 1) + actualFoldernames[i];
  136.         //    }
  137.  
  138.         //    for (int i = 0; i < renamed.Length; i++)
  139.         //    {
  140.         //        if (folders[i] != renamed[i]) Directory.Move(folders[i], renamed[i]);
  141.         //    }
  142.         //}
  143.  
  144.         static void Log(string text)
  145.         {
  146.             Console.WriteLine("[{0:HH:MM:ss.ff}] {1}", DateTime.Now, text);
  147.         }
  148.  
  149.         static void FolderExists(string f)
  150.         {
  151.             string path = Path.Combine(folder, f);
  152.             if (Directory.Exists(path))
  153.             {
  154.                 return;
  155.             }
  156.             else
  157.             {
  158.                 Log("Creating path: " + path);
  159.                 Directory.CreateDirectory(path);
  160.             }
  161.         }
  162.  
  163.         static void SaveImage(string path, Image image, int quality)
  164.         {
  165.             if ((quality < 0) || (quality > 100))
  166.                 throw new ArgumentOutOfRangeException("Value must be between 0 and 100.");
  167.  
  168.             EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
  169.             ImageCodecInfo imgCodec;
  170.             if (path.Substring(path.LastIndexOf('.') + 1).ToLower() == "jpg" ||
  171.                 path.Substring(path.LastIndexOf('.') + 1).ToLower() == "jpeg")
  172.                 imgCodec = GetEncoderInfo("image/jpeg");
  173.             else imgCodec = GetEncoderInfo("image/png");
  174.  
  175.             EncoderParameters encoderParams = new EncoderParameters(1);
  176.             encoderParams.Param[0] = qualityParam;
  177.             image.Save(path, imgCodec, encoderParams);
  178.         }
  179.  
  180.         static ImageCodecInfo GetEncoderInfo(string mimeType)
  181.         {
  182.             string lookupKey = mimeType.ToLower();
  183.             ImageCodecInfo foundCodec = null;
  184.             if (Encoders.ContainsKey(lookupKey))
  185.             {
  186.                 foundCodec = Encoders[lookupKey];
  187.             }
  188.             return foundCodec;
  189.         }
  190.  
  191.         static Dictionary<string, ImageCodecInfo> encoders = null;
  192.  
  193.         static Dictionary<string, ImageCodecInfo> Encoders
  194.         {
  195.             get
  196.             {
  197.                 if (encoders == null)
  198.                 {
  199.                     encoders = new Dictionary<string, ImageCodecInfo>();
  200.                 }
  201.                 if (encoders.Count == 0)
  202.                 {
  203.                     foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders())
  204.                     {
  205.                         encoders.Add(codec.MimeType.ToLower(), codec);
  206.                     }
  207.                 }
  208.                 return encoders;
  209.             }
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment