用php的GD庫壓縮圖片時,可以填入具體的寬和高進行壓縮。那麼,能否按百分比壓縮呢,比如壓縮為原圖的90%,80%....等?
回複內容:
用php的GD庫壓縮圖片時,可以填入具體的寬和高進行壓縮。那麼,能否按百分比壓縮呢,比如壓縮為原圖的90%,80%....等?
可以啊,中午剛給朋友搞了個壓縮的,
$maxWidth) { $maxWidth = $maxWidth; if($srcHeight > $maxHeight) { $maxHeight = ($srcHeight/$srcHeight) * $maxWidth; } else { $maxHeight = $srcHeight; } return array('width' => $maxWidth,'height' => $maxHeight); } if($srcHeight > $maxHeight) { $maxHeight = $maxHeight; if($srcWidth > $maxWidth) { $maxWidth = ($srcWidth/$srcHeight) * $maxHeight; } else { $maxWidth = $srcWidth; } return array('width' => $srcWidth,'height' => $maxHeight); } return array('width' => $srcWidth,'height' => $srcHeight); } /** * 等比例產生縮圖 * * @param String $srcFile 原始檔案路徑 * @param String $dstFile 目標檔案路徑 * @param Integer $maxWidth 產生的目標檔案的最大寬度 * @param Integer $maxHeight 產生的目標檔案的最大高度 * @return Boolean 產生成功則返回true,否則返回false */ function makeThumb($srcFile, $dstFile, $maxWidth, $maxHeight) { if ($size = getimagesize($srcFile)) { $srcWidth = $size[0]; $srcHeight = $size[1]; $mime = $size['mime']; switch ($mime) { case 'image/jpeg'; $isJpeg = true; break; case 'image/gif'; $isGif = true; break; case 'image/png'; $isPng = true; break; default: return false; break; } //header("Content-type:$mime"); $arr = $this->getNewSize($maxWidth, $maxHeight, $srcWidth, $srcHeight); $thumbWidth = $arr['width']; $thumbHeight = $arr['height']; if (isset($isJpeg) && $isJpeg) { $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight); $srcPic = imagecreatefromjpeg($srcFile); imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight); imagejpeg($dstThumbPic, $dstFile, 100); imagedestroy($dstThumbPic); imagedestroy($srcPic); return true; } elseif (isset($isGif) && $isGif) { $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight); //建立透明畫布 imagealphablending($dstThumbPic, true); imagesavealpha($dstThumbPic, true); $trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127); imagefill($dstThumbPic, 0, 0, $trans_colour); $srcPic = imagecreatefromgif($srcFile); imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight); imagegif($dstThumbPic, $dstFile); imagedestroy($dstThumbPic); imagedestroy($srcPic); return true; } elseif (isset($isPng) && $isPng) { $dstThumbPic = imagecreatetruecolor($thumbWidth, $thumbHeight); //建立透明畫布 imagealphablending($dstThumbPic, true); imagesavealpha($dstThumbPic, true); $trans_colour = imagecolorallocatealpha($dstThumbPic, 0, 0, 0, 127); imagefill($dstThumbPic, 0, 0, $trans_colour); $srcPic = imagecreatefrompng($srcFile); imagecopyresampled($dstThumbPic, $srcPic, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $srcWidth, $srcHeight); imagepng($dstThumbPic, $dstFile); imagedestroy($dstThumbPic); imagedestroy($srcPic); return true; } else { return false; } } else { return false; } } } ?>
imagejpeg() 有一個參數可以設定壓縮比例
http://php.net/manual/zh/function.imagejpeg.php