Kérdés Vízjel készítése bővítmény nélkül

Több
2013 szept. 25 16:07 - 2013 szept. 25 16:13 #1 Írta: Laza
Laza létrehozta a témát: Vízjel készítése bővítménye nélkül
Sokan kérdezték már tőlem, ezért itt megosztom.
Ha csak egyszerűen szeretnél a képekre egy watermark (vízjel) tenni és nem szeretnél fizetős plugint vagy komponenst venni itt egy "egyszerű" megoldás, abban az esetben, ha a mod_rewrite a szerveren engedélyezve van.

Készíts Photoshoppal vagy bármilyen képszerkesztővel egy watermark.png file-t. (ajánlott méret 100x50 px, nagyobbat nem érdemes). Másold fel az images könyvtárba (szabadon választott is lehet, csak az útvonalat jegyezzük meg.).

Íme a watermark.php, amit az images könyvtárba érdemes tenni, de szabadon választott is lehet, csak az útvonalat jegyezzük meg.
<?php
//megmondja a szervernek, hogy ez egy kep lesz
header('Content-type: image/jpeg');
//kep utvonala
$img = $_GET['src'];
//watermark pozicioja
$p = $_GET['p']; if(!$p) $p = 'br';
/*
p erteket az alabbi listabol valaszthatjuk:
tl = top left
tc = top center
tr = top right
cl = center left
c = center of the image
cr = center right
bl = bottom left
bc = bottom center
br = bottom right
*/
//a vizjeles kep minosege
$q = $_GET['q'];
//ha nem adunk meg erteket, akkor 93 lesz
if(!$q || $q<0 || $q>100) $q = '93';
$filetype = substr($img,strlen($img)-4,4);
$filetype = strtolower($filetype);
//ha valakinek kellenek a gif-re vagy png-re is vegye ki a / / jelet az adott sor elol
//if($filetype == ".gif") $image = @imagecreatefromgif($img);
if($filetype == ".jpg") $image = @imagecreatefromjpeg($img);
//if($filetype == ".png") $image = @imagecreatefrompng($img);
if (!$image) die();
//az eredeti kep meretenek beolvasasa
$img_w = imagesx($image);
$img_h = imagesy($image);

/*ha a kep neveben van meret magadva akkor ezt kell hasznalni (vedd ki a / *  * / -ot)
if (eregi("490x490", $img)) {
    imagejpeg($image, null, $q); die();
} else {
    $watermark = @imagecreatefrompng('watermark.png');
} */

//ha meret limitet szeretnel pl. ha kep szelessege ($img_w) nagyobb mint 200px tegye ra, ha magassag akkor $img_w vagy mindketto ($img_w<"200" AND $img_h<"200")
if ($img_w < "200") {
    imagejpeg($image, null, $q); die();
} else {
    $watermark = @imagecreatefrompng('watermark.png');
} 

//vizjel kepenek merete
$w_w = imagesx($watermark);
$w_h = imagesy($watermark);
//pozicio es meretarany kiszamolasa
if($p == "tl") {
    $dest_x = 0;
    $dest_y = 0;
} elseif ($p == "tc") {
    $dest_x = ($img_w - $w_w)/2;
    $dest_y = 0;
} elseif ($p == "tr") {
    $dest_x = $img_w - $w_w;
    $dest_y = 0;
} elseif ($p == "cl") {
    $dest_x = 0;
    $dest_y = ($img_h - $w_h)/2;
} elseif ($p == "c") {
    $dest_x = ($img_w - $w_w)/2;
    $dest_y = ($img_h - $w_h)/2;
} elseif ($p == "cr") {
    $dest_x = $img_w - $w_w;
    $dest_y = ($img_h - $w_h)/2;
} elseif ($p == "bl") {
    $dest_x = 0;
    $dest_y = $img_h - $w_h;
} elseif ($p == "bc") {
    $dest_x = ($img_w - $w_w)/2;
    $dest_y = $img_h - $w_h;
} elseif ($p == "br") {
    $dest_x = $img_w - $w_w;
    $dest_y = $img_h - $w_h;
}
// a $dest_x és $dest_y a vegeleges helye a vizjelnek. Mivel alapban a jobb also sarokba teszi ezet itt kivontasm belole 10-et, hogy szebb legyen. Ha mashova rakod, akkor vagy le kell venni a -10 et (pl. bal felso akkor +10 kell), ha kozepre akkor le kell venni.
imagecopy($image, $watermark, $dest_x-10, $dest_y-10, 0, 0, $w_w, $w_h);
imagejpeg($image, null, $q);
imagedestroy($image);
imagedestroy($watermark);
?>

Ha ezzel megvolnánk, mentsük el a watermark.php filet a images mappába.

Következő lépés a .htaccess file módosítása (FIGYELEM! Csak akkor működik, ha a szerver támogatja a mod_rewrite-ot!), ha más helyre teszed, az útvonalat át kell írni!)
Ha nem csak jpg filerokra, akkor a (jpe?g) cseréld le (png|jpe?g|gif)-re. A p= határozza meg a vízjel pozícióját (lásd php file), a q= a minőséget.
RewriteRule (.*)images/(.*\.(jpe?g))$ $1images/watermark.php?p=br&q=90&src=$2

ezt a sor kell beszúrni a .htaccess file végére. Ha mindent jól csináltál a képeken megjelenik a watermark.png.

Ha valami probléma lenne írjatok.
Utolsó szerkesztés: 2013 szept. 25 16:13 Írta: Laza.
A következő felhasználók mondtak köszönetet: Isodius

Jelentkezz be, hogy te is részt vehess beszélgetésben!