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 (150, 30); /* Vytvoření prázdného obrázku */
        
$bgc = ImageColorAllocate ($im, 255, 255, 255);
        
$tc  = ImageColorAllocate ($im, 0, 0, 0);
        
ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
        
/* Output an errmsg */
        
ImageString ($im, 1, 5, 5, "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 (150, 30); /* Vytvoření prázdného obrázku */
        
$bgc = ImageColorAllocate ($im, 255, 255, 255);
        
$tc  = ImageColorAllocate ($im, 0, 0, 0);
        
ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
        
/* Output an errmsg */
        
ImageString ($im, 1, 5, 5, "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 ($image, 99, 99, 99); //barva textu
  
$c2 = imagecolorallocate ($image, 0, 0, 0);    //barva okraju
  
$c3 = imagecolorallocate ($image, 255, 255, 0);//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 ($image, 10, 0, $w1, $h1, $c1, $font, $text);
  
imagettftext ($image, 10, 0, $w2, $h2, $c1, $font, $text);
  
imagettftext ($image, 10, 0, $w1, $h2, $c1, $font, $text);
  
imagettftext ($image, 10, 0, $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 ($image, 10, 0, 2, 12, $c3, $font, $datum_cas);

//potom se pres tento text pozadi napise text popredi
  
imagettftext ($image, 10, 0, $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-12, 0, 0, 16, 16);

  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