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;
}
?>
原文地址:https://www.cnblogs.com/zh718594493/p/14689644.html