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 (!$dirreturn;
        $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 $maxHeightreturn ;
            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;
                    defaultif(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 (!$pathreturn array();
        $files array();
        if (!is_dir($path)) return;
        foreach (scandir($pathas $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>";
    }
}
發佈了34 篇原創文章 · 獲贊 14 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章