Udělal jsem si malou (a další) aplikaci na změnu velikosti obrázku

⚠️ Pozor: obrázky z tohoto příspěvku se ztratily při výpadku v roce 2016. Chybějící obrázky nahradí automaticky vtipným placeholderem plugin Broken Image Placeholder.

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:

ZmensovacObrazku

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):

SunamoImageResizer
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ň:

C#
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();
}

Leave a Reply

Your email address will not be published. Required fields are marked *