Let's say we have this image:
To fit this image in a 100x100 box while keeping the image aspect ratio, we have 2 options:
The first (and most used) is to resize and crop it.
If we have a image resource $img :
If we have the $fit variable set to true, then ve have this picture resized to a rectangle that can hold a 100x100 px square. If we set the $fit variable to false, we will have the image that will fit in a 100x100 px square. In both cases, the image is not yet a 100x100 px square. If we take our image, in the first case, is a rectangle with 100px height, in the seccond is a rectangle with 100px width. Now, to make it 100x100 px, we have to crop it. To do that, we center it, then crop it to the exact size:$w = imagesx($this->_img); $h = imagesy($this->_img); $nw = 100; $nh = 100; $fw = $nw; $fh = $nh; $nh_ = ( $h * $nw )/ $w; $fit = true; if($fit === true ){ if($nh_ < $nh){ $fh = $nh; $fw = ( $w * $nw )/ $h; }else{ $fw = $nw; $fh = ( $h * $nh )/ $w; } }else{ if($nh_ > $nh){ $fw = ( $w * $nh )/ $h; $fh = $nh; }else{ $fw = $nw; $fh = ( $h * $nw )/ $w; } } $tmp=imagecreatetruecolor($fw,$fh); imagecopyresampled($tmp,$img,0,0,0,0,$fw,$fh,$w,$h); $img = $tmp; uset($tmp);
After the calculations are over, we start cropping:// we recalculate the image size, because it is different now $w = imagesx($img); $h = imagesy($img); // we calculate the x and y position of the point that we will use to start cropping // so that we can fit a 100x100px square $x = ($w - $nw)/2; $y = ($h - $nh)/2;
// we make a 100 x 100 px image $tmp = imagecreatetruecolor($nw,$nh); // we create a color value for the background $clr = imagecolorallocate($tmp, 255,255,255); // we fill the image with our background imagefilledrectangle ($tmp, 0, 0, $nw, $nh, $clr); // we resample the image imagecopyresampled($tmp, $img, 0, 0, $x, $y, $nw, $nh, $nw, $nh); $img = $tmp;
Now $img is an image resource with a 100x100 px image in it, that we can do aditional opperations, or display it.
No comments:
Post a Comment