完成显示水印功能;

This commit is contained in:
2024-02-18 15:41:14 +08:00
parent a59b124e70
commit aa9ae7f30b
8 changed files with 150 additions and 32 deletions

View File

@@ -0,0 +1,75 @@
<?php
namespace app\common\tools;
use Intervention\Image\Image as ImageImage;
use Intervention\Image\ImageManagerStatic;
use SplFileInfo;
use think\facade\App;
class Image
{
public static function addWatermark(SplFileInfo $file, $watermark_str = 'phpreturn.com'):ImageImage
{
// 检查文件是否是图片
if (!in_array($file->getExtension(), ['jpg', 'jpeg', 'png', 'gif'])) {
return false;
}
ImageManagerStatic::configure(['driver' => 'imagick']);
$img = ImageManagerStatic::make($file->getPathname());
$font_size = 20;
// 字体大小为宽度的 1/20
$font_size = $img->width() / 40;
$font_size = ceil($font_size);
$x = $img->width() - $font_size;
$y = $img->height() - $font_size;
$img->text($watermark_str, $x + $font_size * 0.05, $y + $font_size * 0.05, function ($font) use ($font_size) {
$font->file(App::getRootPath() . '/source/font/SourceHanSans-Normal.otf');
$font->size($font_size);
$font->color([0, 0, 0, 0.9]);
$font->align('right');
$font->valign('bottom');
});
$img->text($watermark_str, $x, $y, function ($font) use ($font_size) {
$font->file(App::getRootPath() . '/source/font/SourceHanSans-Normal.otf');
$font->size($font_size);
$font->color([255, 255, 255, 0.9]);
$font->align('right');
$font->valign('bottom');
});
return $img;
}
public static function handelWatermarkSave($src, $watermarked_file_save_name = null)
{
$src_file = new SplFileInfo($src);
$watermark_text = get_system_config('watermark_text', 'phpreturn.com');
$src_md5 = md5($src . $watermark_text);
if (!$watermarked_file_save_name) {
$watermarked_file_save_name = '/upload/watermark/' . $src_md5 . '.' . $src_file->getExtension();
}
$watermarked_file = App::getRootPath() . '/public' . $watermarked_file_save_name;
if (file_exists($watermarked_file)) {
return $watermarked_file_save_name;
}
if (!is_dir(dirname($watermarked_file))) {
mkdir(dirname($watermarked_file), 0777, true);
}
static::addWatermark($src_file, $watermark_text)->save($watermarked_file);
return $watermarked_file_save_name;
}
}