如果您有项目需要开发,可以联系我们
果果开发

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;
}