圖片上傳,最簡單的就是,
方法一:
修改上傳限制,不讓上傳大于多少多少的圖片
改一下size即可,默認單位是B換算成M還需要除以兩次1024
方法二:
對上傳的圖片進行縮放,此辦法網上找了不少的代碼,最終整理得來的
圖片壓縮是等比例壓縮的,可以修改比例,大于0,如果是1的話,就不壓縮了,具體比例,可以按照自己實際的需求去調整。
/*** 通用圖片上傳接口* @return \think\response\Json*/public function upload(){$file = $this->request->file("file");$pic_size = $file->info['size'];//需要修改file底層文件$config = ['size' => 2097152000,'ext' => 'jpg,gif,png,bmp'];$upload_path = str_replace('\\', '/', ROOT_PATH . 'public/uploads');$save_path = '/public/uploads/';$info = $file->validate($config)->move($upload_path);$pic = str_replace('\\', '/', $save_path . $info->getSaveName());$source = ROOT_PATH.$pic;//圖片保存路徑if($pic_size >2097152){//進行壓縮$dst_img = ROOT_PATH.$pic;//圖片新路徑,如果和原路徑一樣,就是直接壓縮的效果$percent = 0.5; #原圖壓縮,不縮放,但體積大大降低(new Imgcompress($source,$percent))->compressImg($dst_img);$result = ['error' => 0,'url' => $pic];}else{if ($info) {$result = ['error' => 0,'url' => str_replace('\\', '/', $save_path . $info->getSaveName())];} else {$result = ['error' => 1,'message' => $file->getError()];}}return json($result);}
另外圖片修改類
<?php
namespace app\common\Imgcompress;/*** 圖片壓縮類:通過縮放來壓縮。
* 如果要保持源圖比例,把參數$percent保持為1即可。
* 即使原比例壓縮,也可大幅度縮小。數碼相機4M圖片。也可以縮為700KB左右。如果縮小比例,則體積會更小。* * 結果:可保存、可直接顯示。*/
class Imgcompress{private $src;private $image;private $imageinfo;private $percent = 0.5;/*** 圖片壓縮* @param $src 源圖* @param float $percent 壓縮比例*/public function __construct($src, $percent=1){$this->src = $src;$this->percent = $percent;}/** 高清壓縮圖片* @param string $saveName 提供圖片名(可不帶擴展名,用源圖擴展名)用于保存。或不提供文件名直接顯示*/public function compressImg($saveName=''){$this->_openImage();if(!empty($saveName)) $this->_saveImage($saveName); //保存else $this->_showImage();}/*** 內部:打開圖片*/private function _openImage(){list($width, $height, $type, $attr) = getimagesize($this->src);$this->imageinfo = array('width'=>$width,'height'=>$height,'type'=>image_type_to_extension($type,false),'attr'=>$attr);$fun = "imagecreatefrom".$this->imageinfo['type'];$this->image = $fun($this->src);$this->_thumpImage();}/*** 內部:操作圖片*/private function _thumpImage(){$new_width = $this->imageinfo['width'] * $this->percent;$new_height = $this->imageinfo['height'] * $this->percent;$image_thump = imagecreatetruecolor($new_width,$new_height);//將原圖復制帶圖片載體上面,并且按照一定比例壓縮,極大的保持了清晰度imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);imagedestroy($this->image);$this->image = $image_thump;}/*** 輸出圖片:保存圖片則用saveImage()*/private function _showImage(){header('Content-Type: image/'.$this->imageinfo['type']);$funcs = "image".$this->imageinfo['type'];$funcs($this->image);}/*** 保存圖片到硬盤:* @param string $dstImgName 1、可指定字符串不帶后綴的名稱,使用源圖擴展名 。2、直接指定目標圖片名帶擴展名。*/private function _saveImage($dstImgName){if(empty($dstImgName)) return false;$allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目標圖片名有后綴就用目標圖片擴展名 后綴,如果沒有,則用源圖的擴展名$dstExt = strrchr($dstImgName ,".");$sourseExt = strrchr($this->src ,".");if(!empty($dstExt)) $dstExt =strtolower($dstExt);if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);//有指定目標名擴展名if(!empty($dstExt) && in_array($dstExt,$allowImgs)){$dstName = $dstImgName;}elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){$dstName = $dstImgName.$sourseExt;}else{$dstName = $dstImgName.$this->imageinfo['type'];}$funcs = "image".$this->imageinfo['type'];$funcs($this->image,$dstName);}/*** 銷毀圖片*/public function __destruct(){//imagedestroy($this->image);}}
?>
因為是在原來圖片上修改壓縮的,所以后面的銷毀圖片就注釋掉了
還有file文件,需要修改成public屬性,因為上面需要獲取文件大小,然后去進行后續的判斷
路徑
??