misiek172
3.07.2008, 07:55:05
Witam.
Zawsze miałem problemy z matematyka dotyczącą przeliczania wymiarów obrazka,
mam obrazk i musze go tak ze skalowac aby zachowl proporcje obrazka 211 x 98 czyli 2.15, nie chodzi o to ze musi miec takie wymiary, tylko musi miec taka proporcje i nie wieksze wymiary niz 211 x 98
pozdrawiam, Lukasz.
legorek
3.07.2008, 08:30:44
<?php
/*
$x,$y - wymiary obrazka do zmniejszenia
$maxX, $maxY - maksymalne wymiary
$newX, $newY - nowe wymiary
*/
if (($x > $maxX) OR ($y > $maxY)) {
if ($x > $y) { // Poziomy obraz
$factor = $maxX / $x;
$newX = $maxX;
$newY = round($y * $factor); } else { // Pionowy albo albo kwadratowy
$factor = $maxY / $y;
$newX = round($x * $factor); $newY = $maxY;
}
}
?>
Troszkę mnie załamaleś tym pytaniem.
misiek172
3.07.2008, 10:35:53
i tak jest zle, bo jak jest za duzy obrazek, to skaluje sie dobrze w poziome ale wysokosc wykracza poza maksymalna
dobra juz dokladnie wiem o co mi chodzi:
obrazek po skalowaniu musi miec wysokosc 98 i szerokosc 211 przy zachowaniu proporcji,
jezeli jest wiekszy to go zmiejszamy zachowujac proporcje do 98 x 211 jezeli mneijszy to zwiekszamy do 98x 211 z zachowaniem proporcji
legorek
4.07.2008, 11:44:40
Nie doczytałem tego warunku na proporcje. Wystarczy zmiana kilku znaków.
<?php
if ($x/$y >= 2.15) {
$factor = $maxX / $x;
$newX = $maxX;
$newY = round($y * $factor); } else {
$factor = $maxY / $y;
$newX = round($x * $factor); $newY = $maxY;
}
?>
prościej i krócej chyba będzie:
<?php
$ratio = round(max($width / 211
, $height / 98
)); $newWidth = $width / $ratio;
$newHeight = $height / $ratio;
?>