Gå til innhold

Bilderesize - sliter med å finne riktig ratio.


Anbefalte innlegg

(skjer med at det ikke er php-highlight her?)

if($_POST['newpix'])
{
$origimg = $_FILES['pix']['tmp_name'];
$imagedata = getimagesize($origimg);
$maxw = 204;
$maxh = 250;
$rand = date('U');
$pixname = 'pix/intro/'.$_GET['id'].'_'.$rand.'.jpg';
$pname = $_GET['aID'].'_'.$rand.'.jpg';
$imagewidth = $imagedata[0];
$imageheight = $imagedata[1];
if(($imagewidth > $maxw) || ($imageheight > $maxh))
{
	if($imagewidth > $imageheight)
	{
		$lol = '1';
		$newimgw = $maxw;
		$ratio = $maxh/$imageheight;
		$newimgh = $imageheight*$ratio;
	} elseif($imageheight > $imagewidth)
	{
		$lol = '2';
		$newimgh = $maxh;
		$ratio = $maxw/$imageheight;
		$newimgw = $imagewidth*$ratio;		 
	} else
	{
		$lol = '3';
		$newimgh = $maxh;
		$newimgw = $maxw;
	}
	$marg = ($newimgw-$maxw)/2;
	$newimg = imagecreatetruecolor($newimgw, $newimgh);
	$oldimg = imagecreatefromjpeg($origimg);
	imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, $newimgw, $newimgh, $imagewidth, $imageheight);
	imagejpeg($newimg, $pixname, 100);
} else
{
	$newimg = imagecreatetruecolor($imagewidth, $imageheight);
	$oldimg = imagecreatefromjpeg($origimg);
	imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, $imagewidth, $imageheight, $imagewidth, $imageheight);
	imagejpeg($newimg, $pixname, 100);
	$marg = ($maxw-$imagewidth)/2;
}
$margin = round($marg);
} else
{
$pname = $fetch['pix'];
$margin = $fetch['pixM'];
}
echo '$lol='.$lol;
echo '<br />';
echo '$newimgw='.$newimgw;
echo '<br />';
echo '$ratio='.$ratio;
echo '<br />';
echo '$newimgh='.$newimgh;
echo '<br />';
echo '$imageheight='.$imageheight;
echo '<br />';
echo '$imagewidth='.$imagewidth;

Resultat:

$lol=2

$newimgw=139.975384615

$ratio=0.313846153846

$newimgw=250

$imageheight=650

$imagewidth=446

Jeg prøvde å resize samme bilde i Photoshop. Da jeg satte bredden til 250px ble høyden satt til 172.px.

- Høyde-ratioen skal altså være 0,313846153846.

- Bredde-ratioen skal være 0,392376 (172/446 - 172px photoshop | 446px orignal bilde-bredde)

- 0,392376*650=255 (så bredde-ratioen vil ikke fungere som høyde-ratio).

Dette betyr at jeg må ha to forskjellige ratioer, og problemet er hvordan jeg skal finne ut bredde-ratioen (og høyde-ratioen når bildet er bredere enn det er høyt).

 

Takk for hjelp.

Lenke til kommentar
Videoannonse
Annonse

Du er litt på villspor når du kalkulerer ut den nye høyden og bredden. Hvorvidt høyden er større enn bredden eller motsatt er irrelevant for kalkuleringen. Det du kan gjøre er å regne ut ratio for både maksstørrelsen og den reelle størrelsen. Ut fra det kan man finne ut om man må endre størrelsen ut fra høyden eller bredden.

 

$maxw = 204;
$maxh = 250;

$imagewidth = 446;
$imageheight = 650;

$maxratio = $maxh/$maxw;
$imageratio = $imageheight/$imagewidth;

if ($maxratio > $imageratio)
{
  //Image is proportionally wider than max, resize using width
  $newimgw = $maxw;
  $newimgh = ($maxw/$imagewidth)*$imageheigth;
}
else
{
  //Image is either proportionally higher than max or they're the same.
  // Either way we'll use the height
  $newimgh = $maxh;
  $newimgw = ($maxh/$imageheight)*$imagewidth;
}

Dette vil gi deg de riktige verdiene bortsett fra at man risikerer at de kan være flyttall. Bruk floor, ceil eller round for å runde av $newimgh og $newimgw når de blir kalkulert.

Endret av Ernie
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...