一、说明
图片不存oss,直接存到项目中;有些大图片占内存,需要压缩一下,并打水印。
二、步骤
1、composer 安装扩展
composer require topthink/think-image
2、使用的方法参数说明
参数 | 默认 | 描述 |
---|
pathname | 必填项 | 图像保存路径名称 | type | 默认与原图相同 | 图像类型 | quality | 80 | 图像质量 | interlace | true | 是否对JPEG类型图像设置隔行扫描 |
参数 | 默认 | 描述 |
---|
text | 不能为空 | 添加的文字 | font | 不能为空 | 字体文件路径 | size | 不能为空 | 字号,单位是像素 | color | #00000000 | 文字颜色 | locate | WATER_SOUTHEAST | 文字写入位置 | offset | 0 | 文字相对当前位置的偏移量 | angle | 0 | 文字倾斜角度 |
3、下载一个ttf字体文件
4、PHP代码
public function image() {
$files = array_keys(request()->file());
$file = request()->file($files[0]);
return self::inputResult($this->service->thumbImage($file, "水印的具体内容 \n\r2122-09-13 12:11:23"));
}
function thumbImage($file, $text) {
$info = $file->validate(['ext' => 'jpg,png,gif,jpeg'])->move('uploads');
if ($info) {
$rootPath = Env::get('root_path') . 'public';
$fileName = str_replace('\\','/',$info->getSaveName());
$relatePath = '/uploads/' . $fileName;
$savePath = $rootPath . $relatePath;
$ext = $info->getExtension();
$thumbFilename = date('His') . str_pad(mt_rand(1, 999999), 6, 0, STR_PAD_LEFT) . '.' . $ext;
$thumbRelateDir = '/uploads/' . date('Ymd') . '_thumb/';
$thumbRelatePath = $thumbRelateDir . $thumbFilename;
$thumbSaveDir = $rootPath . $thumbRelateDir;
$thumbSavePath = $thumbSaveDir . $thumbFilename;
if (!file_exists($thumbSaveDir)) {
mkdir ( $thumbSaveDir , 0777, true);
chmod($thumbSaveDir, 0777);
}
$image = Image::open($savePath);
$image->thumb(800, 800)
->text($text, $rootPath . '/data/AlibabaPuHuiTi-2-35-Thin.ttf', 15, '#ffffff', 9, -12)
->save($thumbSavePath);
$result = [
'origin_path' => $relatePath,
'thumb_path' => $thumbRelatePath
];
return $result;
} else {
throw new BaseException($file->getError());
}
}
|