PHP计算图片水印位置
作者: admin 发布时间:2025-08-28 15:54:38
通过这个方法,可以计算图片水印的位置:
/**
* 计算文本边界框
* @param string $text 文本
* @param string $fontFile 字体文件
* @param int $fontSize 字体大小
* @param int $fontAngle 字体角度
*
* @return array
*/
function calculate_text_box($text, $fontFile, $fontSize, $fontAngle)
{
$rect = imagettfbbox($fontSize, $fontAngle, $fontFile, $text);
if (empty($rect)) {
return [];
}
$minX = min([$rect[0], $rect[2], $rect[4], $rect[6]]);
$maxX = max([$rect[0], $rect[2], $rect[4], $rect[6]]);
$minY = min($rect[1], $rect[3], $rect[5], $rect[7]);
$maxY = max([$rect[1], $rect[3], $rect[5], $rect[7]]);
return [
'left' => abs($minX),
'top' => abs($minY),
'width' => $maxX - $minX,
'height' => $maxY - $minY,
'box' => $rect
];
}
现在给出使用示例:
$box = calculate_text_box('果果开发', $water_font, $water_font_size, $water_text_angle);
if (empty($box)) {
return false;
}
$x = 0;
$y = 0;
switch ($watermark_position) {
case 1:
// 左上角
$x = $box['left'];
$y = $box['top'];
break;
case 2:
// 右上角
$x = $width - $box['width'] + $box['left'];
$y = $box['top'];
break;
case 3:
// 左下角
$x = $box['left'];
$y = $box['top'] + $height - $box['height'];
break;
case 4:
// 右下角
$x = $width - $box['width'] + $box['left'];
$y = $height + $box['top'] - $box['height'];
break;
case 5:
// 中间
$x = $box['left'] + ($width / 2) - ($box['width'] / 2);
$y = $box['top'] + ($height / 2) - ($box['height'] / 2);
break;
}