yii2 Imagine 文字水印
时间: 2024-09-29 18:15:14 浏览: 65
在Yii 2框架中,使用Imagine库进行文本水印通常涉及以下步骤:
1. 首先,确保已经安装了`yiisoft/yii2-imagine`扩展。如果尚未安装,可以通过Composer运行`composer require yiisoft/yii2-imagine`。
2. 在配置文件(`config/web.php`或`common/config/main.php`)中启用Imagine组件,加入到'components'数组里:
```php
'imagine' => [
'class' => \Imagine\Gd\Imagine::className(),
],
```
或者使用GD2版本:
```php
'imagine' => [
'class' => \Imagine\Gd2\Imagine::className(),
],
```
3. 在应用中,创建一个函数来添加文本水印,例如:
```php
use Imagine\Image\Box;
use Imagine\Image\Point;
function addTextWatermark($imagePath, $watermarkText, $position = Point::create(10, 10), $font = 'path/to/font.ttf', $fontSize = 24, $opacity = 60)
{
// 加载原图
$sourceImage = \Yii::$app->imagine->open($imagePath);
// 创建文本
$textOptions = ['fill' => '#000', 'size' => $fontSize, 'font' => $font];
$textImage = \Imagine\Image\Font\Font::generate($sourceImage, $watermarkText, $textOptions);
// 将文本调整为适合大小并放置在指定位置
$textWidth = $textImage->getSize()->getWidth();
$textHeight = $textImage->getSize()->getHeight();
$textBox = Box::fitIn(new Box($textWidth, $textHeight), $position, $sourceImage->getSize());
// 创建带有透明度的水印
$watermark = new \Imagine\Image\Manipulator($textImage);
$watermark->opacity($opacity / 100);
// 应用水印到源图
$result = $sourceImage->paste($watermark, $textBox);
// 保存带有水印的图片
$newImagePath = 'path/to/save/watermarked_' . basename($imagePath);
$result->save($newImagePath, ['quality' => 90]);
return $newImagePath;
}
```
这个函数接受原始图片路径、水印文字、位置(默认左上角)、字体、字号和透明度等参数,返回新的水印图片路径。