php 图片压缩并实现苹果图片旋转修复

用途:

        1. 图片压缩,2:通过 extif 插件修复图片旋转(需要php安装extif插件)

<?php
ini_set("memory_limit","2680M");
$hostdir=dirname(__FILE__).'/uploads'; //要读取的文件夹
$filesnames = scanFile($hostdir);
$t1 = 0;
foreach ($filesnames as $name) {
  if(file_exists($name)){
    $i1 = filesize($name);
    if($i1 > 500*1024){
      $t1++;
      echo $name.',size:'.getsize($i1, 'mb').'.mb,'.$i1.'<br>';
        compress_image($name);
    }
  }
}
echo $t1;
exit;
$hostdir=dirname(__FILE__).'/Application/'; //要读取的文件夹
$filesnames = scanFile2($hostdir);
$t2 = 0;
foreach ($filesnames as $name) {
  if(file_exists($name)){
    $t2 = $t2+1;
  }
}
if($t2 != 225) {
 echo '文件数错误 :'.$t2;
}
exit;


function scanFile2($path) {
  global $result2;
  $files = scandir($path);
  foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
      if (is_dir($path . '/' . $file)) {
        scanFile2($path . '/' . $file);
      } else {
        $result2[] = $path . '/' . $file;
      }
    }
  }
  return $result2;
}

function scanFile($path) {
  global $result;
  $files = scandir($path);
  foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
      if (is_dir($path . '/' . $file)) {
        scanFile($path . '/' . $file);
      } else {
        $result[] = $path . '/' . $file;
      }
    }
  }
  return $result;
}
function getsize($size, $format = 'kb') {
    $p = 0;
    if ($format == 'kb') {
        $p = 1;
    } elseif ($format == 'mb') {
        $p = 2;
    } elseif ($format == 'gb') {
        $p = 3;
    }
    $size /= pow(1024, $p);
    return number_format($size, 3);
}

/**
* desription 进行图片压缩
* @param sting $imgsrc
* @return boolean t 是 f 否
*/
function compress_image($imgsrc)
{
    if(file_exists($imgsrc)){
        $i1 = filesize($imgsrc);
        if($i1 > 500*1024){
            compress_image2($imgsrc,$imgsrc);
        }
    }
}
function compress_image2($imgsrc, $imgdst)
{
    $image_rate= 70;
    list($width, $height, $type) = getimagesize($imgsrc);
    $new_width = ($width > 1000 ? 1000 : $width) * 0.8;
    $new_height = ($width > 1000 ? 1000 * $height / $width : $height) * 0.8;
    switch ($type) {
        case 1:
            $giftype = check_gifcartoon($imgsrc);
            if ($giftype) {
                // header('Content-Type:image/gif');
                $image_wp = imagecreatetruecolor($new_width, $new_height);
                $image = imagecreatefromgif($imgsrc);
                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($image_wp, $imgdst, $image_rate);
                imagedestroy($image_wp);
            }
            break;
        case 2:
            //   header('Content-Type:image/jpeg');
            $image_wp = imagecreatetruecolor($new_width, $new_height);
            $image = imagecreatefromjpeg($imgsrc);
            imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            if (file_exists($imgdst)) {
                unlink($imgdst);
            }
			if(function_exists(exif_read_data)){
				$exif = exif_read_data($imgsrc);
				if (!empty($exif['Orientation'])) {
					switch ($exif['Orientation']) {
						case 8:
							$image_wp = imagerotate($image_wp, 90, 0);
							break;
						case 3:
							$image_wp = imagerotate($image_wp, 180, 0);
							break;
						case 6:
							$image_wp = imagerotate($image_wp, -90, 0);
							break;
					}
				}
			}
            imagejpeg($image_wp, $imgdst, $image_rate);
            imagedestroy($image_wp);
            break;
        case 3:
            //   header('Content-Type:image/png');
            $image_wp = imagecreatetruecolor($new_width, $new_height);
            $image = imagecreatefrompng($imgsrc);
            imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            imagejpeg($image_wp, $imgdst, $image_rate);
            imagedestroy($image_wp);
            break;
    }
}
/**
* desription 判断是否gif动画
* @param sting $image_file图片路径
* @return boolean t 是 f 否
*/
function check_gifcartoon($image_file){ 
    $fp = fopen($image_file,'rb'); 
    $image_head = fread($fp,1024); 
    fclose($fp); 
    return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true; 
} 

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值