@realnin

Как сделать ресайз изображения по высоте?

Как сделать ресайз изображений по высоте, т.е на выходе получить фиксированную высоту изображений, но без указания ширины, чтобы соотношение сторон сохранялось

ресайз так работает, только получается фиксированная ширина
//Создание миниатюры
								$tmb = new thumbnail($album_dir.$image_rename.$res_type);
								$tmb->size_auto(300);
								$tmb->jpeg_quality('85');
								$tmb->save($album_dir.'viss_'.$image_rename.$res_type);


где 300 - это ширина картинки, а мне нужно чтобы вместо этой ширины была высота...
Т.е хочу получить на выходе фиксированную высоту и разные ширины

функция
function size_auto($size = 100, $site = 0, $jqCrop = 0) {

		$size = explode ("x", $size);
		
		if($jqCrop){

			return $this->jqCrop( intval($size[0]), intval($size[1]), $jqCrop);
			
		} else if ( count($size) == 2 ) {
			$size[0] = intval($size[0]);
			$size[1] = intval($size[1]);
			return $this->crop( intval($size[0]), intval($size[1]) );

		} else {
			$size[0] = intval($size[0]);
			return $this->scale( intval($size[0]), $site);

		}

	}

	function crop($nw, $nh) {

		$w = $this->img['lebar'];
		$h = $this->img['tinggi'];

		if( $w <= $nw AND $h <= $nh ) {
			$this->img['lebar_thumb'] = $w;
			$this->img['tinggi_thumb'] = $h;
			return 0;
		}

		$nw = min($nw, $w);
		$nh = min($nh, $h);

		$size_ratio = max($nw / $w, $nh / $h);

		$src_w = ceil($nw / $size_ratio);
		$src_h = ceil($nh / $size_ratio);

		$sx = floor(($w - $src_w)/2);
		$sy = floor(($h - $src_h)/2);

		$this->img['des'] = imagecreatetruecolor($nw, $nh);

		if ( $this->img['format'] == "PNG" ) {
			imagealphablending( $this->img['des'], false);
			imagesavealpha( $this->img['des'], true);
		}

		imagecopyresampled($this->img['des'],$this->img['src'],0,0,$sx,0,$nw,$nh,$src_w,$src_h);

		$this->img['src'] = $this->img['des'];
		return 1;
	}
	
	function jqCrop($nw, $nh, $cropData) {
		$cropDataExp = explode('|', $cropData);
		$left = $cropDataExp[0];
		$top = $cropDataExp[1];
		
		if(!$left OR $left <= 0) $left = 0;
		if(!$top OR $top <= 0) $top = 0;

		if($nw < 100) $nw = 100;
		if($nh < 100) $nh = 100;
		
		$w = $this->img['lebar'];
		$h = $this->img['tinggi'];

		if( $w <= $nw AND $h <= $nh ) {
			$this->img['lebar_thumb'] = $w;
			$this->img['tinggi_thumb'] = $h;
			return 0;
		}

		$nw = min($nw, $w);
		$nh = min($nh, $h);

		$size_ratio = max($nw / $w, $nh / $h);

		$src_w = ceil($nw / $size_ratio);
		$src_h = ceil($nh / $size_ratio);

		$this->img['des'] = imagecreatetruecolor($nw, $nh);

		if ( $this->img['format'] == "PNG" ) {
			imagealphablending( $this->img['des'], false);
			imagesavealpha( $this->img['des'], true);
		}

		imagecopyresampled($this->img['des'], $this->img['src'], 0, 0, $left, $top, $nw, $nh, $nw, $nh);

		$this->img['src'] = $this->img['des'];
		
		return 1;
	}
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AlikDex
function size_auto($size = 100, $site = 0, $jqCrop = 0) {
    //....
}

$site = 0 вроде отвечает за основополагающую вертикаль или горизонталь.
Т.е. поидее
$tmb->size_auto(300,1);
должно отскалировать по высоте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы