图片压缩
我们经常会碰到一个问题,当用户发表动态上传图片或上传头像时,会选择手机里拍摄的照片。但是现在手机像素高,拍摄的照片动辄几M,我们如果把一个几M的图片存到服务器,后续的每次读取都会造成极差的用户体验,因此需要进行图片压缩处理。
- 前提条件,已安装ThinkPHP5的图像处理类库
如果没有安装,可用过Composer安装ThinkPHP5的图像处理类库:
运行:composer require topthink/think-image - 此处为接口上传图片,如果后台上传,类比操作即可
public function upload_img(){
$file = request()->file('image');
// dump($file);die;
// 将前端传过来的图片移动到项目目录下
$info = $file->move('./upload/mobile');
// dump($info);
if($info){
$file_edit = $info->getInfo();
// dump($file_edit);
// *我们这里通过图片的大小判断图片是否需要被压缩,当然数值可以更改为你需要的
if($file_edit['size'] > 100000){// 大于100K的图片进行处理
// 获取上传的图片,进行图片压缩
$image = \think\Image::open($info);
// 保存图片的路径处理
$date = date('Ymd');
$name = $info->getSavename();
$url_edit = './upload/mobile/'.$name;
// dump($url);die;
// 保存
// 默认会按比例保存,但是最大宽度、高度不超过thumb(400, 400)设定值
$img_edit = $image->thumb(400, 400)->save($url_edit);
$url = $name;
}else{
$url = $info->getSavename();
}
return $this->json_success('上传成功', $url);
}else{
// 上传失败获取错误信息
return $this->json_error('上传失败');
}
}
图片加水印
- 前提条件同上,已安装ThinkPHP5的图像处理类库
- 此处是后台上传图片加水印,如果接口上传,类比操作即可
public function add(){
if ($this->request->isPost()) {
$data = $this->request->post();
// 获取上传成功的图片路径
$roth = './upload/'.$data['photo'];
// 打开图片
$image = \think\Image::open($roth);
// 加图片水印,其中water.png是已经做好的水印图片放在根目录下
$image->water('./water.png',\think\Image::WATER_NORTHWEST)
->save($roth);
dump($data);die;
.....
}
}
更多ThinkPHP5.1关于图片处理操作可参考 点击跳转
网友评论