TP5上傳圖片壓縮尺寸

圖片上傳,最簡單的就是,

方法一:

修改上傳限制,不讓上傳大于多少多少的圖片

改一下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屬性,因為上面需要獲取文件大小,然后去進行后續的判斷

路徑

??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210273.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在 Azure Cosmos DB 中使用緩存

Cosmos DB 是微軟在 Azure 云中發布的新 NoSQL 數據庫。與關系數據庫不同&#xff0c;Cosmos DB 是一種托管數據庫服務&#xff0c;因此具有可擴展性&#xff0c;因此在高事務性 .NET 和 .NET Core 應用程序中很受歡迎。 但是&#xff0c;使用 Cosmos DB 時&#xff0c;您需要…

pytorch 鉤子函數hook 詳解及實戰

文章目錄 1. 介紹1.1 pytorch hook 函數種類1.2 pytorch hook 種類1.3 hook的執行順序2. torch.Tensor.register_hook()2.1 功能2.2 語法2.3 案例3. nn.Module.register_forward_pre_hook3.1 功能3.2 語法3.3 案例4. nn

連通分量提取

圖像形態學操作中的提取連通分量是一種用于分離圖像中相互連接的像素區域的技術。這些像素區域通常代表著圖像中的不同物體、目標或者區域。連通分量提取通常用于圖像分割、對象識別、特征提取等領域。 原理&#xff1a; ??連通分量提取基于圖像中像素的連接性。在這個過程中…

ECharts標題字體大小自適應變化

