Hromadné zmenšování fotek
01.04.2008Komentáře (5) Kategorie: Tvorba webu » PHP

Tak tu máme můj první tutoriál na image funkce v PHP. Ukážeme si, jak automaticky zmenšit všechny fotky v nějaké složce. Základem nám bude složka, skript a hromada fotek, které chceme zmenšit. Abychom ve skriptu nemuseli nic měnit, uděláme to takhle. Na localhostu nebo někde na serveru vytvoříme složku ‘zmensovac’. Do ní nahrajeme skript index.php a zároveň v ní vytvoříme další složku, kterou pojmenujeme ‘slozka’. Do ní nahrajeme velké fotky, které chceme zmenšit. Jedinou věc si musíme ovšem nějak zjistit. A to je cesta z rootu webu. Dá se zjistit, když si vypíšeme proměnnou $_SERVER[‘SCRIP­T_FILENAME’].
Nyní ale k našemu scriptu. Nejdřív do něj napíšeme konfigurační nastavení:


<?php

$width = 250; /* šířka výsledné fotografie */
$path = "./slozka/"; /* umístění fotek od tohoto scriptu (adresář s fotkami musí být vnořený ve složce s tímto scriptem) */
$memory_limit = 12; /* max. kapacita serveru pro image funkce - liší se podle serveru */
$small = "small_"; /* název přidávaný k výsledné fotce */
$root = "/php/htdocs/www/tutorialy/tut2/"; /* cesta z rootu webu do složky, ve které je tento script - každý má tuto položku jinou, dle svého serveru */

?>
 

Dále projdeme zadanou složku a nascanujeme jí do pole s názvem $file, o co se stará funkce scandir();


<?php

       // nascanuje složku
        $scan = scandir($path);
       
        // projde složku a vytvoří pole s obrázky
        foreach($scan as $index => $value)
        {
              if($value != "." && $value != "..")
              {
                    $file[] = $value;
              }
        }

?>
 

Nyní už zbývá jen vytvořit cyklus, který projde pole, ve kterém je uložen název fotky v dané složce. Použijeme foreach.


<?php
foreach($file as $index => $value)
        {

/*
Zkontrolujeme, zda se jedná o fotografii ve formátu JPG a ne jiný soubor

*/

              if(eregi("\.jpg$",$value) || eregi("\.jpeg$",$value) || eregi("\.jpe$",$value))
              {
                    $src = $path.$value; // uložíme adresu fotky
                   
                    $size = getImageSize($src); // zjistíme velikost fotky
                   
                   

/*
Zkontrolujeme, zda není fotka, tak velká aby jí nezvládl server zpracovat
*/


$controll = $size[0] * $size[1] * 3;
$lim = $memory_limit * 1000 * 1000;
                   
                    if($lim > $controll)
                    {
                      // pokud jí server umí zpracovat
                            // spočítáme poměr stran
                          $pomer = $size[1] / $size[0];
                          $height = $pomer * $width;
                       
/* Vytvoříme plátno a načteme obrázek do proměnné */  
                          $new = imageCreateTrueColor($width,$height);
                          $image = imageCreateFromJpeg($src);                  

/* Zmenšíme a vložíme obrázek do plátna */
                         
                          imageCopyResized($new, $image, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); // vloží obrázek do plátna;


/* Načteme cestu z rootu webu do proměnných */
                         
                          $paths = $path;
                          $roots = $root;

/* Upravíme si cestu k fotce tak, aby vyhovovala funkci ImageJpeg(); */    
                     
                          while(eregi("^\./",$paths)) $paths = eregi_replace("^\./","",$paths);
                          while(eregi("/$",$paths)) $paths = eregi_replace("/$","",$paths);
                          while(eregi("^/",$paths)) $paths = eregi_replace("^/","",$paths);
                          while(eregi("/$",$roots)) $roots = eregi_replace("/$","",$roots);
                         
                                             
/*
Uložíme fotku do složky s názvem ‘small_PUVODNI_NAZEV.jpg‘
*/

 imageJpeg($new,$roots."/".$path."/".$small.$value,80);
                          imageDestroy($new);
                          imageDestroy($image);
                         
                    }
              }
        }

?>
 

Jen pro ty co by nepochopili, tyto tři bloky PHP kodu vložíme za sebou do jednoho PHP souboru :) Jinak doufám, že se vám tutoriál líbí, a že jste se něco málo přiučili!



Autor článku: wayet | Vytisknout článek | Odeslat e-mailem

Hodnocení: 6.3/10 (24 hlasováno)

Komentáře (5)
od: Pajah 03-04-2008 13:21:45
Tak Filda se dal na PHP? :-)
Ale jo, tenhle článek celkem jde. ;)

od: wayet 03-04-2008 14:37:36
Nee :-( to sem psal já proč je tam Filda?

od: Marek 03-04-2008 16:04:38
Je to chyba v systému, večer opravíme

od: master2222 04-04-2008 18:03:53
Jeste by tady moha byt ukazka a bylo by to dokonale...

od: ZiZi 05-04-2008 17:51:13
se hodí, dík :-)

  Neregistrovaní uživatelé nemohou přidávat komentáře k článkům.