využití knihovny gd

vkládání obrázků a textu do obrázků

pomocí gd knihovny se dají v php s obrázky dělat docela kouzla. obrázky se mohou vytvářet, přeformátovat, může se do nich vkládat text nebo jiné obrázky. já gd knihovnu využívám při generování fotek na tomto serveru v sekci fotogalerie

nejdříve tedy funkce pro načtení obrázku ze souboru. tyto funkce příjmou jako parametr název souboru. pokud se jedná o obrázek umístěný na internetu, může být jako parametr předáno funnkci jeho url. <?php
//nacteni souboru typu jpg
function LoadJpeg ($imgname) {
    
$im = @ImageCreateFromJPEG ($imgname); /* pokus o otevreni sounboru */
    
if (!$im) { /* podariklo se? */
        
$im ImageCreate (15030); /* Vytvoření prázdného obrázku */
        
$bgc ImageColorAllocate ($im255255255);
        
$tc  ImageColorAllocate ($im000);
        
ImageFilledRectangle ($im0015030$bgc);
        
/* Output an errmsg */
        
ImageString ($im155"image error"$tc);
    }
    return 
$im;
}

//nacteni souboru typu png
function LoadPNG ($imgname) {
    
$im = @ImageCreateFromPNG ($imgname); /* pokus o otevreni sounboru */
    
if (!$im) { /* podariklo se? */
        
$im ImageCreate (15030); /* Vytvoření prázdného obrázku */
        
$bgc ImageColorAllocate ($im255255255);
        
$tc  ImageColorAllocate ($im000);
        
ImageFilledRectangle ($im0015030$bgc);
        
/* Output an errmsg */
        
ImageString ($im155"image error"$tc);
    }
    return 
$im;
}
?>

funkce pro vložení textu a obrázku do fotky <?php
function Sign_Image($image)
{
  
$font="./arial.ttf";         // soubor s fontem
  
$text="http://drsny.net/"// text pro vlozeni do obrazku

  
$c1 imagecolorallocate ($image999999); //barva textu
  
$c2 imagecolorallocate ($image000);    //barva okraju
  
$c3 imagecolorallocate ($image2552550);//barva casu

  
$w=imageSX($image); //zjisteni sirky obrazku
  
$h=imageSY($image); //zjisteni vysky obrazku

  
$w=$w-105//pozice textu vertikalne
  
$h=$h-7;   //pozice textu horizontalne
  
$w1=$w-1;   $h1=$h-1;   $w2=$w+1;   $h2=$h+1// pozice okraju


// nejdrive se napise 4x text (budou z nej okraje) vzdy o jeden bod posunuty od mista, kde bude text
  
imagettftext ($image100$w1$h1$c1$font$text);
  
imagettftext ($image100$w2$h2$c1$font$text);
  
imagettftext ($image100$w1$h2$c1$font$text);
  
imagettftext ($image100$w2$h1$c1$font$text);
// vlozeni datumu a casu (aby bylo videt, ze to fakt ten obrazek vytvari)
  
$datum_cas=Date("d.m.Y H:i:s");
  
imagettftext ($image100212$c3$font$datum_cas);

//potom se pres tento text pozadi napise text popredi
  
imagettftext ($image100$w,  $h$c2$font$text);

// nacte se obrazek, ktery budeme vkladat do fotky
  
$sign=LoadPng("sign.png");

// a vlozime ho tam
  
$OB=imagecopy ($image$sign$w-20$h-12001616);

  return (
$image);
}
?>

funkce hlavicka() řekne prohlížeči , že má očekávat soubor určitého typu. (v našem případě image/png) <?php
function hlavicka($fname$ftype)
{
        
header("Content-disposition: filename=$fname");
    
header("Content-type: $ftype");
    
header("Expires: 0");
    
    
// doing some DOS-CRLF magic...
    
$client=getenv("HTTP_USER_AGENT");
    if(
ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
    {
        
$os $regs[1];
        
// this looks better under WinX
        
if (eregi("Win",$os))
            
$crlf="\r\n";
    }

?>

a když máme vytvořené funkce můžeme je použít :-) <?php
$fotka
=LoadJpeg("fotka.jpg");
$fotka=Sign_Image($fotka);
hlavicka("fotka.png","image/png");
imagePNG($fotka);
imagedestroy($fotka);
?>

jak to vypadá, se můžeš mrknout tady: gd demo

tento příklad si můžeš stáhnou a vyzkoušet na svém serveru drsny.zip

dokumentace k funkcím pro práci z obrázky je zde: http://cz.php.net/manual/en/ref.image.php