ThinkPHP图片缩略图处理和图片歪倒处理
  • 分类:经验分享
  • 发表:2020-02-26
  • 围观(4,433)
  • 评论(0)

使用ThinkPHP上传图片代码:

public function upload(){
// 获取上传文件表单字段名
$fileKey = array_keys(request()->file());
// 获取表单上传文件
$file = request()->file($fileKey['0']);
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->validate(['ext' => 'jpg,png,gif,jpeg'])->move( 'uploads');
if($info){
$result['code'] = 1;
$result['info'] = '图片上传成功!';
$path=str_replace('\\','/',$info->getSaveName());
$result['url'] = '/uploads/'. $path;
return $result;
}else{
// 上传失败获取错误信息
$result['code'] =0;
$result['info'] = '图片上传失败!';
$result['url'] = '';
return $result;
}
}

这样就可以了,这样有一个问题,就是上面的代码是按原图处理的,图片动辄1-2M,如果只需要缩略图,就需要增加两句:

$image = \think\Image::open($info->getfilename());

$image->thumb(500,500,\think\Image::THUMB_SCALING)->save($info->getfilename());

这个还需要安装ThinkPHP的Image插件,安装方法:在ThinkPHP主目录中执行代码:

composer require topthink/think-image

这个组件的官方文档:https://www.kancloud.cn/manual/thinkphp5_1/354123

这里有一个问题,在ThinkPHP5.1默认的组件文件中,没有getfilename()方法,需要自己增加,在/ThinkPHP/library/think/File.php文件中增加一个方法。

public function getfilename()
{
return $this->filename;
}

这个时候还有另一个问题,就是使用前台拍照的时候,上传到后台,可能会图片歪倒情况。

测试的是使用背摄竖版拍照上传后是-90度歪倒,前摄竖版拍照上传后是90度歪倒,反正就是不正。这个时候需要使用PHP的Exif插件,先安装PHP的Exit插件,在宝塔中方法是:软件商店->PHP->安装扩展->exif。

将上面的代码改为:

$exif = exif_read_data ($info->getfilename(),0,true);
$image = \think\Image::open($info->getfilename());
if(isset($exif['IFD0']['Orientation'])){

//判断角度翻转
switch($exif['IFD0']['Orientation']) {
case 8://转-90度
$image->thumb(500,500,\think\Image::THUMB_SCALING)->rotate(-90)->save($info->getfilename());
break;
case 3://翻转180
$image->thumb(500,500,\think\Image::THUMB_SCALING)->rotate(180)->save($info->getfilename());
break;
case 6://转90
$image->thumb(500,500,\think\Image::THUMB_SCALING)->rotate(90)->save($info->getfilename());
break;
}
}

至此完成。

 

Top