rozsirenie Nette\Image o resize do boxu so zachovanim pomeru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- edke
- Člen | 198
Casto upravujem obrazky sposobom, ze obrazok potrebujem vyrezat a zmensit tak, aby bol zachovany pomer stan. Ak by to bolo pre niekoho zaujimave a zaroven by to David mal chut trosku ucesat a rozsirit Nette\Image, bolo by to idealne a nemusel by som si rozsirovat to sam :)
function canvas($width, $height, $attr) {
$result= array();
$deltas= array();
$variants= explode(';', $attr);
foreach($variants as $key => $variant)
{
list($a, $b)= explode('x', $variant);
$w= round($a/$b*$height);
if (($delta= ($width-$w))>=0) {
$result[$delta]= (object) array( 'left' => round(($width-$w)/2), 'top' => 0, 'width' => $width-$delta, 'height' => $height);
$deltas[]= $delta;
}
$h= round($b/$a*$width);
if (($delta= ($height-$h))>=0) {
$result[$delta]= (object) array( 'left' => 0 , 'top' => round($delta/2), 'width' => $width, 'height' => $height-$delta);
$deltas[]= $delta;
}
}
return $result[min($deltas)];
}
$image= Image::fromFile('sourceimg.png');
$crop= canvas($image->getWidth(),$image->getHeight(), '300x200;200x300');
$image->crop($crop->left, $crop->top, $crop->width, $crop->height);
if ( $image->getWidth() > $image->getHeight() ) {
$image->resize(300,200);
}
else {
$image->resize(200,300);
}
$image->send();
Nie je to napisane prave najelegantnejsie, aj to predavanie parametrov pre funkciu by sa dalo urcite spravit krajsie, ale pre nazornost to staci. A ak by David mal chut to pouzit, urcite si to tak ci tak upravi :)
- kravčo
- Člen | 721
Pokiaľ viem, Nette\Image predvolene zachováva pomer strán.
$img = Image::fromFile('images/photo.jpg');
$img->resize(300, 300);
$img->send();
Uvedený kód zmenší fotku na najväčší možný obrázok, ktorý sa zmestí do štvorca 300×300, teda pri pomere strán 3:2 vznikne buď fotka 300×200 alebo 200×300, podľa orientácie.