網(wǎng)站首頁(yè) PHP其他 正文
php圖片壓縮可以通過GD庫(kù)來實(shí)現(xiàn)。以下是一個(gè)使用GD庫(kù)進(jìn)行圖片壓縮的示例代碼:
// 原始圖片路徑
$sourceImage = 'path/to/source/image.jpg';
// 壓縮后保存的路徑及文件名
$compressedImage = 'path/to/compressed/image.jpg';
// 壓縮后的圖片質(zhì)量(1-100,100為最高質(zhì)量)
$compressionQuality = 80;
// 獲取原始圖片的信息
$imageInfo = getimagesize($sourceImage);
$originalWidth = $imageInfo[0];
$originalHeight = $imageInfo[1];
// 創(chuàng)建一個(gè)空白畫布
$compressed = imagecreatetruecolor($originalWidth, $originalHeight);
// 根據(jù)原始圖片的格式創(chuàng)建一個(gè)新的圖片資源
if ($imageInfo['mime'] == 'image/jpeg' || $imageInfo['mime'] == 'image/pjpeg') {
$source = imagecreatefromjpeg($sourceImage);
} elseif ($imageInfo['mime'] == 'image/png' || $imageInfo['mime'] == 'image/x-png') {
$source = imagecreatefrompng($sourceImage);
}
// 將原始圖片復(fù)制到新的畫布上并進(jìn)行壓縮
imagecopyresampled($compressed, $source, 0, 0, 0, 0, $originalWidth, $originalHeight, $originalWidth, $originalHeight);
// 保存壓縮后的圖片
imagejpeg($compressed, $compressedImage, $compressionQuality);
// 釋放內(nèi)存
imagedestroy($compressed);
imagedestroy($source);
echo '圖片壓縮完成!';
PHP實(shí)現(xiàn)圖片壓縮同時(shí)保持清晰度
<?php
/**
* 圖片壓縮類:通過縮放來壓縮。
* 如果要保持源圖比例,把參數(shù)$percent保持為1即可。
* 即使原比例壓縮,也可大幅度縮小。數(shù)碼相機(jī)4M圖片。也可以縮為700KB左右。如果縮小比例,則體積會(huì)更小。
*
* 結(jié)果:可保存、可直接顯示。
*/
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 提供圖片名(可不帶擴(kuò)展名,用源圖擴(kuò)展名)用于保存。或不提供文件名直接顯示
*/
public function compressImg($saveName='')
{
$this->_openImage();
if(!empty($saveName)) $this->_saveImage($saveName); //保存
else $this->_showImage();
}
/**
* 內(nèi)部:打開圖片
*/
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();
}
/**
* 內(nèi)部:操作圖片
*/
private function _thumpImage()
{
$new_width = $this->imageinfo['width'] * $this->percent;
$new_height = $this->imageinfo['height'] * $this->percent;
$image_thump = imagecreatetruecolor($new_width,$new_height);
//將原圖復(fù)制帶圖片載體上面,并且按照一定比例壓縮,極大的保持了清晰度
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、可指定字符串不帶后綴的名稱,使用源圖擴(kuò)展名 。2、直接指定目標(biāo)圖片名帶擴(kuò)展名。
*/
private function _saveImage($dstImgName)
{
if(empty($dstImgName)) return false;
$allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目標(biāo)圖片名有后綴就用目標(biāo)圖片擴(kuò)展名 后綴,如果沒有,則用源圖的擴(kuò)展名
$dstExt = strrchr($dstImgName ,".");
$sourseExt = strrchr($this->src ,".");
if(!empty($dstExt)) $dstExt =strtolower($dstExt);
if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
//有指定目標(biāo)名擴(kuò)展名
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);
}
}
$source = '123.png';//原圖片名稱
$dst_img = 'text.png';//壓縮后圖片的名稱
$percent = 1; #原圖壓縮,不縮放,但體積大大降低
$image = (new imgcompress($source,$percent))->compressImg($dst_img);
批量壓縮
/**
* 掃描文件夾
* @param $path_dir
*/
function scan_dir($path_dir){
if (!is_dir($path_dir)) return false;
$rs = scandir($path_dir);
foreach ($rs as $k => $v){
if ($v === '.' || $v === '..') continue;
$path = $path_dir.rtrim($v,'/');
if (is_file($path)){
$image = (new imgcompress($path, 1))->compressImg($path);
log_msg("{$path}---");
continue;
}
if (is_dir($path."/")) scan_dir($path."/");
}
}
function log_msg($msg){
echo "$msg\r\n";
}
/*開始掃描文件夾*/
$source_dir = "./testimages/";//目標(biāo)路徑
scan_dir($source_dir);
原文鏈接:https://blog.csdn.net/qq_23564667/article/details/132478006
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-09-24 基于Pytorch實(shí)現(xiàn)邏輯回歸_python
- 2023-10-16 Element UI日期組件-選擇月份具體到當(dāng)月最后一天
- 2022-12-29 Python?PyQt5實(shí)現(xiàn)拖拽與剪貼板功能詳解_python
- 2022-03-08 基于Redis實(shí)現(xiàn)阻塞隊(duì)列的方式_Redis
- 2023-02-09 C++命名空間?缺省參數(shù)?const總結(jié)?引用總結(jié)?內(nèi)聯(lián)函數(shù)?auto關(guān)鍵字詳解_C 語(yǔ)言
- 2022-05-20 Python?文件處理之open()函數(shù)_python
- 2022-10-20 Flutter實(shí)現(xiàn)矩形取色器的封裝_Android
- 2023-04-19 C/C++實(shí)現(xiàn)內(nèi)存泄漏檢測(cè)詳解_C 語(yǔ)言
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支