Dlouho jsem používal cizí aplikaci ImageResizer, která ale uměla zmenšovat pouze soubory jpeg. A protože už mě pořád nebavilo převádět obrázky do jpg a případně pak zase zpět,
udělal jsem si malou vlastní aplikaci, která převádí typy souborů v první řadě jpg, pak ale umí převádět i libovolné další typy – zkoušel jsem to na png a gif(a to ani ne teď jako spíše při mém SunamoBlogConverter’u), ve kterém používám stejný algoritmus. Je to další aplikace, protože podobnou už mám z dřívějška, ta je speciálně na zmenšování fotek a je to app s GUI:
Nová app je app bez GUI, jediné co vypisuje je za se soubor podařilo převést nebo zda existoval(zde konvertuji jediný soubor ale jejich počet najednou není omezen):

Takže zpět k ImageResizeru, ten funguje tak že prostě na něho přetáhnu soubory a on podle názvu exe tyto soubory zmenší. Umí když mu zadáte pouze šířku, si výšku vypočítat automaticky. Toto všechno umí i můj program. A aby to tu nebylo tak strohé, mohu vám tu dát metodu Main() alespoň:
static void Main(string[] args)
{
//args = new string[] { @"F:\Mona\Visual Studio 2010\Projects\SunamoImageResizer\SunamoImageResizer\bin\Release\theme_ntp_background-o.png" };
string coords = null;
int width = 0;
int height = 0;
bool calculateHeight = false;
string size = Process.GetCurrentProcess().ProcessName.Replace(".exe", "");
if (!size.Contains("-"))
{
//width = 800;
//calculateHeight = true;
string error = "Musite zadat alespon sirku - pro sirku 16px program pojmenujte ImageResizer16. Pote program zmensi oba obrazky ve stejnem polomeru. Pokud chcete zadat jinou sirku a jinou vysku(napriklad vyska: 768px, sirka 1366px), pojmenujte program ImageResizer-1366x768";
Error(error);
return;
}
else
{
string[] first = Split(size, "-");
coords = first[first.Length - 1];
if (coords.Contains("x"))
{
string[] second = Split(coords, "x");
if (second.Length != 2)
{
Error("Nemuzete zadat vice nez 2 rozmery");
return;
}
if (int.TryParse(second[0], out width))
{
height = width;
}
else
{
Error("Nebylo zadano platne cislo pro sirku");
return;
}
if (int.TryParse(second[1], out height))
{
}
else
{
Error("Nebylo zadano platne cislo pro vysku");
return;
}
}
else
{
if (int.TryParse(coords, out width))
{
calculateHeight = true;
//height = (width / 100) * 75;
coords = width + "x" + height;
}
else
{
Error("Nebylo zadano platne cislo pro velikost");
return;
}
}
}
coords = "-" + coords;
for (int i = 0; i < args.Length; i++)
{
if (calculateHeight)
{
Image img = Image.FromFile(args[i]);
//-1366x768 = 800x600
float f = (float)img.Width / (float)img.Height;
height = (int)(width / f);
coords = width + "x" + height;
}
string to = InsertBetweenFileNameAndExtension(args[i], "-" + coords);
string fn = Path.GetFileName(to);
if (ImageResize(args[i], to, width, height) == "")
{
Console.WriteLine("Soubor {0} jiz existoval", fn);
}
else
{
Console.WriteLine("Uspesne prevedeno do {0}", fn);
}
}
Console.ReadLine();
}