php图片压缩可以通过GD库来实现。以下是一个使用GD库进行图片压缩的示例代码:
$sourceImage = 'path/to/source/image.jpg';
$compressedImage = 'path/to/compressed/image.jpg';
$compressionQuality = 80;
$imageInfo = getimagesize($sourceImage);
$originalWidth = $imageInfo[0];
$originalHeight = $imageInfo[1];
$compressed = imagecreatetruecolor($originalWidth, $originalHeight);
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);
}
imagecopyresampled($compressed, $source, 0, 0, 0, 0, $originalWidth, $originalHeight, $originalWidth, $originalHeight);
imagejpeg($compressed, $compressedImage, $compressionQuality);
imagedestroy($compressed);
imagedestroy($source);
echo '图片压缩完成!';
PHP实现图片压缩同时保持清晰度
<?php
class imgcompress{
private $src;
private $image;
private $imageinfo;
private $percent = 0.5;
public function __construct($src, $percent=1)
{
$this->src = $src;
$this->percent = $percent;
}
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;
}
private function _showImage()
{
header('Content-Type: image/'.$this->imageinfo['type']);
$funcs = "image".$this->imageinfo['type'];
$funcs($this->image);
}
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);
}
}
$source = '123.png';
$dst_img = 'text.png';
$percent = 1;
$image = (new imgcompress($source,$percent))->compressImg($dst_img);
批量压缩
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/";
scan_dir($source_dir);