日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁(yè) PHP其他 正文

php圖片批量壓縮并同時(shí)保持清晰度

作者:小吳-斌 更新時(shí)間: 2023-08-30 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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新