Converts from any type that is readable by Image.FromFile()
to any of {BMP, JPG, PNG}
usage:
ImageConverter.exe {BMP, JPG, PNG} <files>
Dependencies: System.Drawing.Common
using System; | |
using System.Linq; | |
using System.IO; | |
using System.Drawing; | |
using System.Collections.Generic; | |
namespace ImageConverter | |
{ | |
class Program | |
{ | |
enum ImageFormat { BMP, JPG, PNG, INVALID } | |
static void Main(string[] args) | |
{ | |
System.Drawing.Imaging.ImageFormat outputFormat; | |
if (!Enum.TryParse(typeof(ImageFormat), args.First(), out object outputTypeObj)) | |
{ | |
Console.WriteLine($"Specify output-format as first argument, supported: {string.Join(',', Enum.GetValues(typeof(ImageFormat)))}"); | |
Environment.Exit(1); | |
} | |
IEnumerable<string> images = args[1] == "*" | |
? Directory.EnumerateFiles(Environment.CurrentDirectory, "*.png", SearchOption.TopDirectoryOnly) | |
.Concat(Directory.EnumerateFiles(Environment.CurrentDirectory, "*.jpg", SearchOption.TopDirectoryOnly)) | |
.Concat(Directory.EnumerateFiles(Environment.CurrentDirectory, "*.bmp", SearchOption.TopDirectoryOnly)) | |
: new List<string>(args[1..]); | |
outputFormat = ToGDIImageFormat((ImageFormat)outputTypeObj); | |
foreach (var path in images) | |
{ | |
if (!File.Exists(path)) | |
{ | |
Console.WriteLine($"Bad input arg: {path}"); | |
Environment.Exit(1); | |
} | |
try | |
{ | |
Image image = Image.FromFile(path); | |
var inputFormat = image.RawFormat; | |
if (inputFormat != outputFormat) | |
image.Save(Path.ChangeExtension(path, ToExtension(ToImageFormat(outputFormat))), outputFormat); | |
} | |
catch (Exception e) | |
{ | |
Console.WriteLine($"Could not convert {path} to {ToImageFormat(outputFormat)}"); | |
Console.WriteLine(e.ToString()); | |
Environment.Exit(1); | |
} | |
} | |
Environment.Exit(0); | |
} | |
private static string ToExtension(ImageFormat format) => format switch | |
{ | |
ImageFormat.BMP => ".bmp", | |
ImageFormat.PNG => ".png", | |
ImageFormat.JPG => ".jpg", | |
_ => throw new NotImplementedException($"imageFormat {format} was not implemented because of laziness") | |
}; | |
private static ImageFormat ToImageFormat(System.Drawing.Imaging.ImageFormat gdi_imageFormat) | |
{ | |
if (gdi_imageFormat == System.Drawing.Imaging.ImageFormat.Bmp) | |
return ImageFormat.BMP; | |
else if (gdi_imageFormat == System.Drawing.Imaging.ImageFormat.Jpeg) | |
return ImageFormat.JPG; | |
else if (gdi_imageFormat == System.Drawing.Imaging.ImageFormat.Png) | |
return ImageFormat.PNG; | |
else | |
return ImageFormat.INVALID; | |
} | |
private static System.Drawing.Imaging.ImageFormat ToGDIImageFormat(ImageFormat format) => format switch | |
{ | |
ImageFormat.BMP => System.Drawing.Imaging.ImageFormat.Bmp, | |
ImageFormat.JPG => System.Drawing.Imaging.ImageFormat.Jpeg, | |
ImageFormat.PNG => System.Drawing.Imaging.ImageFormat.Png, | |
_ => throw new NotImplementedException($"imageFormat {format} was not implemented because of laziness") | |
}; | |
} | |
} |