function thumb_generate($img, $width, $height, $def_img = false, $type_resize = 'resize_full_crop_center', $replace_file = false, $subdir = 'mini', $postfix = true) { // указана картинка, нужно сделать thumb заданного размера if ($img) { // если true, то делаем из ширину+высоту // если false, то постфикса не будет if ($postfix === true) { $postfix = '-' . $width . '-' . $height; } $t = new Thumb($img, $postfix, $replace_file, $subdir); if ($t->init === true) { $img = $t->new_img; // сразу получаем новый адрес } elseif ($t->init === false) { // $img = false; // ошибка $img = $def_img; // ставим дефолтное изображение } else { // получаем изображение if ($type_resize == 'resize_crop') { $t->resize_crop($width, $height); } elseif ($type_resize == 'crop_center') { $t->crop_center($width, $height); } elseif ($type_resize == 'crop') { $t->crop($width, $height); } elseif ($type_resize == 'resize') { $t->resize($width, $height); } elseif ($type_resize == 'resize_h_crop_center') { $t->resize_h_crop_center($width, $height); } elseif ($type_resize == 'resize_crop_center') { $t->resize_crop_center($width, $height); } else { $t->resize_full_crop_center($width, $height); } $img = $t->new_img; // url-адрес готового изображения } } else { $img = $def_img; } return $img; }
function _upload($up_dir, $fn, $r = array()) { $fn = _slug($fn); $ext = substr(strrchr($fn, '.'), 1); $name = substr($fn, 0, strlen($fn) - strlen($ext) - 1); // Если имя файла пустое, только расширение. if ($fn == '.' . $ext) { $fn = '1' . $fn; } // Если файл уже существует. if (file_exists($up_dir . $fn)) { for ($i = 1; $i < 100; $i++) { $fn = $name . '-' . $i . '.' . $ext; if (!file_exists($up_dir . $fn)) { break; } } } file_put_contents($up_dir . $fn, file_get_contents('php://input')); if (!in_array($ext, array('jpg', 'jpeg', 'png', 'gif'))) { // Не картинка, загрузили, больше ничего не надо. return; } // С какими дефолтными параметрами ресайзим и делаем миниатюрки. $def = array('resize_images' => mso_get_option('resize_images', 'general', '600'), 'size_image_mini' => mso_get_option('size_image_mini', 'general', '150'), 'image_mini_type' => mso_get_option('image_mini_type', 'general', '1'), 'use_watermark' => mso_get_option('use_watermark', 'general', '0'), 'watermark_type' => mso_get_option('watermark_type', 'general', '1')); //Можем передать свои параметры в эту функцию. $r = array_merge($def, $r); require getinfo('shared_dir') . 'stock/thumb/thumb.php'; // У нас есть uploads_dir, а нужен url $url = str_replace(getinfo('uploads_dir'), getinfo('uploads_url'), $up_dir); // Если картинка больше, чем нужно, то делаем ресайз, иначе ничего не делаем. // $new_size пригодится, когда из новой картинки будем миниатюру делать. $size = $new_size = getimagesize($up_dir . $fn); if ($size[0] > $r['resize_images'] || $size[1] > $r['resize_images']) { if ($size[0] > $size[1]) { $new_size[0] = $r['resize_images']; $new_size[1] = round($size[1] / ($size[0] / $new_size[0])); } else { $new_size[1] = $r['resize_images']; $new_size[0] = round($size[0] / ($size[1] / $new_size[1])); } //pr($new_size); thumb_generate($url . $fn, $new_size[0], $new_size[1], false, 'resize', true, '', false); } // Создание ватермарки, если такая опция и есть нужный файл. if ($r['use_watermark'] and file_exists(getinfo('uploads_dir') . 'watermark.png')) { $water_type = $r['watermark_type']; // Расположение ватермарка на картинке $hor = 'right'; //Инитим дефолтом. $vrt = 'bottom'; //Инитим дефолтом. if ($water_type == 2 or $water_type == 4) { $hor = 'left'; } if ($water_type == 2 or $water_type == 3) { $vrt = 'top'; } if ($water_type == 1) { $hor = 'center'; $vrt = 'middle'; } $r_conf = array('image_library' => 'gd2', 'source_image' => $up_dir . $fn, 'new_image' => $up_dir . $fn, 'wm_type' => 'overlay', 'wm_vrt_alignment' => $vrt, 'wm_hor_alignment' => $hor, 'wm_overlay_path' => getinfo('uploads_dir') . 'watermark.png'); $CI =& get_instance(); $CI->load->library('image_lib'); $CI->image_lib->clear(); $CI->image_lib->initialize($r_conf); if (!$CI->image_lib->watermark()) { echo '<div class="error">' . t('Водяной знак:') . ' ' . $CI->image_lib->display_errors() . '</div>'; } } // $r['image_mini_type'] = 6; switch ($r['image_mini_type']) { case 1: // Пропорциональное уменьшение if ($size[0] > $size[1]) { $new_size[0] = $r['size_image_mini']; $new_size[1] = round($size[1] / ($size[0] / $new_size[0])); thumb_generate($url . $fn, $new_size[0], $new_size[1], false, 'resize', true, 'mini', false); } else { $new_size[1] = $r['size_image_mini']; $new_size[0] = round($size[0] / ($size[1] / $new_size[1])); thumb_generate($url . $fn, $new_size[0], $new_size[1], false, 'resize', true, 'mini', false); } break; case 2: // Обрезки (crop) по центру thumb_generate($url . $fn, $r['size_image_mini'], $r['size_image_mini'], false, 'resize_full_crop_center', true, 'mini', false); break; case 3: // Обрезки (crop) с левого верхнего края thumb_generate($url . $fn, $r['size_image_mini'], $r['size_image_mini'], false, 'crop', true, 'mini', false); break; case 4: // Обрезки (crop) с левого нижнего края $thumb = new Thumb($url . $fn, $postfix = '', $replace_file = true, $subdir = 'mini'); $thumb->crop($r['size_image_mini'], $r['size_image_mini'], 0, $new_size[1] - $r['size_image_mini']); //thumb_generate($url . $fn, $width, $height, false, $type_resize = 'resize_full_crop_center', true, 'mini', false); break; case 5: // Обрезки (crop) с правого верхнего края $thumb = new Thumb($url . $fn, $postfix = '', $replace_file = true, $subdir = 'mini'); $thumb->crop($r['size_image_mini'], $r['size_image_mini'], $new_size[0] - $r['size_image_mini'], 0); //thumb_generate($url . $fn, $width, $height, false, $type_resize = 'resize_full_crop_center', true, 'mini', false); break; case 6: // Обрезки (crop) с правого нижнего края $thumb = new Thumb($url . $fn, $postfix = '', $replace_file = true, $subdir = 'mini'); $thumb->crop($r['size_image_mini'], $r['size_image_mini'], $new_size[0] - $r['size_image_mini'], $new_size[1] - $r['size_image_mini']); //thumb_generate($url . $fn, $width, $height, false, $type_resize = 'resize_full_crop_center', true, 'mini', false); break; case 7: // Уменьшения и обрезки (crop) в квадрат if ($size[0] < $size[1]) { thumb_generate($url . $fn, $r['size_image_mini'], $r['size_image_mini'], false, 'resize_crop_center', true, 'mini', false); } else { thumb_generate($url . $fn, $r['size_image_mini'], $r['size_image_mini'], false, 'resize_h_crop_center', true, 'mini', false); } break; } thumb_generate($url . $fn, 100, 100, false, 'resize_full_crop_center', true, '_mso_i', false); }