php实现图片压缩
本文实例为大家分享了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; } ?>