实现步骤:上传文件成功之后,打开文件,进行水印添加,存储覆盖原有文件,实现图片加水印功能
一、安装图像处理库
composer require topthink/think-image
二、使用方法
<?php
/**
*公共文件上传
* User: Hm
* Date: 2020/9/16
* Email: <2938039696@qq.com>
**/
declare (strict_types = 1);
namespace app\admin\controller;
use think\exception\ValidateException;
class Upload extends Base
{
/*
* 单文件上传+水印
* */
public function uploadImgWater(){
//判断是否是POST请求,如果是处理上传逻辑
if (request()->isPost()){
//接收文件上传类型
$namePath = request()->param('type');
//获取表单上传文件
$file = request()->file('file');
$upload_dir = '/'.$namePath; //组装文件保存目录
$suffix='jpg,jpeg,png,gif'; //文件格式
$size='3'; //文件大小
try {
//验证器验证上传的文件
validate(['file'=>[
//限制文件大小
'fileSize' => $size * 1024 * 1024,
//限制文件后缀
'fileExt' => 'jpg,jpeg,png,gif'
]],[
'file.fileSize' => '上传的文件大小不能超过'.$size.'M',
'file.fileExt' => '请上传后缀为:'.$suffix.'的文件'
])->check(['file'=>$file]);
//上传文件到本地服务器
$filename = \think\facade\Filesystem::disk('public')->putFile($upload_dir, $file);
if ($filename){
$src = '/uploads/'.str_replace('\\', '/', $filename);
// 水印图片路径
$waterpath = public_path('uploads/').str_replace('\\', '/', $filename);
$image = \think\Image::open($waterpath);
// 给原图左上角添加水印并保存water_image.png
$image->water('./static/index/case/water.png',\think\Image::WATER_NORTHWEST,50)->save(public_path('uploads/').str_replace('\\', '/', $filename));
return json(['code'=>1,'msg'=>'上传成功','data'=>['src'=>$src]]);
}else{
return json(['code'=>0,'msg'=>'上传失败']);
}
}catch (ValidateException $e){
return json(['code'=>0,'msg'=>$e->getMessage()]);
}
}else{
return json(['code'=>0,'msg'=>'非法请求']);
}
}
}
?>