PHP 要為圖片加上浮水印: 就是要將兩張圖合併在一起, 浮水印的圖片要蓋在上面.
現實狀況還會遇到原圖要縮圖後, 浮水印的圖片可能也要跟著縮圖, 這些部分再此就不寫了, 此部份縮圖可見此篇: PHP 對 透明背景的圖片 做縮圖
此篇只寫如何用 PHP GD 來合併圖片, 做浮水印功能.
PHP 為圖片加上浮水印 (含浮水印透明背景處理)
PHP 要為圖片加上浮水印 (兩張圖合併), 可用下述 Function:
<?php imagecopymerge(原圖Resource, 浮水印圖Resource, 浮水印要放的目標位置x, 浮水印要放的目標位置y, 0, 0, 浮水印圖的寬度, 浮水印圖的高度, alpha transparency); ?>
但是上述若浮水印的圖片是透明背景、透明底圖, 透明部分就會變成一片黑, 若遇到此狀況, 可改用下述 Function: (用筆刷的方式一行一行刷上去)
<?php // 浮水印的圖若是透明背景、透明底圖, 需要用下述兩行 imagesetbrush(原圖Resource, 浮水印圖Resource); imageline(原圖Resource, $watermark_pos_x, $watermark_pos_y, $watermark_pos_x, $watermark_pos_y, IMG_COLOR_BRUSHED); ?>
為圖片加上浮水印的程式 Function
<?php
function watermark($from_filename, $watermark_filename, $save_filename)
{
$allow_format = array('jpeg', 'png', 'gif');
$sub_name = $t = '';
// 原圖
$img_info = getimagesize($from_filename);
$width = $img_info['0'];
$height = $img_info['1'];
$mime = $img_info['mime'];
list($t, $sub_name) = explode('/', $mime);
if ($sub_name == 'jpg')
$sub_name = 'jpeg';
if (!in_array($sub_name, $allow_format))
return false;
$function_name = 'imagecreatefrom' . $sub_name;
$image = $function_name($from_filename);
// 浮水印
$img_info = getimagesize($watermark_filename);
$w_width = $img_info['0'];
$w_height = $img_info['1'];
$w_mime = $img_info['mime'];
list($t, $sub_name) = explode('/', $w_mime);
if (!in_array($sub_name, $allow_format))
return false;
$function_name = 'imagecreatefrom' . $sub_name;
$watermark = $function_name($watermark_filename);
$watermark_pos_x = $width - $w_width;
$watermark_pos_y = $height - $w_height;
// imagecopymerge($image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $w_width, $w_height, 100);
// 浮水印的圖若是透明背景、透明底圖, 需要用下述兩行
imagesetbrush($image, $watermark);
imageline($image, $watermark_pos_x, $watermark_pos_y, $watermark_pos_x, $watermark_pos_y, IMG_COLOR_BRUSHED);
return imagejpeg($image, $save_filename);
}
?>
使用範例: watermark('source.jpg', 'watermark.png', 's-and-w.jpg'); // s-and-w.jpg 就是合併完成的圖片