source: branches/feature-module-paygent/data/lib/gdthumb.php @ 12057

Revision 12057, 8.0 KB checked in by naka, 14 years ago (diff)
Line 
1<?php
2/*
3
4¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡
5GD¼«Æ°¥µ¥à¥Í¥¤¥ëºîÀ® + ÃæÀÀµ2006/02/03
6
7Copyright 2002- Akihiro Asai. All rights reserved.
8
9http://aki.adam.ne.jp
10aki@mx3.adam.ne.jp
11
12¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡¢¡
13
14¢¢ µ¡Ç½³µÍ×
15¡¦»ØÄꤵ¤ì¤¿¥¤¥á¡¼¥¸¤Î¥µ¥à¥Í¥¤¥ë¤òɽ¼¨¤·¤Þ¤¹¡£
16¡¦½ÐÎϤ¹¤ëÂ礭¤µ¤ò»ØÄꤹ¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£
17¡¦½ÐÎϤµ¤ì¤ë¥¤¥á¡¼¥¸¤Î¥¢¥¹¥Ú¥¯¥ÈÈæ¤Ï°Ý»ý¤µ¤ì¤Þ¤¹¡£
18
19¢¢ »ÈÍÑÊýË¡
20»ØÄê¤Ï gdthumb.php?path=xxx/xxx.[ jpg | png | gif ]&mw=xx&mh=xx
21¢¨ pass¤ÎÉôʬ¤Ë¤Ï²èÁü¤Ø¤Î¥Ñ¥¹¤ò»ØÄê
22¢¨ mw¤Ëɽ¼¨²èÁü¤ÎºÇÂç²£Éý¡¢mh¤Ëɽ¼¨²èÁü¤ÎºÇÂç²£Éý¤ò³°Éô¤è¤ê»ØÄê²Äǽ¡£
23¢¨ »ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄêÃͤòºÎÍÑ¡£
24¡ú¥¯¥é¥¹¤È¤·¤Æ»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢¡Ö¥¯¥é¥¹¤È¤·¤Æ»ÈÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¦¡¦¡¦¡×°Ê¹ß¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤·¤Æ²¼¤µ¤¤¡£
25
26¢¢ ¹¹¿·ÍúÎò
272002/08/19 ºÇÂç½ÄÉý¤ÎÉôʬ¤ò°ìÉô¼êľ¤·
282003/01/31 ¥Ç¥Õ¥©¥ë¥È¤Ç¥¢¥¹¥Ú¥¯¥ÈÈ椬¸ÇÄê
292003/04/11 ºÇÂç²£Éý¤ÈºÇÂç½ÄÉý¤ò³°Éô¤è¤ê»ØÄê²Äǽ
302003/04/25 GD2ÍѤ˴ؿôÊѹ¹
312003/06/21 GD1/2¤ò¥Ð¡¼¥¸¥ç¥ó¤Ë±þ¤¸¤ÆÊѹ¹¤Ç¤­¤ë¤è¤¦¤Ë½¤Àµ
322003/06/25 imageCopyResampled¤ÎÉôʬ¤ò½¤Àµ
332004/01/28 ¥¹¥¯¥ê¥×¥ÈÁ´ÂΤò½ñ¤­Ä¾¤·¡£°ú¿ô¡Öpass¡×¤ò¡Öpath¡×¤ËÊѹ¹¡£
342005/12/08 ´Ø¿ô¤Î¼«Æ°È½ÊÌ gif·Á¼°¤ËÂбþ Æ©²ágif¡¦Æ©²ápng¤ËÂбþ¡ÊGD2.0.1°Ê¹ß¡Ë 
35*/
36
37// ¥¯¥é¥¹¤È¤·¤Æ»ÈÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢°Ê²¼¤Î6¹Ô¤ò¥³¥á¥ó¥È¥¢¥¦¥È
38/*
39$objg = new gdthumb();
40list($Ck, $Msg) = $objg->Main($_GET["path"], $_GET["mw"], $_GET["mh"]);
41if(!$Ck) { // ¥¨¥é¡¼¤Î¾ì¹ç
42    header("Content-Type: text/html; charset=" . CHAR_CODE);
43    print $Msg;
44}
45*/
46
47class gdthumb {
48   
49    var $imgMaxWidth;
50    var $imgMaxHeight;
51    var $gdVer;
52   
53    /*
54    * ¥³¥ó¥¹¥È¥é¥¯¥¿
55    */
56    function gdthumb() {
57       
58        // ¥¹¥¯¥ê¥×¥È¤Î¥Ç¥Õ¥©¥ë¥ÈÀßÄê
59       
60        // ²èÁü¤ÎºÇÂç²£Éý
61        $this->imgMaxWidth = 240; // 1°Ê¾å¤ÎÃÍ
62       
63        // ²èÁü¤ÎºÇÂç½ÄÉý
64        $this->imgMaxHeight = 0; // »ØÄꤷ¤Ê¤¤¾ì¹ç¤Ï0 »ØÄꤹ¤ë¾ì¹ç¤Ï1°Ê¾å¤ÎÃÍ
65       
66    }
67   
68    /*
69    * ¥µ¥à¥Í¥¤¥ë²èÁü¤ÎºîÀ®
70    * string $path
71    * integer $width
72    * integer $height
73    */
74    function Main($path, $width, $height, $dst_file, $header = false) {
75       
76        if(!isset($path)) {
77            return array(0, "¥¤¥á¡¼¥¸¤Î¥Ñ¥¹¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
78        }
79       
80        if(!file_exists($path)) {
81            return array(0, "»ØÄꤵ¤ì¤¿¥Ñ¥¹¤Ë¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£");
82        }
83       
84        // ²èÁü¤ÎÂ礭¤µ¤ò¥»¥Ã¥È
85        if($width) $this->imgMaxWidth = $width;
86        if($height) $this->imgMaxHeight = $height;
87       
88        $size = @GetimageSize($path);
89        $re_size = $size;
90       
91        //¥¢¥¹¥Ú¥¯¥ÈÈæ¸ÇÄê½èÍý
92        if($this->imgMaxWidth != 0) {
93            $tmp_w = $size[0] / $this->imgMaxWidth;
94        }
95       
96        if($this->imgMaxHeight != 0) {
97            $tmp_h = $size[1] / $this->imgMaxHeight;
98        }
99       
100        if($tmp_w > 1 || $tmp_h > 1) {
101            if($this->imgMaxHeight == 0) {
102                if($tmp_w > 1) {
103                    $re_size[0] = $this->imgMaxWidth;
104                    $re_size[1] = $size[1] * $this->imgMaxWidth / $size[0];
105                }
106            } else {
107                if($tmp_w > $tmp_h) {
108                    $re_size[0] = $this->imgMaxWidth;
109                    $re_size[1] = $size[1] * $this->imgMaxWidth / $size[0];
110                } else {
111                    $re_size[1] = $this->imgMaxHeight;
112                    $re_size[0] = $size[0] * $this->imgMaxHeight / $size[1];
113                }
114            }
115        }
116       
117        $imagecreate = function_exists("imagecreatetruecolor") ? "imagecreatetruecolor" : "imagecreate";
118        $imageresize = function_exists("imagecopyresampled") ? "imagecopyresampled" : "imagecopyresized";
119
120        switch($size[2]) {
121           
122            // gif·Á¼°
123            case "1":
124                if(function_exists("imagecreatefromgif")) {
125                    $src_im = imagecreatefromgif($path);
126                    $dst_im = $imagecreate($re_size[0], $re_size[1]);
127                   
128                    $transparent = imagecolortransparent($src_im);
129                    $colorstotal = imagecolorstotal ($src_im);
130                   
131                    $dst_im = imagecreate($re_size[0], $re_size[1]);
132                    if (0 <= $transparent && $transparent < $colorstotal) {
133                        imagepalettecopy ($dst_im, $src_im);
134                        imagefill ($dst_im, 0, 0, $transparent);
135                        imagecolortransparent ($dst_im, $transparent);
136                    }
137                    $imageresize($dst_im, $src_im, 0, 0, 0, 0, $re_size[0], $re_size[1], $size[0], $size[1]);
138
139                    if(function_exists("imagegif")) {                       
140                        // ²èÁü½ÐÎÏ
141                        if($header){
142                            header("Content-Type: image/gif");
143                            imagegif($dst_im);
144                            return "";
145                        }else{
146                            $dst_file = $dst_file . ".gif";
147                            if($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
148                                // ¥µ¥¤¥º¤¬Æ±¤¸¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¤Þ¤Þ¥³¥Ô¡¼¤¹¤ë¡£(²è¼ÁÎô²½¤òËɤ°¡Ë           
149                                copy($path, $dst_file);
150                            } else {
151                                imagegif($dst_im, $dst_file);
152                            }
153                        }                       
154                        imagedestroy($src_im);
155                        imagedestroy($dst_im);
156                    } else {
157                        // ²èÁü½ÐÎÏ
158                        if($header){
159                            header("Content-Type: image/png");
160                            imagepng($dst_im);
161                            return "";
162                        }else{
163                            $dst_file = $dst_file . ".png";
164                            if($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
165                                // ¥µ¥¤¥º¤¬Æ±¤¸¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¤Þ¤Þ¥³¥Ô¡¼¤¹¤ë¡£(²è¼ÁÎô²½¤òËɤ°¡Ë           
166                                copy($path, $dst_file);
167                            } else {
168                                imagepng($dst_im, $dst_file);
169                            }
170                        }
171                        imagedestroy($src_im);
172                        imagedestroy($dst_im);
173                    }
174                } else {
175                    // ¥µ¥à¥Í¥¤¥ëºîÀ®ÉԲĤξì¹ç¡Êµì¥Ð¡¼¥¸¥ç¥óÂкö¡Ë
176                    $dst_im = imageCreate($re_size[0], $re_size[1]);
177                    imageColorAllocate($dst_im, 255, 255, 214); //ÇØ·Ê¿§
178                   
179                    // ÏÈÀþ¤Èʸ»ú¿§¤ÎÀßÄê
180                    $black = imageColorAllocate($dst_im, 0, 0, 0);
181                    $red = imageColorAllocate($dst_im, 255, 0, 0);
182                   
183                    imagestring($dst_im, 5, 10, 10, "GIF $size[0]x$size[1]", $red);
184                    imageRectangle ($dst_im, 0, 0, ($re_size[0]-1), ($re_size[1]-1), $black);
185                   
186                    // ²èÁü½ÐÎÏ
187                    if($header){
188                        header("Content-Type: image/png");
189                        imagepng($dst_im);
190                        return "";
191                    }else{
192                        $dst_file = $dst_file . ".png";
193                        imagepng($dst_im, $dst_file);
194                    }
195                    imagedestroy($src_im);
196                    imagedestroy($dst_im);
197                }
198                break;
199               
200            // jpg·Á¼°
201            case "2":
202           
203                $src_im = imageCreateFromJpeg($path);
204                $dst_im = $imagecreate($re_size[0], $re_size[1]);
205               
206                $imageresize( $dst_im, $src_im, 0, 0, 0, 0, $re_size[0], $re_size[1], $size[0], $size[1]);
207
208                // ²èÁü½ÐÎÏ
209                if($header){
210                    header("Content-Type: image/jpeg");
211                    imageJpeg($dst_im);
212                    return "";
213                }else{
214                    $dst_file = $dst_file . ".jpg";
215                   
216                    if($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
217                        // ¥µ¥¤¥º¤¬Æ±¤¸¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¤Þ¤Þ¥³¥Ô¡¼¤¹¤ë¡£(²è¼ÁÎô²½¤òËɤ°¡Ë       
218                        copy($path, $dst_file);
219                    } else {
220                        imageJpeg($dst_im, $dst_file);
221                    }
222                }
223               
224                imagedestroy($src_im);
225                imagedestroy($dst_im);
226               
227                break;
228   
229            // png·Á¼°   
230            case "3":
231
232                $src_im = imageCreateFromPNG($path);
233               
234                $colortransparent = imagecolortransparent($src_im);
235                if ($colortransparent > -1) {
236                    $dst_im = $imagecreate($re_size[0], $re_size[1]);
237                    imagepalettecopy($dst_im, $src_im);
238                    imagefill($dst_im, 0, 0, $colortransparent);
239                    imagecolortransparent($dst_im, $colortransparent);
240                    imagecopyresized($dst_im,$src_im, 0, 0, 0, 0, $re_size[0], $re_size[1], $size[0], $size[1]);
241                } else {               
242                    $dst_im = $imagecreate($re_size[0], $re_size[1]);
243                    imagecopyresized($dst_im,$src_im, 0, 0, 0, 0, $re_size[0], $re_size[1], $size[0], $size[1]);
244                   
245                    (imagecolorstotal($src_im) == 0) ? $colortotal = 65536 : $colortotal = imagecolorstotal($src_im);
246                   
247                    imagetruecolortopalette($dst_im, true, $colortotal);
248                }
249               
250                // ²èÁü½ÐÎÏ
251                if($header){
252                    header("Content-Type: image/png");
253                    imagepng($dst_im);
254                    return "";
255                }else{
256                    $dst_file = $dst_file . ".png";
257                    if($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
258                        // ¥µ¥¤¥º¤¬Æ±¤¸¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¤Þ¤Þ¥³¥Ô¡¼¤¹¤ë¡£(²è¼ÁÎô²½¤òËɤ°¡Ë           
259                        copy($path, $dst_file);
260                    } else {
261                        imagepng($dst_im, $dst_file);
262                    }
263                }
264                imagedestroy($src_im);
265                imagedestroy($dst_im);
266               
267                break;
268               
269            default:
270                return array(0, "¥¤¥á¡¼¥¸¤Î·Á¼°¤¬ÉÔÌÀ¤Ç¤¹¡£");
271        }
272
273        return array(1, $dst_file);
274    }
275}
276?>
Note: See TracBrowser for help on using the repository browser.