コード例 #1
0
ファイル: imager.php プロジェクト: akiyatkin/imager
             }
         } 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) {
コード例 #2
0
ファイル: imager.inc.php プロジェクト: akiyatkin/imager
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;
}