本文实例为大家分享了PHP实现图片压缩的具体代码,供大家参考,具体内容如下
<?php
$files =[];
ini_set('memory_limit','500M');
function getDir($dir){
global $files;
$hd=scandir($dir);
foreach ($hd as $val) {
$sub_dir = $dir."/".$val;
if($val=="." || $val== ".."){
continue;
}elseif(is_dir($sub_dir)){
getDir($sub_dir);
}else{
array_push($files, $sub_dir);
}
}
return $files;
}
$dir = "D:/php/2021_city";
$info = getDir($dir);
foreach($info as $file){
$tmpPath="D:/img/";
$arr = pathinfo($file);
$subDir = explode("/",$arr['dirname'])[3];
$tmpPath = $tmpPath.$subDir;
if(!is_dir($tmpPath)){
mkdir($tmpPath,0777,true);
}
sleep(1);
getNewFile($file,$tmpPath);
echo "file[$file] is finish".PHP_EOL;
}
function getNewFile($filepath,$tmpPath){
$imgInfo = getimagesize($filepath);
$width = $imgInfo[0];//width
$height = $imgInfo[1];//height
$fileName = pathinfo($filepath)['basename'];
$tmpFilePath = $tmpPath."/".$fileName;
getThumb($filepath,$width,$height,$tmpFilePath);
}
function resizeImage($im, $dest, $maxwidth, $maxheight) {
$img = getimagesize($im);
switch ($img[2]) {
case 1:
$im = @imagecreatefromgif($im);
break;
case 2:
$im = @imagecreatefromjpeg($im);
break;
case 3:
$im = @imagecreatefrompng($im);
break;
}
$pic_width = imagesx($im);
$pic_height = imagesy($im);
$resizewidth_tag = false;
$resizeheight_tag = false;
if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
if ($maxwidth && $pic_width > $maxwidth) {
$widthratio = $maxwidth / $pic_width;
$resizewidth_tag = true;
}
if ($maxheight && $pic_height > $maxheight) {
$heightratio = $maxheight / $pic_height;
$resizeheight_tag = true;
}
if ($resizewidth_tag && $resizeheight_tag) {
if ($widthratio < $heightratio)
$ratio = $widthratio;
else
$ratio = $heightratio;
}
if ($resizewidth_tag && !$resizeheight_tag)
$ratio = $widthratio;
if ($resizeheight_tag && !$resizewidth_tag)
$ratio = $heightratio;
$newwidth = $pic_width * $ratio;
$newheight = $pic_height * $ratio;
if (function_exists("imagecopyresampled")) {
$newim = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
} else {
$newim = imagecreate($newwidth, $newheight);
imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
}
imagejpeg($newim, $dest);
imagedestroy($newim);
} else {
imagejpeg($im, $dest);
}
}
/**
* 图片压缩处理
* @param string $sFile 源图片路径
* @param int $iWidth 自定义图片宽度
* @param int $iHeight 自定义图片高度
* @return string 压缩后的图片路径
*/
function getThumb($sFile,$iWidth,$iHeight,$tmpFilePath){
//图片公共路径
$public_path = '';
//判断该图片是否存在
if(!file_exists($public_path.$sFile)) return $sFile;
//判断图片格式(图片文件后缀)
$extend = explode("." , $sFile);
$attach_fileext = strtolower($extend[count($extend) - 1]);
if (!in_array($attach_fileext, array('jpg','png','jpeg'))){
return '';
}
//压缩图片文件名称
$sFileNameS = str_replace(".".$attach_fileext, "_".$iWidth.'_'.$iHeight.'.'.$attach_fileext, $sFile);
//判断是否已压缩图片,若是则返回压缩图片路径
if(file_exists($public_path.$sFileNameS)){
return $sFileNameS;
}
//生成压缩图片,并存储到原图同路径下
// resizeImage($public_path.$sFile, $public_path.$sFileNameS, $iWidth, $iHeight);
resizeImage($public_path.$sFile,$tmpFilePath, $iWidth, $iHeight);
if(!file_exists($public_path.$sFileNameS)){
return $sFile;
}
return $sFileNameS;
}
?>