diff --git a/app/Enums/Watermark/Mode.php b/app/Enums/Watermark/Mode.php new file mode 100644 index 00000000..1bab7a91 --- /dev/null +++ b/app/Enums/Watermark/Mode.php @@ -0,0 +1,9 @@ +filesystem()->read($image->pathname); + $configs = collect($image->group?->configs->get(GroupConfigKey::WatermarkConfigs)); + // 是否启用了水印功能,跳过gif和ico图片 - if ($image->group?->configs->get(GroupConfigKey::IsEnableWatermark) && ! in_array($image->extension, ['ico', 'gif'])) { - $configs = $image->group?->configs->get(GroupConfigKey::WatermarkConfigs); - $contents = $service->stickWatermark($contents, collect($configs))->encode()->getEncoded(); + if ( + $image->group?->configs->get(GroupConfigKey::IsEnableWatermark) && + $configs->get('mode', Mode::Overlay) == Mode::Dynamic && + ! in_array($image->extension, ['ico', 'gif']) + ) { + $contents = $service->stickWatermark($contents, $configs)->encode()->getEncoded(); } $cacheTtl = (int)$image->group?->configs->get(GroupConfigKey::ImageCacheTtl, 0); // 是否启用了缓存 diff --git a/app/Services/ImageService.php b/app/Services/ImageService.php index f8ce68b6..b40b24ed 100644 --- a/app/Services/ImageService.php +++ b/app/Services/ImageService.php @@ -25,6 +25,7 @@ use App\Enums\UserConfigKey; use App\Enums\UserStatus; use App\Enums\Watermark\FontOption; use App\Enums\Watermark\ImageOption; +use App\Enums\Watermark\Mode; use App\Exceptions\UploadException; use App\Models\Group; use App\Models\Image; @@ -150,6 +151,17 @@ class ImageService // 上传频率限制 $this->rateLimiter($configs, $request); + // 是否启用水印,覆盖原图片 + if ( + $configs->get(GroupConfigKey::IsEnableWatermark) && + collect($configs->get(GroupConfigKey::WatermarkConfigs))->get('mode', Mode::Overlay) == Mode::Overlay && + ! in_array($extension, ['ico', 'gif']) + ) { + $watermarkImage = $this->stickWatermark($file, collect($configs->get(GroupConfigKey::WatermarkConfigs))); + $watermarkImage->save(); + $file = new UploadedFile($watermarkImage->basePath(), $file->getClientOriginalName(), $file->getMimeType()); + } + $filename = $this->replacePathname( $configs->get(GroupConfigKey::PathNamingRule).'/'.$configs->get(GroupConfigKey::FileNamingRule), $file, ); diff --git a/config/convention.php b/config/convention.php index 5b41eaab..f449cd60 100644 --- a/config/convention.php +++ b/config/convention.php @@ -13,6 +13,7 @@ use App\Enums\Scan\TencentOption; use App\Enums\UserConfigKey; use App\Enums\Watermark\FontOption; use App\Enums\Watermark\ImageOption; +use App\Enums\Watermark\Mode; return [ 'app' => [ @@ -75,6 +76,7 @@ return [ ], ], GroupConfigKey::WatermarkConfigs => [ + 'mode' => Mode::Overlay, 'driver' => 'font', 'drivers' => [ 'font' => [ diff --git a/resources/views/admin/group/add.blade.php b/resources/views/admin/group/add.blade.php index fbe7c0a7..9b7293fe 100644 --- a/resources/views/admin/group/add.blade.php +++ b/resources/views/admin/group/add.blade.php @@ -204,9 +204,15 @@