SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | ||
3 | // Usage: | |
4 | // Replace the contents of: | |
5 | // /overrides/classes/ImageManager.php | |
6 | // With this document. Then just add a new image size in the Backoffice : | |
7 | // Preferences -> Images -> Add New | |
8 | // AND name it whatever_btt (attach '_btt' at the end of the name string) | |
9 | // THEN just use this image size where you want :) | |
10 | ||
11 | // CAUTION! Check if you're using the same version of Prestashop as we do: 1.5.2 | |
12 | // (should work in all 1.5.xs though but we never checked :) | |
13 | ||
14 | // Good luck - Bazinga Designs | |
15 | // http://www.bazingadesigns.com/en | |
16 | ||
17 | class ImageManager extends ImageManagerCore | |
18 | { | |
19 | ||
20 | /** | |
21 | * Resize, cut and optimize image | |
22 | * | |
23 | * Zoom & Croop when the destination file name | |
24 | * contains the '_timthumb' phrase | |
25 | * - Modified by www.bazingadesigns.com/en | |
26 | * (TimThumb ZoomCrop port) | |
27 | * | |
28 | * @param string $src_file Image object from $_FILE | |
29 | * @param string $dst_file Destination filename | |
30 | * @param integer $dst_width Desired width (optional) | |
31 | * @param integer $dst_height Desired height (optional) | |
32 | * @param string $file_type | |
33 | * @return boolean Operation result | |
34 | */ | |
35 | public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false) | |
36 | { | |
37 | if (!file_exists($src_file)) | |
38 | return false; | |
39 | list($src_width, $src_height, $type) = getimagesize($src_file); | |
40 | ||
41 | // If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension. | |
42 | // This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality | |
43 | // because JPG reencoding by GD, even with max quality setting, degrades the image. | |
44 | if (Configuration::get('PS_IMAGE_QUALITY') == 'png_all' | |
45 | || (Configuration::get('PS_IMAGE_QUALITY') == 'png' && $type == IMAGETYPE_PNG) && !$force_type) | |
46 | $file_type = 'png'; | |
47 | ||
48 | if (strpos($dst_file, '_btt')!==FALSE) | |
49 | $zoomCrop = true; | |
50 | else | |
51 | $zoomCrop = false; | |
52 | ||
53 | if (!$src_width) | |
54 | return false; | |
55 | ||
56 | if ($zoomCrop == true) { | |
57 | ||
58 | if (!$dst_width) $dst_width = 0; | |
59 | if (!$dst_height) $dst_height = 0; | |
60 | ||
61 | } else { | |
62 | ||
63 | if (!$dst_width) | |
64 | $dst_width = $src_width; | |
65 | if (!$dst_height) | |
66 | $dst_height = $src_height; | |
67 | } | |
68 | ||
69 | ||
70 | $src_image = ImageManager::create($type, $src_file); | |
71 | ||
72 | $width_diff = $dst_width / $src_width; | |
73 | $height_diff = $dst_height / $src_height; | |
74 | ||
75 | if ($zoomCrop==true) { | |
76 | ||
77 | if ($dst_width>0 && $dst_height<1) { | |
78 | $dst_height = floor ($src_height * ($dst_width / $src_width)); | |
79 | } else if ($dst_height>0 && $dst_width<1) { | |
80 | $dst_width = floor ($src_width * ($dst_height / $src_height)); | |
81 | } | |
82 | ||
83 | $src_x = $src_y = 0; | |
84 | $src_w = $src_width; | |
85 | $src_h = $src_height; | |
86 | ||
87 | $cmp_x = $src_width / $dst_width; | |
88 | $cmp_y = $src_height / $dst_height; | |
89 | ||
90 | if ($cmp_x > $cmp_y) { | |
91 | ||
92 | $src_w = round (($src_width / $cmp_x * $cmp_y)); | |
93 | $src_x = round (($src_width - ($src_width / $cmp_x * $cmp_y)) / 2); | |
94 | ||
95 | } else if ($cmp_y > $cmp_x) { | |
96 | ||
97 | $src_h = round (($src_height / $cmp_y * $cmp_x)); | |
98 | $src_y = round (($src_height - ($src_height / $cmp_y * $cmp_x)) / 2); | |
99 | ||
100 | } | |
101 | ||
102 | } | |
103 | ||
104 | else if ($width_diff > 1 && $height_diff > 1) | |
105 | { | |
106 | $next_width = $src_width; | |
107 | $next_height = $src_height; | |
108 | } | |
109 | else | |
110 | { | |
111 | if (Configuration::get('PS_IMAGE_GENERATION_METHOD') == 2 || (!Configuration::get('PS_IMAGE_GENERATION_METHOD') && $width_diff > $height_diff)) | |
112 | { | |
113 | $next_height = $dst_height; | |
114 | $next_width = round(($src_width * $next_height) / $src_height); | |
115 | $dst_width = (int)(!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_width : $next_width); | |
116 | } | |
117 | else | |
118 | { | |
119 | $next_width = $dst_width; | |
120 | $next_height = round($src_height * $dst_width / $src_width); | |
121 | $dst_height = (int)(!Configuration::get('PS_IMAGE_GENERATION_METHOD') ? $dst_height : $next_height); | |
122 | } | |
123 | } | |
124 | ||
125 | $dest_image = imagecreatetruecolor($dst_width, $dst_height); | |
126 | ||
127 | // If image is a PNG and the output is PNG, fill with transparency. Else fill with white background. | |
128 | if ($file_type == 'png' && $type == IMAGETYPE_PNG) | |
129 | { | |
130 | imagealphablending($dest_image, false); | |
131 | imagesavealpha($dest_image, true); | |
132 | $transparent = imagecolorallocatealpha($dest_image, 255, 255, 255, 127); | |
133 | imagefilledrectangle($dest_image, 0, 0, $dst_width, $dst_height, $transparent); | |
134 | } | |
135 | else | |
136 | { | |
137 | $white = imagecolorallocate($dest_image, 255, 255, 255); | |
138 | imagefilledrectangle ($dest_image, 0, 0, $dst_width, $dst_height, $white); | |
139 | } | |
140 | ||
141 | if ($zoomCrop==true) | |
142 | imagecopyresampled($dest_image, $src_image, 0, 0, $src_x, $src_y, $dst_width, $dst_height, $src_w, $src_h); | |
143 | else | |
144 | imagecopyresampled($dest_image, $src_image, (int)(($dst_width - $next_width) / 2), (int)(($dst_height - $next_height) / 2), 0, 0, $next_width, $next_height, $src_width, $src_height); | |
145 | ||
146 | return (ImageManager::write($file_type, $dest_image, $dst_file)); | |
147 | } | |
148 | ||
149 | } |