29-04-2008, 19:55
|
|
|
חבר מתאריך: 15.08.06
הודעות: 1,561
|
|
[מדריך קצר] הטמעת סימן בתמונות בצורה דינאמית (watermark)
דברים הדרושים להכנה:
- תמונה אותה נטמיע (עדיף תמונת gif או png עם רקע שקוף)
- שרת שתומך ב PHP עם ספרית GD מותקנת
- שרת שתומך בקבצי .htaccess ועליו מותקן mod_rewrite
- ידע יחסית בסיסי בPHP
אז מה הרעיון?
נשתמש במודול של השרת שעושה redirect אוטומטי לקבצים. נשתמש בו כך שכל קובץ תמונתי שיבוקש ע"י משתמש כלשהו יופנה לסקריפט PHP אשר יטמיע בתוכו את הסימן-מים.
1) ניצור תיקיה (/images) בה נאחסן את כל התמונות שאנו רוצים שהסקריפט יפעל עליהם.
2) ניצור (או נשנה) את הקובץ .htaccess שנמצא בתיקיה מעל התיקיה שיצרנו:
קוד:
RewriteEngine on
RewriteRule ^images/(.*)$ getImage.php?file=$1
הסבר:
כל בקשה לקובץ שנמצא תחת images יופנה לסקריפט בשם getImage.php כאשר נוסיף לו כפרמטר את שם הקובץ.
3) נכתוב את getImage.php:
קוד:
<?php
// getImage.php
if (!isset($_GET) || !isset($_GET['file']))
die;
$filename = 'images/' .
mysql_escape_string($_GET['file']);
if (!file_exists($filename))
die;
$img = imagecreatefromjpeg($filename);
$imgWidth = imagesx($img);
$imgHeight = imagesy($img);
$wm = imagecreatefromgif('wm.gif');
$wmWidth = imagesx($wm);
$wmHeight = imagesy($wm);
imagecopymerge($img, $wm, 0, $imgHeight - $wmHeight, 0, 0, $wmWidth, $wmHeight, 30);
header("Content-Type: image/jpeg");
imagejpeg($img);
imagedestroy($wm);
imagedestroy($img);
?>
הסקריפט בודק שהקובץ אכן קיים ומנסה לפתוח אותו. כמו כן הוא משתמש בקובץ wm.gif כסימן מים. הפונקציה imagecopymerge ממזגת בין שתי תמונות כאשר הפרמטר האחרון הוא ה opacity (אם נשים 0 אז הסימן מים לא יראה בכלל, אם נשים 100, אז הסימן מים לא יהיה שקוף בכלל).
הערה: הקוד הזה עובד רק על תמונות jpg והוא שם את הסימן בתחתית התמונה. עם קצת הבנה בסיסית אפשר לשנות את הקוד איך שנראה (בדיקת extension, שינוי המיקום, נתינת תמונת ERROR, וכו').
4) נעלה את 3 הקבצים לשרת (wm.gif, .htaccess, getImage.php) ונקווה לטוב.
אשמח להערות והארות. מקווה שעזרתי למישהו
_____________________________________
!!אזהרה!!
ההודעה עלולה להכיל שברי אגוזים ו/או איברי דגים כלשהם
!!אזהרה!!
|