1 private function create_scaled_image($file_path){
2 $file_name = basename($file_path);
3 $new_file_path = dirname($file_path) . DIRECTORY_SEPARATOR . $this->thumbnail['upload_dir'] . DIRECTORY_SEPARATOR;
4 if(!file_exists($new_file_path))
5 @mkdir($new_file_path);
6 $new_file_path .= $file_name;
7 list($img_width, $img_height) = @getimagesize($file_path);
8 if(!$img_width || !$img_height){
9 return false;
10 }
11 $scale = min(
12 $this->thumbnail['max_width'] / $img_width, $this->thumbnail['max_height'] / $img_height
13 );
14 if($scale >= 1){
15 if($file_path !== $new_file_path){
16 return copy($file_path, $new_file_path);
17 }
18 return true;
19 }
20 $new_width = $img_width * $scale;
21 $new_height = $img_height * $scale;
22 $new_img = @imagecreatetruecolor($new_width, $new_height);
23 switch(strtolower(substr(strrchr($file_name, '.'), 1))){
24 case 'jpg':
25 case 'jpeg':
26 $src_img = @imagecreatefromjpeg($file_path);
27 $write_image = 'imagejpeg';
28 $image_quality = isset($this->thumbnail['jpeg_quality']) ?
29 $this->thumbnail['jpeg_quality'] : 75;
30 break;
31 case 'gif':
32 @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
33 $src_img = @imagecreatefromgif($file_path);
34 $write_image = 'imagegif';
35 $image_quality = null;
36 break;
37 case 'png':
38 @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
39 @imagealphablending($new_img, false);
40 @imagesavealpha($new_img, true);
41 $src_img = @imagecreatefrompng($file_path);
42 $write_image = 'imagepng';
43 $image_quality = isset($this->thumbnail['png_quality']) ?
44 $this->thumbnail['png_quality'] : 9;
45 break;
46 default:
47 $src_img = null;
48 }
49 $success = $src_img && @imagecopyresampled(
50 $new_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $img_width, $img_height
51 ) && $write_image($new_img, $new_file_path, $image_quality);
52 // Free up memory (imagedestroy does not delete files):
53 @imagedestroy($src_img);
54 @imagedestroy($new_img);
55 return $success;
56 }