增加平铺水印支持

This commit is contained in:
Wisp X
2022-01-18 21:54:55 +08:00
parent 83bee48279
commit 526e32a5f0
3 changed files with 38 additions and 13 deletions
+3
View File
@@ -19,6 +19,9 @@ final class FontOption
/** @var string 水印位置 */
const Position = 'position';
/** @var string 旋转角度 */
const Angle = 'angle';
/** @var string X轴偏移量 */
const X = 'x';
+32 -11
View File
@@ -210,24 +210,45 @@ class ImageService
$options = collect($configs->get("drivers")[$driver]);
$image = InterventionImage::make($image);
$position = $options->get(FontOption::Position, 'top-right');
if ($driver === 'font') {
$text = $options->get(FontOption::Text, Utils::config(ConfigKey::SiteName));
$font = new Font(urldecode($text));
$font->valign('top');
$font->file($options->get(FontOption::Font));
$font->size($options->get(FontOption::Size, 50));
$font->color($options->get(FontOption::Color)); // 十六禁止 or rgba
$font->valign('top')
->file($options->get(FontOption::Font))
->size($options->get(FontOption::Size, 50))
->angle($options->get(FontOption::Angle, 0))
->color($options->get(FontOption::Color, '000000')); // 十六进制 or rgba
$box = $font->getBoxSize();
$font->text($text);
$manager = new ImageManager();
$canvas = $manager->canvas($box['width'], $box['height']);
$font->applyToImage($canvas);
$image->insert(
$manager->make($canvas),
$options->get(FontOption::Position, 'top-right'),
$options->get(FontOption::X, 0),
$options->get(FontOption::Y, 0),
);
// 原图宽高
$imageWidth = $image->width();
$imageHeight = $image->height();
// 水印画布宽高
$canvasWidth = $canvas->width();
$canvasHeight = $canvas->height();
$offsetX = $options->get(FontOption::X, 0);
$offsetY = $options->get(FontOption::Y, 0);
if ($position === 'tiled') {
// 平铺水印
for ($x = 0; $x < $imageWidth; $x++) {
for ($y = 0; $y < $imageHeight; $y++) {
$image->text($text, $x, $y, fn (Font &$f) => $f = $font);
$y += $canvasHeight + $offsetY;
}
$x += $canvasWidth + $offsetX;
}
} else {
$font->applyToImage($canvas);
$image->insert($manager->make($canvas), $position, $offsetX, $offsetY);
}
}
if ($driver === 'image') {
+3 -2
View File
@@ -55,11 +55,12 @@ class DatabaseSeeder extends Seeder
'font' => [
FontOption::Text => 'Lsky Pro',
FontOption::Position => 'top-right',
FontOption::Angle => 0,
FontOption::Size => 50,
FontOption::Font => '',
FontOption::Color => '#000000',
FontOption::X => 0,
FontOption::Y => 0,
FontOption::X => 10,
FontOption::Y => 10,
],
'image' => [
// TODO