WaterMark путем добавления черного подвала к изображению
Делаю watermark. Возникла проблема. Бьюсь, но пока не получается.
Нужно к изображению (jpeg), снизу, добавить черный прямоугольник высотой 20px и длинной такой же как и изображение. И шрифтом Tahoma сделать двухстрочную надпись белым цветом в центре этого церного прямоугольника.
Буду благодарен если кто поможет. С изображениями раньше не работал практически. Темный лес для меня.
Вот что сделал. А как делать надписи, да еще и шрифтом, и как склеить изображения - хз (
Код:
$im = ImageCreate(500, 20);
ImageFilledRectangle($im, 1, 1, 500, 20, '000000' );
header ("Content-type: image/jpeg");
imagejpeg ($im);
ImageFilledRectangle($im, 1, 1, 500, 20, '000000' );
header ("Content-type: image/jpeg");
imagejpeg ($im);
UPD. Задачу решил. Но встала новая проблема: нужно не накладывать одно изображение на другое, а именно склеивать. Это реально вообще?
http://ru.php.net/manual/en/function.imagecreatetruecolor.php где его высоту задаете уже с учетом 20 пикселей, затем также просто накладываете одно изображение и второе, задавая им соответствующие координаты. Ничего сложного.
Ну дык в чем проблема? Создаете новое изображение (пустое) через
Код:
function hex_to_rgb($hex) {
// remove '#'
if(substr($hex,0,1) == '#')
$hex = substr($hex,1) ;
// expand short form ('fff') color to long form ('ffffff')
if(strlen($hex) == 3) {
$hex = substr($hex,0,1) . substr($hex,0,1) .
substr($hex,1,1) . substr($hex,1,1) .
substr($hex,2,1) . substr($hex,2,1) ;
}
if(strlen($hex) != 6)
fatal_error('Error: Invalid color "'.$hex.'"') ;
// convert from hexidecimal number systems
$rgb['red'] = hexdec(substr($hex,0,2)) ;
$rgb['green'] = hexdec(substr($hex,2,2)) ;
$rgb['blue'] = hexdec(substr($hex,4,2)) ;
return $rgb ;
}
function addwatermark($file, $params)
{
list($fwidth, $fheight, $ftype, $fattr)=getimagesize($file);
$s_end_buffer_size = 4096 ;
$font_file = "tahoma.ttf";
$font_color="000000";
$font_size = "10";
// create and measure the text
$font_rgb = hex_to_rgb($font_color) ;
$box = @ImageTTFBBox($font_size,0,$font_file,$text) ;
$text_width = abs($box[2]-$box[0]);
$text_height = abs($box[5]-$box[3]);
$image = ImageCreate($fwidth, 20);
$background = ImageColorAllocate($image,0,0,0);
$text_color = ImageColorAllocate($image,255,255,255);
imagettftext($image, $font_size, 0, 5, 15, $text_color, $font_file, $params['text1']);
$paddingRight = $fwidth - strlen($params['text2'])*6.5 - 10;
imagettftext($image, $font_size, 0, $paddingRight, 15, $text_color, $font_file, $params['text2']);
// Для наложения используется ImageAlphaBlending
$photoImage = ImageCreateFromJPEG($file);
ImageAlphaBlending($photoImage, true);
$logoImage = $image;
$logoW = ImageSX($logoImage);
$logoH = ImageSY($logoImage);
$yheight = $fheight - 20;
imagecopymerge($photoImage, $logoImage, 0, $yheight, 0, 0, $logoW, $logoH, 100);
ImageJPEG($photoImage, $file, 90);
ImageDestroy($photoImage);
ImageDestroy($logoImage);
}
// remove '#'
if(substr($hex,0,1) == '#')
$hex = substr($hex,1) ;
// expand short form ('fff') color to long form ('ffffff')
if(strlen($hex) == 3) {
$hex = substr($hex,0,1) . substr($hex,0,1) .
substr($hex,1,1) . substr($hex,1,1) .
substr($hex,2,1) . substr($hex,2,1) ;
}
if(strlen($hex) != 6)
fatal_error('Error: Invalid color "'.$hex.'"') ;
// convert from hexidecimal number systems
$rgb['red'] = hexdec(substr($hex,0,2)) ;
$rgb['green'] = hexdec(substr($hex,2,2)) ;
$rgb['blue'] = hexdec(substr($hex,4,2)) ;
return $rgb ;
}
function addwatermark($file, $params)
{
list($fwidth, $fheight, $ftype, $fattr)=getimagesize($file);
$s_end_buffer_size = 4096 ;
$font_file = "tahoma.ttf";
$font_color="000000";
$font_size = "10";
// create and measure the text
$font_rgb = hex_to_rgb($font_color) ;
$box = @ImageTTFBBox($font_size,0,$font_file,$text) ;
$text_width = abs($box[2]-$box[0]);
$text_height = abs($box[5]-$box[3]);
$image = ImageCreate($fwidth, 20);
$background = ImageColorAllocate($image,0,0,0);
$text_color = ImageColorAllocate($image,255,255,255);
imagettftext($image, $font_size, 0, 5, 15, $text_color, $font_file, $params['text1']);
$paddingRight = $fwidth - strlen($params['text2'])*6.5 - 10;
imagettftext($image, $font_size, 0, $paddingRight, 15, $text_color, $font_file, $params['text2']);
// Для наложения используется ImageAlphaBlending
$photoImage = ImageCreateFromJPEG($file);
ImageAlphaBlending($photoImage, true);
$logoImage = $image;
$logoW = ImageSX($logoImage);
$logoH = ImageSY($logoImage);
$yheight = $fheight - 20;
imagecopymerge($photoImage, $logoImage, 0, $yheight, 0, 0, $logoW, $logoH, 100);
ImageJPEG($photoImage, $file, 90);
ImageDestroy($photoImage);
ImageDestroy($logoImage);
}
Запускаем:
Код:
addwatermark('./images/source.jpg', array("text1"=>'Название сайта', "text2"=>"текст выравненный по правому краю, если нужно"));
Обратите внимание что файл tahoma.ttf (файл со шрифтом) лежит в корне со скриптом. Если кому нужно подработайте под себя.