当前位置: 首页> 最新文章列表> 在PHP里怎么用imagestringup绘制带竖直文字的水印?实用教程来了

在PHP里怎么用imagestringup绘制带竖直文字的水印?实用教程来了

gitbox 2025-06-16

在PHP里怎么用imagestringup绘制带竖直文字的水印?实用教程来了

在处理图像时,水印是一种常见的保护版权或增强品牌识别度的方法。PHP为我们提供了许多图像处理的功能,其中 imagestringup() 是一个绘制竖直文字的函数,非常适合用来为图片添加竖直的水印。今天,我们就来讲解如何在PHP中利用 imagestringup() 函数绘制竖直的水印。

准备工作

首先,你需要确保你的PHP环境支持GD库,因为 imagestringup() 是GD库的一部分。GD库是PHP中常用的图像处理库,通常可以在PHP安装时选择启用。你可以通过以下代码来检查你的PHP是否启用了GD库:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'gd_info'</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"GD library is enabled!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"GD library is not enabled!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

如果你的环境没有启用GD库,你需要在 php.ini 文件中启用它,或者使用包管理器安装它。

基本步骤

绘制竖直水印的基本流程如下:

  1. 创建或加载目标图像。

  2. 设置水印文字、字体、颜色等。

  3. 使用 imagestringup() 绘制竖直的文字。

  4. 输出或保存处理后的图像。

代码示例

以下是一个完整的PHP代码示例,演示如何使用 imagestringup() 为图片添加竖直的水印文字。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 创建一个背景图像</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-number">800</span></span><span>, </span><span><span class="hljs-number">600</span></span><span>);

</span><span><span class="hljs-comment">// 选择背景颜色</span></span><span>
</span><span><span class="hljs-variable">$bg_color</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>, </span><span><span class="hljs-number">255</span></span><span>);  </span><span><span class="hljs-comment">// 白色背景</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagefill</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$bg_color</span></span><span>);

</span><span><span class="hljs-comment">// 加载字体文件</span></span><span>
</span><span><span class="hljs-variable">$font</span></span><span> = </span><span><span class="hljs-string">'./path/to/your/font.ttf'</span></span><span>; </span><span><span class="hljs-comment">// 请确保字体文件路径正确</span></span><span>

</span><span><span class="hljs-comment">// 设置水印文字内容</span></span><span>
</span><span><span class="hljs-variable">$watermark_text</span></span><span> = </span><span><span class="hljs-string">'Your Watermark'</span></span><span>;

</span><span><span class="hljs-comment">// 设置字体大小</span></span><span>
</span><span><span class="hljs-variable">$font_size</span></span><span> = </span><span><span class="hljs-number">20</span></span><span>;

</span><span><span class="hljs-comment">// 水印文字颜色(灰色)</span></span><span>
</span><span><span class="hljs-variable">$watermark_color</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorallocate</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);

</span><span><span class="hljs-comment">// 计算水印文字的宽高</span></span><span>
</span><span><span class="hljs-variable">$bbox</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagettfbbox</span></span><span>(</span><span><span class="hljs-variable">$font_size</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$font</span></span><span>, </span><span><span class="hljs-variable">$watermark_text</span></span><span>);
</span><span><span class="hljs-variable">$watermark_width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>] - </span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);
</span><span><span class="hljs-variable">$watermark_height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">abs</span></span><span>(</span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">5</span></span><span>] - </span><span><span class="hljs-variable">$bbox</span></span><span>[</span><span><span class="hljs-number">3</span></span><span>]);

</span><span><span class="hljs-comment">// 绘制竖直水印文字</span></span><span>
</span><span><span class="hljs-variable">$x</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>;  </span><span><span class="hljs-comment">// 设置水印文字的X坐标</span></span><span>
</span><span><span class="hljs-variable">$y</span></span><span> = </span><span><span class="hljs-number">100</span></span><span>; </span><span><span class="hljs-comment">// 设置水印文字的Y坐标</span></span><span>

</span><span><span class="hljs-comment">// 使用imagestringup绘制竖直的文字</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagestringup</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$watermark_text</span></span><span>, </span><span><span class="hljs-variable">$watermark_color</span></span><span>);

</span><span><span class="hljs-comment">// 输出图像</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);

</span><span><span class="hljs-comment">// 释放内存</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

代码解析

  1. 创建图像:

  2. 加载字体:

    • 在本示例中,我们使用了TrueType字体 (.ttf 文件),你需要提供字体文件的路径。字体的路径可以是相对路径或绝对路径。

  3. 设置水印文字:

    • 通过 imagestringup() 绘制竖直文字。这个函数的参数包括图像资源、字体大小、X和Y坐标、文字内容、以及文字的颜色。

  4. 计算水印文字的宽高:

    • 为了让水印在图像上对齐,我们计算了水印文字的宽度和高度。 imagettfbbox() 返回一个包含边界框的数组,计算出文字的尺寸。

  5. 绘制水印:

    • 最后,使用 imagestringup() 在指定的位置绘制竖直文字,文字颜色为灰色。

  6. 输出图像:

    • 使用 imagepng() 输出图像。此函数会将图像以PNG格式输出到浏览器。你可以根据需要输出其他格式,如 imagejpeg()imagegif()

  7. 释放内存:

    • 使用 imagedestroy() 释放图像资源,避免内存泄漏。

注意事项

  • 字体选择: 在Windows系统中,系统自带的字体通常是.ttf格式,而在Linux中,字体文件的路径可能会有所不同。确保字体路径正确,否则字体无法加载。

  • 水印位置: 你可以通过调整 xy 的坐标,来调整水印的位置。如果需要更多控制,可以在绘制文字前计算图像的尺寸,并动态调整水印的位置。

  • 性能优化: 当图像较大时,图像处理会消耗较多的资源。如果需要频繁处理大量图像,考虑使用缓存或异步处理。

总结

imagestringup() 是PHP GD库中一个非常实用的函数,专门用于绘制竖直的文字水印。在本教程中,我们详细介绍了如何创建一个竖直水印,包含了从图像创建到输出的完整步骤。希望你能通过这篇教程学会如何在PHP中轻松实现带竖直文字的水印效果,并能够在你的项目中灵活运用。