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