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 | } |