我們在做自適應Echarts的時候,字體大小在配置項里是如下配置的, title 標題組件,包含主標題和副標題。 以下是常用的對標題的設置: title:{//設置圖表的標題text:"主標題",link:"baidu.com", //設置標題超鏈接target:"self",

HCIP —— BGP 基礎 (下)

BGP 的狀態機 --- 建立對等體之間的TCP會話&#xff1a;指定建立對等體的對象 六種狀態機 Idle狀態 Idle 等待狀態&#xff08;相當于OSPF的down狀態&#xff09;--- 采用TCP單播建鄰 Idle 狀態下&#xff0c;啟動BGP協議后必須指定建立對等體的目標之后&#xff0c;才能進入…

yaml工作常用語法總結

文章目錄 yaml中的| 符號 和 > 符號yaml中的 - 符號工作中常遇到的問題- 命令行中有冒號加空格&#xff0c;導致yaml解析報錯 yaml中的| 符號 和 > 符號 在 YAML 中&#xff0c;| 符號表示標量塊&#xff08;Scalar Block&#xff09;的開始。它用于表示長文本塊或保持多…

代碼隨想錄算法訓練營第四十六天| 139 單詞拆分

目錄 139 單詞拆分 139 單詞拆分 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool>dp(s.size() 1);//長度為i的字符串時能否成功拆分unordered_set<string>set(wordDict.begin(),wordDict.end());dp[0] t…

數據結構 | 查漏補缺之哈希表、最短路徑、二叉樹與森林的轉換

哈希表是什么&#xff1f; 或者說 設圖采用鄰接表的存儲結構&#xff0c;寫對圖的刪除頂點和刪除邊的算法步驟 刪除邊 刪除點 最短路徑問題 參考博文 迪杰斯特拉(Dijkstra)算法_dijkstra算法-CSDN博客 Dijkstra(迪杰斯特拉&#xff09;算法 定義一個點為源點&#xff0c;算源…

5G+AI開花結果,助力智慧安檢落地

“請帶包的乘客過機安檢&#xff01;”&#xff0c;深圳地鐵、騰訊共同打造的5GAI智慧安檢輔助系統亮相福田樞紐站&#xff0c;進一步解放了人力&#xff0c;提高安檢效率&#xff0c;為交通安全保駕護航&#xff0c;讓智慧出行成為現實。 傳統的安檢設備均為人工肉眼辨識&…

java面試題匯總-目錄

堅持記錄和總結一些面試過程中遇到的面試題&#xff0c;以及總結出自己的回答技巧。不用死記硬背也能完整的回答出來。會持續更新&#xff0c;歡迎提出問題和疑問&#xff0c;大家一起總結經驗。 1.Hashmap、Hashtable、ConcurrentHashMap原理 2.談談sql優化-mysql 3.ArrayList…

2023年9月13日 Go生態洞察:WASI支持在Go中的實現

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

21、命令執行

文章目錄 一、命令執行概述1.1 基本定義1.2 原理1.3 兩個條件1.4 命令執行漏洞產生的原因1.5 管道符號和通用命令符 二、遠程命令執行2.1 遠程命令執行相關函數2.2 遠程命令執行漏洞的利用 三、系統命令執行3.1 相關函數3.2 系統命令執行漏洞利用 四、命令執行漏洞防御 一、命令…

Vue筆記(三)深入組件

組件注冊 組件注冊有兩種方式&#xff1a; 全局注冊 可以使用Vue應用實例的.component()方法&#xff0c;讓組件在當前Vue應用中全局可用&#xff0c;.component()方法可以被鏈式調用。全局注冊的組件可以在此應用的任意組件的模版中使用。import { createApp } from vue imp…

阿里云生態離線數倉

1. 大數據開發治理平臺 DataWorks 功能齊全&#xff1a;10多年大數據建設沉淀完整的平臺&#xff0c;覆蓋數據開發治理的全生命周期 簡單易用&#xff1a;全圖形化界面&#xff0c;SQL為主的數據開發方式 安全穩定&#xff1a;雙11日千萬級任務穩定調度&#x…

一:C語言常見概念

一&#xff1a;C語言常見概念 1.認識C語言&#xff1a; ? C語言是人和計算機交流的語言 ? C語言是一門面向過程的語言&#xff0c;而C&#xff0c;Java&#xff0c;Python等是一門面向對象的語言 ? 軟件開發&#xff08;項目&#xff09;&#xff1a;面向過程面向對象 …

maven下載安裝與配置

文章目錄 1. Maven下載2. 配置settings.xml2.1 指定Maven的本地倉庫2.2 配置阿里云提供的鏡像倉庫2.3 配置 Maven 工程的基礎 JDK 版本 3. 配置環境變量3.1 檢查 JAVA_HOME 配置是否正確3.2 配置 MAVEN_HOME3.3 配置PATH3.4 驗證 1. Maven下載 【Maven官網地址】 【Maven下載…

微服務架構下的分布式事務

系統軟件為了實現一定的業務&#xff0c;會將現實中的人、事、物進行抽象表示&#xff0c;并將其映射為系統中的模型。 業務模型大致可以按以下來構建&#xff1a; 1、定義系統中應該存在哪些實體、實體上有哪些屬性。 2、定義實體之間的各種拓撲關系&#xff0c;如從屬、嵌套…

2023五岳杯量子計算挑戰賽數學建模思路+模型+代碼+論文

賽題思路&#xff1a;12月6日晚開賽后第一時間更新&#xff0c;獲取見文末名片 “五岳杯”量子計算挑戰賽&#xff0c;是國內專業的量子計算大賽&#xff0c;也是玻色量子首次聯合移動云、南方科技大學共同發起的一場“企校聯名”的國際競賽&#xff0c;旨在深度融合“量子計算…

Python處理Excel文件并與數據庫匹配做拼接

Python處理Excel文件并與數據庫匹配做拼接 需求&#xff1a;Python處理Excel中數據并于數據庫交互匹配得到賬號信息等其他操作 Python實現 import os import pandas as pd import pymssql import warnings import time# 提取速率函數 def extract_broadband_speed(speed):if…

【外觀模式】SpringBoot集成mail發送郵件

前言 發送郵件功能&#xff0c;借鑒 剛果商城&#xff0c;根據文檔及項目代碼實現。整理總結便有了此文&#xff0c;文章有不對的點&#xff0c;請聯系博主指出&#xff0c;請多多點贊收藏&#xff0c;您的支持是我最大的動力~ 發送郵件功能主要借助 mail、freemarker以及rocke…