} } elseif ($p['ext'] == 'mht') { $p = infra_loadJSON('*pages/mht/mht.php?preview' . $re . '&src=' . infra_toutf($p['src'])); if (!$p['images'][0]) { $default = true; $src = infra_theme('*imager/noimage.png'); //header('HTTP/1.1 404 Not Found'); //return; } else { $src = $p['images'][0]['src']; } } } } $src = infra_tofs($src); $type = imager_type($src); if (!is_null($ignoremark)) { //Метку ignore может выставить только администратор //На файлы с такой меткой водяной знак никогда не ставится $info = imager_makeInfo($src); if ($ignoremark && $info['water']) { //Если файл был с водяным знаком $orig = $info['orig']; if ($orig) { $orig = infra_theme($orig); if ($orig) { //Если оригинальный файл найден $r = copy($orig, $src); //Востановили оригинал без удаления оригинала $info['water'] = false; if (!$r) {
function imager_scale($src, $w, $h, $crop = false, $top = false, $bottom = false) { $type = imager_type($src); if (!$type || !$w && !$h) { return file_get_contents($src); } list($width_orig, $height_orig) = getimagesize($src); if (!$height_orig) { return file_get_contents($src); } //Размер который делаем не должен быть больше оригинального //На случай если требуемый размер слишком большой оставляем оригинальный if ($w && $width_orig < $w || !$w) { $w = $width_orig; } if ($h && $height_orig < $h || !$h) { $h = $height_orig; } $dh = 0; $dw = 0; if ($w && $h) { $k = $w / $h; $k_orig = $width_orig / $height_orig; if ($k_orig == $k) { //Не важно.. что уменьшаем пропорции останутся одинаковыми } elseif ($k_orig > $k) { //ширины в оригинале больше чем в требуемом.. с учётом размеров высоты. if (!$crop) { //Значит чтобы ничего не обрезать и быть в рамках меняем ширину а высота и так относительно меньше требуемой $h = false; //Значит высоту нужно высчитать отностительно ширины } else { //Ну а если нужно чтобы указанные размеры были полностью заполнены то ширину надо обрезать и равняться будем уже на высоту $d = $h / $height_orig; //Коэфициент на сколько изменяем оригинальный размер $dw = ($width_orig * $d - $w) / $d; } } else { if (!$crop) { //Значит меняем ширину а высота и так относительно меньше требуемой $w = false; } else { //Ну а если обрезать, то высоту/ Ровняемся на ширину $d = $w / $width_orig; //Коэфициент на сколько изменяем оригинальный размер $dh = ($height_orig * $d - $h) / $d; } } } if (!$w) { $w = $h / $height_orig * $width_orig; } if (!$h) { $h = $w / $width_orig * $height_orig; } $c = $crop && ($dh || $dw) ? ' crop' : ''; $t = $top && $c ? ' top' : ''; $b = $bottom && $c ? ' bottom' : ''; $dir = 'imager_resize/'; $dir = $dir . infra_forFS($src); $src_cache = $dir . '/w' . $w . ' x h' . $h . $c . $t . $b . '.' . $type; $image_p = imagecreatetruecolor($w, $h); $fn = 'imagecreatefrom' . $type; $image = $fn($src); //image_p пустая картинка но нужных размеров //image забрали нужную картинку которую нужно превратить в image_p //echo '<br>w '.$w;echo '<br>width_orig '.$width_orig;echo '<br>k '.$k;echo '<br>k_orig '.$k_orig;echo '<br>d '.$d;echo '<br>dw '.$dw;echo '<br>dh '.$dh;exit; if ($type == 'png') { imagealphablending($image_p, false); imagesavealpha($image_p, true); } if ($type == 'gif') { $colorcount = imagecolorstotal($image); imagetruecolortopalette($image_p, true, $colorcount); imagepalettecopy($image_p, $image); $transparentcolor = imagecolortransparent($image); if ($transparentcolor == -1) { $transparentcolor = 255; } imagefill($image_p, 0, 0, $transparentcolor); imagecolortransparent($image_p, $transparentcolor); } //if($crop&&$top)$dh=0; if ($top) { $fromtop = 0; } elseif ($bottom) { $fromtop = $dh; } else { $fromtop = $dh / 2; } imagecopyresampled($image_p, $image, 0, 0, $dw / 2, $fromtop, $w, $h, $width_orig - $dw, $height_orig - $dh); $fn = 'image' . $type; $quality = 90; if ($type == 'png') { $quality = 2; } ob_start(); $fn($image_p, null, $quality); $data = ob_get_contents(); ob_end_clean(); imagedestroy($image); imagedestroy($image_p); return $data; }