
Новичок
Профиль
Группа: Участник
Сообщений: 17
Регистрация: 28.8.2005
Репутация: нет Всего: нет
|
предпологается,что в директорррии с этими файлами лежит файл водяного знака... mark.gif и дефолтная картинка image.jpg Код | <? //watermark.php function LoadGif ($imgname) { $im = @imagecreatefromgif ($imgname); /* попытка открыть */ if (!$im) { /* See if it failed */ $im = imagecreate (150, 30); /* создание пустого изображения */ $bgc = imagecolorallocate ($im, 255, 255, 255); $tc = imagecolorallocate ($im, 0, 0, 0); imagefilledrectangle ($im, 0, 0, 150, 30, $bgc); /* вывод errmsg */ imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc); } return $im; } function LoadPNG ($imgname) { $im = @imagecreatefrompng ($imgname); /* попытка открыть */ if (!$im) { /* проверить, удачно ли */ $im = imagecreate (150, 30); /* создать пустое изображение */ $bgc = imagecolorallocate ($im, 255, 255, 255); $tc = imagecolorallocate ($im, 0, 0, 0); imagefilledrectangle ($im, 0, 0, 150, 30, $bgc); /* вывести errmsg */ imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc); } return $im; } function LoadJpeg ($imgname) { $im = @imagecreatefromjpeg ($imgname); /* попытка открыть */ if (!$im) { /* проверить, удачно ли */ $im = imagecreate (150, 30); /* создать пустое изображение */ $bgc = imagecolorallocate ($im, 255, 255, 255); $tc = imagecolorallocate ($im, 0, 0, 0); imagefilledrectangle ($im, 0, 0, 150, 30, $bgc); /* вывести errmsg */ imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc); } return $im; }
$imageURL = 'image.jpg';
if ( !empty($_GET['imurl']) ) { $imageURL = $_GET['imurl']; }
$image = null; $size = getimagesize($imageURL); switch ( $size[2] ) { case 1: $image = LoadGif($imageURL); break; case 2: $image = LoadJpeg($imageURL); break; case 3: $image = LoadPNG($imageURL); break; default: $image = LoadJpeg('image.jpg'); break; }
$watermarkURL = 'mark.gif';
if ( !empty($_GET['wmurl']) ) { $watermarkURL = $_GET['wmurl']; }
$watermark = null; $size = getimagesize($watermarkURL); switch ( $size[2] ) { case 1: $watermark = LoadGif($watermarkURL); break; case 2: $watermark = LoadJpeg($watermarkURL); break; case 3: $watermark = LoadPNG($watermarkURL); break; default: $watermark = LoadGif('mark.gif'); break; }
$imageWidth = imagesx($image); $imageHeight = imagesy($image);
$watermarkWidth = imagesx($watermark); $watermarkHeight = imagesy($watermark);
$new = imagecreatetruecolor($imageWidth, $imageHeight);
for ( $j = 0; $j < $imageHeight; $j++ ) { for ( $i = 0; $i < $imageWidth; $i++ ) { $rgb = imagecolorsforindex($image, imagecolorat($image, $i, $j)); if ( $j < $watermarkHeight && $i < $watermarkWidth ) { $rgb2 = imagecolorsforindex($watermark, imagecolorat($watermark, $i, $j)); if ( $rgb2['alpha'] != 127 ) { $rgb['red'] = (INT)(($rgb['red'] + $rgb2['red']) / 2); $rgb['green'] = (INT)(($rgb['green'] + $rgb2['green']) / 2); $rgb['blue'] = (INT)(($rgb['blue'] + $rgb2['blue']) / 2); } } $ind = imagecolorexact($new, $rgb['red'], $rgb['green'], $rgb['blue']); if ( $ind < 1 ) { $ind = imagecolorallocate($new, $rgb['red'], $rgb['green'], $rgb['blue']); if ( $ind < 1 ) { $ind = imagecolorclosest($new, $rgb['red'], $rgb['green'], $rgb['blue']); } } imagesetpixel($new, $i, $j, $ind); }
} header ("Content-type: image/jpeg"); imagejpeg($new,"", 80);
?>
|
Код | //index.php <html> <head> <title>Watermark test</title> </head> <body> <form action="" method="GET"> Image URL (*.gif, *.jpg, *.png)<input name="imurl" value="<?echo (!empty($_GET['imurl']))?$_GET['imurl']:'';?>"><br> Watermark URL (*.gif, *.jpg, *.png)<input name="wmurl" value="<?echo (!empty($_GET['wmurl']))?$_GET['wmurl']:'';?>"><br> <input type="submit" name="show" value="Test!"><br> *You can leave this fields blank(one... or another... or both :)). </form> <image src="watermark.php?<?echo (!empty($_GET['imurl']))?'imurl='.$_GET['imurl']:''; echo (!empty($_GET['wmurl']))?'wmurl='.$_GET['wmurl']:'';?>"> </body> </html>
|
писал давно... тестировать лень... но когда-то работало... алгоритм наложения можно поменять....
|