php实例 生活便利小代码,拍照后,批量递归缩放目录图片.

新入手单反一周了,今天终于找上了机会带上老婆老妈去荔枝公园拍了一天的照,回来准备上传至相册,突然发现,每张图片都有点偏大,找工具也很累,直接上网,东拼西凑了点代码.实现将指定目录的图片,按指定大小范围缩放并输出到指定目录(含递归) ,供自己以后处理相片使用. 不多废话了,附代码.
PHP code ?
1
2
3
4
5
6
7
     header( 'Content-type:text/html; charset=utf-8' );
     require  "lib/imgHelper.php" ;
     $imgHelper  new  imgHelper(  "dir1"  );
     $imgHelper ->setOutputDir(  "dir2"  );
     //默认输出在1024 768 下等比缩放,需要自定义时,$imgHelper->setOutputSize(1440,900);
     $imgHelper ->execution();

lib 库代码.
PHP code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
/**
  * 图片处理助手
  */
class  imgHelper
{
     public  $srcFiles ;      //源文件   array
     public  $srcDirs ;       //源目录
     public  $exportDir ;     //输出目录
     public  $exportFiles ;   //输出文件  array
     private   $_option  array ( "maxWidth" => "1024"  "maxHeight" => "768" );
 
     function  __construct( $dir  ''  $option  array () )
     {
         if  (! $dir return ;
         $this ->srcDirs =  $dir ;
         $this ->srcFiles =  $this ->traversal( $dir );
         $this ->setOptions(  $option  );
     }
 
     /**
      * 设置输出目录
      * @param $dir
      */
     public  function  setOutputDir(  $dir  )
     {
         if ( ! is_dir $dir  )) {  mkdir ( $dir  , 0777 , 1);}
             $this ->exportDir =  $dir ;
     }
 
     public  function  execution()
     {
        foreach $this ->srcFiles  as  $key  => $val  ):
            $srcImg  $val ;
            $toFile  str_replace $this ->srcDirs ,  $this ->exportDir ,  $srcImg );  //todo 简便处理.
            $maxWidth  $this ->_option[ "maxWidth" ];
            $maxHeight  $this ->_option[ "maxHeight" ];
            $this ->resize( $srcImg  $toFile  $maxWidth  $maxHeight  );
        endforeach ;
     }
 
     //缩放图片.
     private   function  resize( $srcImage , $toFile , $maxWidth  = 100, $maxHeight  = 100, $imgQuality =100)
     {
             //创建目录目录!
             $pInfo  pathinfo $toFile  );
             $dir  $pInfo [ "dirname" ];   if (! is_dir $dir ) ){  mkdir ( $dir  , 0777 , 1);}
 
             list( $width $height $type $attr ) =  getimagesize ( $srcImage );
 
             if ( $width  $maxWidth   ||  $height  $maxHeight return  ;
             switch  ( $type ) {
                 case  1:  $img  = imagecreatefromgif( $srcImage );  break ;
                 case  2:  $img  = imagecreatefromjpeg( $srcImage );  break ;
                 case  3:  $img  = imagecreatefrompng( $srcImage );  break ;
             }
             $scale  = min( $maxWidth / $width $maxHeight / $height );  //求出绽放比例
 
             if ( $scale  < 1) {
                 $newWidth  floor ( $scale * $width );
                 $newHeight  floor ( $scale * $height );
                 $newImg  = imagecreatetruecolor( $newWidth $newHeight );
                 imagecopyresampled( $newImg $img , 0, 0, 0, 0,  $newWidth $newHeight $width $height );
                 $newName  "" ;
                 $toFile  = preg_replace( "/(.gif|.jpg|.jpeg|.png)/i" , "" , $toFile );
                 switch ( $type ) {
                     case  1:  if (imagegif( $newImg "$toFile$newName.gif" $imgQuality ))
                         return  "$newName.gif" break ;
                     case  2:  if (imagejpeg( $newImg "$toFile$newName.jpg" $imgQuality ))
                         return  "$newName.jpg" break ;
                     case  3:  if (imagepng( $newImg "$toFile$newName.png" $imgQuality ))
                         return  "$newName.png" break ;
                     default if (imagejpeg( $newImg "$toFile$newName.jpg" $imgQuality ))
                         return  "$newName.jpg" break ;
                 }
                 imagedestroy( $newImg );
             }
             imagedestroy( $img );
             return  false;
     }
 
     /**
      * 设置输出的大小
      * @param string $width
      * @param string $height
      */
     public  function  setOutputSize(  $width  "1024"  $height  "768" ){
         $_option  array ( "maxWidth" => "$width"  "maxHeight" => "$height" );
         $this ->setOptions(  $_option  );
     }
 
     /**
      * 设置可选参数
      * @param $option
      */
     private   function  setOptions(  $option )
     {
         foreach $option  as  $key  => $val ):
             if ( isset(  $option [ $key ]) &&  $option [ $key ] ){
                 $this ->_option[ $key ] =  $val ;
             }
         endforeach ;
     }
 
     /**
      * 遍得到文件夹下的所有文件
      */
     private  function  traversal( $path )
     {
         if  (! $path return  array ();
         $files  array ();
         if  (! is_dir ( $path ))  return ;
         foreach  (scandir( $path as  $file )
         {
             if  ( $file  !=  '.'  &&  $file  !=  '..' ) {
                 $path2  $path  '/'  $file ;
                 if  ( is_dir ( $path2 )) {
                     $temp  $this ->traversal( $path2 );
                     $files  array_merge ( $files $temp );
                 else  {
                     if  ( $this ->isIMg( $file )) {
                         $files [] =  $path  "/"  $file ;
                     }
                 }
             }
         }
         return  $files ;
     }
 
     /**
      * 判断是否是图片
      * @param $file
      * @return bool
      */
     private  function  isIMg( $file )   {
         $pInfo   pathinfo $file );
          $extention  =   $pInfo [ "extension" ];
         return   preg_match( "/(jpg)|(png)|gif/i"  $extention );
     }
     /** * 调试数据 */
     public   function  debug() { $this ->pr( $this ->srcFiles,  "待处理图片数组." );
           $this ->pr(  $this ->srcDirs ,  "源目录" );
           $this ->pr(  $this ->exportDir ,  "目标目录" );
     }
 
     private  function   pr( $array $title  'DEBUG' $type  'array' $width  '' )  {       /*** @格式化输出 */
         $title  .=  date ( "Y-m-d H:i:s" );
         $widthStr  "" ;
         if  ( $width $widthStr  "width:$width"  "px" ;
         echo  "<fieldset style=\"-moz-border-radius:5px 5px 5px 5px; -moz-box-shadow:0px 0px 10px rgba(00,00,00,0.45); border: 3px solid  transparent; padding:3px; margin-top:20px; \"><legend style=\"color: #069; margin:3px; $widthStr \">$title</legend>" ;
         echo  "<div style = '-moz-border-radius:10px 10px 10px 10px;font-size:14px; color:#069; border:1px solid #F0FAF9;  font-size:9pt; background:#F0FAF9; padding:5px;'>" ;
         print ( "<pre>" );
         if  ( $type  ==  'json' ) {   $array  = json_decode( $array );    }
         print_r( $array );
         print ( "</pre>" );
         echo  "<div>" ;
         echo   "</fieldset>" ;
     }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值