0

我正在尝试使用 CodeIgniters Image Manipulation 库在图像上放置多行水印,但我无法让它工作。

我正在设置文本

$config['source_image']= $newFile;
$str = '';
$str.='Px: ';
$str .= $config['width'];
$str .= "\r\n";
$str.=' | Qual: '.$config['quality'];
$str .= "\n";
$str.=' Size: '.$size;
$str .= "<br />";
$str.=' File: '.$fileName;  
$config['wm_text'] = $str;

ETC

文档中没有提到它,我在这里或谷歌上看不到任何关于它的信息。这并不重要——这只是一个个人项目,但我希望能够做到。

4

2 回答 2

1
function imagettfmultilinetext($image, $size, $angle, $x, $y, $color, $fontfile,  $text, $spacing=1)
{
    $lines=explode("\n",$text);
    for($i=0; $i< count($lines); $i++)
    {
        $newY=$y+($i * $size * $spacing);
        imagettftext($image, $size, $angle, $x, $newY, $color, $fontfile,  $lines[$i], $spacing);
    }
    return null;
}
于 2013-06-06T15:20:28.167 回答
1

如果您查看 system/libraries 中的 Image_lib.php 类,您会发现它使用了imagettftext函数:

imagettftext($src_img, $this->wm_font_size, 0, $x_shad, $y_shad, $drp_color, $this->wm_font_path, $this->wm_text);

$y_shad变量确定提供的整个文本的垂直偏移量。如果你想要换行符,你必须让你的文本变量是一个数组,然后使用一个 foreach 循环来增加每行的垂直偏移量(即数组中的每个项目)。

然而,要实现这一点,您必须彻底改变text_watermarkCI 的 Image_lib.php 类中的方法,因为您现在将文本变量作为数组处理,而不是简单的字符串。因此,实现这一目标并非不可能,而是相当乏味,因此很可能不值得付出努力……

于 2013-06-06T12:43:41.500 回答