PHP skript pro generování galerie obrázků 2.

    3

    Tento článek navazuje na minulý díl, kde jsme si udělali skript na automatické generování HTML galerie obrázků. Problém je ale v tom, že pro každý obrázek je potřeba udělat jeho náhled a tudíž nový soubor. Obvykle se to dělá v nějakém grafickém programu, což je činnost docela časově náročná. Podívejme se tedy na skript, který dobu desítek minut i případně několika hodin zkrátí na vteřiny.

    Zzákladním předpokladem pro fungování tohoto skriptu je, že máme PHP s podporou GD. Ve Windows se tento problém dá vyřešit přidáním tohoto řádku na začátek souboru se skriptem: dl(„php_gd.dll“); a na Unixu pak takto: dl(„gd.so“);. Samozřejmě musíte dodat správnou cestu k souborům.

    Jako minule, tak i teď uvedu zdrojový kód, umístěný v souboru zmenseni.php, po ucelených částech, ve kterých vysvětlím, jak funguje. Musíte je tedy spojit a vložit do zmiňovaného souboru.

    <html>
    <head><title>Skript na zmenseni obrazku v galerii</title></head>
    <body>
    <?
    if (isset($submit)) { // pokud je odeslan formular
    $adresar = OpenDir($odkud); // otevreme adresar
    $soubor = Array(); // zinicializujeme pole
    while ($zaznam = ReadDir($adresar)) { cyklus nacita vsechny soubory
    if (!Is_Dir(„$odkud/$zaznam“)) { // pokud nazev neni adresar, …
    $soubor[] = $zaznam; // …, pridame jej do pole
    }
    }
    CloseDir($adresar); // uzavreme adresar
    Sort($soubor); // setridime soubory
    // dalsi podminka urci ktere funkce budeme pouzivat
    if ($typ == „gif“) { $vstup_funkce = ImageCreateFromGIF; $vystup_funkce = ImageGIF; }
    elseif ($typ == „jpg“) { $vstup_funkce = ImageCreateFromJPEG; $vystup_funkce = ImageJPEG; }
    elseif ($typ == „png“) { $vstup_funkce = ImageCreateFromPNG; $vystup_funkce = ImagePNG; }

    Po klasickém HTML úvodu přichází kontrola, zda-li byl formulář odeslán, pokud nebyl, zobrazí se. Pokud byl odeslán, přikročí se k provádění samotnému zmenšování. Po úvodní podmínce si stejným způsobem jako v minulém díle načteme seznam souborů do pole $soubor. Nelekejte se těch tří podmínek, zjišťují, s jakým formátem si uživatel přeje pracovat a do proměnné $vstup_funkce a $vystup_funkce přiřadíme funkci specifickou pro zvolený grafický formát. Takováto proměnná se pak chová jako kdyby byla ta určitá přiřazená funkce. Má stejný počet parametrů i stejný výsledek.

    Reset($soubor);
    while ($zaznam = Current($soubor)) { // cyklus nacita postupne soubory
    $img_zdroj = $vstup_funkce(„$odkud/$zaznam“); // nacteme obrazek ze souboru
    $img_cil = ImageCreate($velx,$vely); // vytvorime prostor pro cilovy obrazek
    ImageCopyResized($img_cil,$img_zdroj,0,0,0,0,$velx,$vely,ImageSX($img_zdroj),ImageSY($img_zdroj)); // zmensime obrazek
    $vystup_funkce($img_cil,“$kam/$predpona$zaznam“); // zapiseme novy obrazek do souboru
    ImageDestroy($img_zdroj); // uvolnime pamet zdrojoveho obrazku
    ImageDestroy($img_cil); // uvolnime pamet ciloveho obrazku
    Next($soubor);
    }
    echo „<center><h3>Konverze dokoncena!</h3></center>“;

    Podívejme se na další kousek, tato část je tím kusem skriptu, kde skutečně dochází ke konverzi obrázků a proto se na ni podíváme podrobněji. Cyklus while() nám zajistí postupné načítání jmen souborů. Jak jsem už řekl, $vstup_funkce reprezentuje funkci ImageCreateFromGIF() resp. ImageCreateFromJPEG() nebo ImageCreateFromPNG(). Pro obrázek se musí vytvořit místo v paměti, to získáme pomocí zmíněných funkcí a reprezentuje jej proměnná $img_zdroj. Musíme taktéž vytvořit místo pro budoucí zmenšeninku a k tomu použijeme funkci ImageCreate(), které předáme parametry o velikosti obrázku. A teď funkce pro nás nejdůležitější: ImageCopyResized(). Tato funkce zkopíruje zdrojový obrázek do cíloveho, ale to není vůbec všechno co nabízí, dále zadáme jakou část vezme ze zdrojového obrázku a na jakou velikost se má upravit. Je možné obrázek také zvětšit, ale to je v našem případě k ničemu. PHP používá ke zmenšení poměrně jednoduchý postup a tudíž kvalita zmenšených obrázků není závratná, ale pro běžné galerie bohatě postačující.

    Vraťme se ale zpět ke skriptu. Jako další přichází na řadu $vystup_funkce, která zastupuje jednu z ImageGIF(), ImageJPEG() nebo ImagePNG(). Tyto funkce slouží k zapsání obrázku na výstup. Jelikož jsme uvedli jako druhý parametr jméno souboru, bude výstup zapsán do něj. Na konec ještě uvolníme pamět, použitou pro uložení obrázku v paměti, funkcí Image_Destroy().

    } else {
    ?>
    <form>
    Umisteni zdrojove galerie:<input type=text name=odkud><br>
    Umisteni cilove galerie:<input type=text name=kam><br>
    Sirka:<input type=text name=velx><br>
    Delka:<input type=text name=vely><br>
    Vstupni a vystupni typ:<select name=typ>
    <option selected value=gif>GIF</option>
    <option value=jpg>JPEG</option>
    <option value=png>PNG</option>
    </select><br>
    Predpona<input type=text name=predpona><br>
    <input type=submit name=submit value=odeslat>
    </form>
    <? } ?>
    </body>
    </html>

    Tahle poslední část už neni z PHP hlediska ničím zajímavá, jen se zde provede zobrazení HTML formuláře, pokud jsme jej už neodeslali.

    A máme to za sebou, ještě bych rád podotknul že podpora formátu GIF byla v GD 1.6 vyjmuta a nahrazena podporou PNG. Pokud chcete používat soubory GIF sežeňte si GD knihovnu 1.3 – 1.5. Teď už vám jen přeju hodně obrázků a co největší návštěvnost vašich galerií, ať už to budou obrázky aut, krajin atd.

    Starší komentáře ke článku

    Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

    3 Příspěvků v diskuzi

    Napsat komentář: agn Zrušit odpověď