Добавляем на изображение водяной знак через PHP
В данном уроке демонстрируется техника работы с библиотекой PHP GD. Основная цель - добавить водяной знак на исходное изображение и генерировать результат в виде PNG картинки на сервере. В качестве дополнения будет формироваться рамка вокруг изображения и добавляться текст.
PHP
Code
if (! extension_loaded('gd')) { // Проверяем установку библиотеки GD
echo 'GD не установлено. Обратитесь к администратору вашего сайта!';
exit;
}
$sOrigImg = "pic1.jpg";
$sWmImg = "watermark.png";
$aImgInfo = getimagesize($sOrigImg);
$aWmImgInfo = getimagesize($sWmImg);
if (is_array($aImgInfo) && count($aImgInfo)) {
header ("Content-type: image/png");
$iSrcWidth = $aImgInfo[0];
$iSrcHeight = $aImgInfo[1];
$iFrameSize = 15;
$rImage = imagecreatetruecolor($iSrcWidth+$iFrameSize*2, $iSrcHeight+$iFrameSize*2); // Создаем новое изображение
$rSrcImage = imagecreatefromjpeg($sOrigImg); // Создаем исходное изображение
$aGrid[1] = imagecolorallocate($rImage, 130, 130, 130); // Определяем цвета для прямоугольной области
$aGrid[2] = imagecolorallocate($rImage, 150, 150, 150);
$aGrid[3] = imagecolorallocate($rImage, 170, 170, 170);
$aGrid[4] = imagecolorallocate($rImage, 190, 190, 190);
$aGrid[5] = imagecolorallocate($rImage, 210, 210, 210);
for ($i=1; $i<=5; $i++) { // Наша маленькая рамка будет содержать 5 прямоугольников для эмуляции градиента
imagefilledrectangle($rImage, $i*3, $i*3, ($iSrcWidth+$iFrameSize*2)-$i*3, ($iSrcHeight+$iFrameSize*2)-$i*3, $aGrid[$i]); // Рисуем заполненный прямоугольник
}
imagecopy($rImage, $rSrcImage, $iFrameSize, $iFrameSize, 0, 0, $iSrcWidth, $iSrcHeight); // Копируем полученное изображение на изображение-источник
if (is_array($aWmImgInfo) && count($aWmImgInfo)) {
$rWmImage = imagecreatefrompng($sWmImg); // Создаем изображение водяного знака
imagecopy($rImage, $rWmImage, $iSrcWidth-$aWmImgInfo[0], $iFrameSize, 0, 0, $aWmImgInfo[0], $aWmImgInfo[1]); // Копируем изображение водяного знака на изображение источник
}
$iTextColor = imagecolorallocate($rImage, 255, 255, 255); // Определяем цвет текста
$sIP = $_SERVER['REMOTE_ADDR']; // Определяем IP посетителя
imagestring($rImage, 5, $iFrameSize*2, $iFrameSize*2, " Адрес: Your IP adress: {$sIP}, {$sOrigImg} - ({$iSrcWidth} x {$iSrcHeight})", $iTextColor); // Рисуем текст
imagepng($rImage); // Выводим изображение
} else {
echo 'Image error!';
exit;
}
?>
echo 'GD не установлено. Обратитесь к администратору вашего сайта!';
exit;
}
$sOrigImg = "pic1.jpg";
$sWmImg = "watermark.png";
$aImgInfo = getimagesize($sOrigImg);
$aWmImgInfo = getimagesize($sWmImg);
if (is_array($aImgInfo) && count($aImgInfo)) {
header ("Content-type: image/png");
$iSrcWidth = $aImgInfo[0];
$iSrcHeight = $aImgInfo[1];
$iFrameSize = 15;
$rImage = imagecreatetruecolor($iSrcWidth+$iFrameSize*2, $iSrcHeight+$iFrameSize*2); // Создаем новое изображение
$rSrcImage = imagecreatefromjpeg($sOrigImg); // Создаем исходное изображение
$aGrid[1] = imagecolorallocate($rImage, 130, 130, 130); // Определяем цвета для прямоугольной области
$aGrid[2] = imagecolorallocate($rImage, 150, 150, 150);
$aGrid[3] = imagecolorallocate($rImage, 170, 170, 170);
$aGrid[4] = imagecolorallocate($rImage, 190, 190, 190);
$aGrid[5] = imagecolorallocate($rImage, 210, 210, 210);
for ($i=1; $i<=5; $i++) { // Наша маленькая рамка будет содержать 5 прямоугольников для эмуляции градиента
imagefilledrectangle($rImage, $i*3, $i*3, ($iSrcWidth+$iFrameSize*2)-$i*3, ($iSrcHeight+$iFrameSize*2)-$i*3, $aGrid[$i]); // Рисуем заполненный прямоугольник
}
imagecopy($rImage, $rSrcImage, $iFrameSize, $iFrameSize, 0, 0, $iSrcWidth, $iSrcHeight); // Копируем полученное изображение на изображение-источник
if (is_array($aWmImgInfo) && count($aWmImgInfo)) {
$rWmImage = imagecreatefrompng($sWmImg); // Создаем изображение водяного знака
imagecopy($rImage, $rWmImage, $iSrcWidth-$aWmImgInfo[0], $iFrameSize, 0, 0, $aWmImgInfo[0], $aWmImgInfo[1]); // Копируем изображение водяного знака на изображение источник
}
$iTextColor = imagecolorallocate($rImage, 255, 255, 255); // Определяем цвет текста
$sIP = $_SERVER['REMOTE_ADDR']; // Определяем IP посетителя
imagestring($rImage, 5, $iFrameSize*2, $iFrameSize*2, " Адрес: Your IP adress: {$sIP}, {$sOrigImg} - ({$iSrcWidth} x {$iSrcHeight})", $iTextColor); // Рисуем текст
imagepng($rImage); // Выводим изображение
} else {
echo 'Image error!';
exit;
}
?>
Вот что получилось:
Проверяем изображение источник. Затем подготавливаем новое изображение с помощью библиотеки GD и получаем исходное изображение. После чего рисуем рамку и копируем источник в новое изображение. Далее добавляем водяной знак (если он есть), формируем и добавляем текст. И выводим полученное изображение как PNG картинку.
-
FalleN -
3164 -
1 -
0
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...