Proporcjonalny resize obraz??w.

Prosty skrypt, kt??ry zwr??ci obraz zmniejszony do odpowiednich rozmiar??w zachowuj?c jego proporcje.

function new_picture_size($max_w, $max_h, $path){
	$size = getimagesize($path);
	$w = $size[0];
	$h = $size[1];
	$nw=$w;
	$nh=$h;
	$wx = $max_w/$w;
	$wy = $max_h/$h;

	if(($w <= $max_w)&&($h <= $max_h)) {
 		$nw = $w;
 		$nh = $h;
 	}else if((($wy * $h)<=$max_h)&&(($wy * $w)<=$max_w)) {
 		$nh = ceil($wy*$h);
 		$nw = ceil($wy*$w);
 	}else if((($wx * $h)<=$max_h)&&(($wx * $w)<=$max_w)){
 		$nh = ceil($wx*$h);
 		$nw = ceil($wx*$w);
	}else{
		if($wx<$wy)
			$wyzn = $wx/2;
		else
			$wyzn = $wy/2;

		$nh = ceil($wyzn*$h);
 		$nw = ceil($wyzn*$w);
	}

	$s = array(0=>$nw, 1=>$nh, 2=>$w, 3=>$h);
	return $s;
}

np.

$dim =new_picture_size(400,50, "obrazek.jpg");
echo("nowa szeroko??? to: ".$dim[0]." px");
echo("nowa wysoko??? to: ".$dim[1]." px");
echo("stara szeroko??? to: ".$dim[2]." px");
echo("stara wysoko??? to: ".$dim[3]." px");

Przydatne. Napisane dawno temu. Odkurzone dzisiaj. Z tymi wynikami mo??emy sobie spokojnie wywo??a? funkcje resiz’u np:

imagecopyresampled($newpic, $oldpic, 0, 0, 0, 0, $dim[0], $dim[1], $dim[2], $dim[3]);

2 myśli nt. „Proporcjonalny resize obraz??w.

  1. Najki

    Moja wersja. Mo??e si? przyda :>.

    /**
    * Wylicza szerokosc i wysokosc obrazka na podstawie jego obecnego rozmiaru i
    * podanego limitu. Najpierw podajemy limit wysokosci i szerokosci. Nastepnie
    * podajemy aktualne wymiary obrazka. Na koniec podajemy punkt odniesienia, ktorym
    * moze byc szerokosc (width), wysokosc (height) lub obie wartosci (auto).
    *
    * Funkcja zwroci nowa szerokosc i wysokosc obrazka ograniczona limitami i z
    * zachowanymi proporcjami w formie tablicy dwuelementowej.
    *
    * @author Nikodem ‚Najki’ Osmialowski
    *
    * @param integer $max_width limit szerokosci obrazka
    * @param integer $max_height limit wysokosci obrazka
    * @param integer $width aktualna szerokosc obrazka
    * @param integer $height aktualna wysokosc obrazka
    * @param string $master_dim odniesienie przy wyliczaniu proporcji [auto, width, height]
    * @return array
    */
    function imagesize($max_width, $max_height, $width, $height, $master_dim) {
    if ($master_dim == ‚width’) {
    $new_width = ($width > $max_width) ? $max_width : $width;
    $new_height = ceil($height * $new_width / $width);
    }
    elseif ($master_dim == ‚height’) {
    $new_height = ($height > $max_height) ? $max_height : $heigth;
    $new_width = ceil($width * $new_height /$height);
    }
    else {
    $new_width = ($width > $this->width) ? $this->width : $width;
    $new_height = ceil($height * $new_width / $width);

    if ($new_height > $max_height) {
    $height = $new_height;
    $new_height = $max_height;
    $new_width = ceil($new_width * $new_height / $height);
    }
    }

    return array($new_width, $new_height);
    }

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>