zoukankan      html  css  js  c++  java
  • 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;
    }
    ?>
  • 相关阅读:
    ByteBuffer使用实例
    Fiddler抓包显示请求时延
    手机wifi连上Fiddler后无网络问题解决
    git
    git
    Autofac使用
    Redis实战
    Redis实战
    Redis实战
    Redis实战
  • 原文地址:https://www.cnblogs.com/zh718594493/p/14689644.html
Copyright © 2011-2022 走看看