Re: scaling images
On Sep 20, 11:05 am, hp...@xentra.ro (Puiu Hrenciuc) wrote:
> Hulf wrote:
> > Sorry my message was cut off.
>
> > Yes I want to scale to 300 x 200px before I upload the image to my folder.
> > Here is my code so far.
>
> > thanks,
>
> > H.
>
> > $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
>
> > echo $x=$imageinfo[0];
> > echo $y=$imageinfo[1];
>
> > $newwidth = 300;
> > $newheight = 200;
>
> > // Load
> > $thumb = imagecreatetruecolor($newwidth, $newheight);
> > $source = imagecreatefromjpeg($_FILES['userfile']['tmp_name']);
>
> > // Resize
> > imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width,
> > $height);
>
> > // Output
> > $myimage = imagejpeg($thumb);
>
> > $target_path = "../property_images/$property_id/".basename(
> > $_FILES['userfile']['name']);
>
> > $img_url= $property_id."/".basename( $_FILES['userfile']['name']);
>
> > if(move_uploaded_file($myimage, $target_path)) {
> > /* echo "The file ". basename( $_FILES['userfile']['name']).
> > " has been uploaded";*/
> > } else{
> > echo "There was an error uploading the file, please try again!";
> > }
>
> After resizing the image you will have the newly created JPEG
> data (binary) in the $myimage variable, not a file(name).
>
> So you actually have to do something like:
>
> file_put_contents($target_path,$myimage);
>
> This will put the content in the $myimage variable ( the resized JPEG
> data) into the target path. Note that you should also check if the
> uploaded file is a supported image, so do something like :
>
> if($source = @imagecreatefromjpeg($_FILES['userfile']['tmp_name']))
> {
> // file is a supported image type, resize it and save it}
>
> else
> {
> // unsupported image file or not an image file at all,
> // display some error here
>
> }
>
> Note:
> file_put_contents is a PHP5 only function, use fopen,fwrite,fclose
> for PHP4.
Also, you need to bring in a calculation to resize this with the same
dimensions... otherwise you're going to skew your image. From one of
my classes that resizes images very abstractly, I have this (you'll
have to change the $this references to your image...)
/**
* get the sizes
*/
$oldX = imageSX($this->_image);
$oldY = imageSY($this->_image);
/**
* if old x is bigger than max s or old y is bigger than max y
*/
if ($oldX > $this->_maxWidth || $oldY > $this->_maxHeight ) {
if ($oldX > $oldY) {
$newX = $this->_maxWidth;
$newY = $oldY * ($this->_maxWidth / $oldX);
}
if ($oldX < $oldY) {
$newX = $oldX * ($this->_maxWidth / $oldY);
$newY = $this->_maxHeight;
}
if ($oldX == $oldY) {
//means they're a square
if ($this->_maxWidth < $this->_maxHeight) {
$divide = $this->_maxWidth / $oldX;
}
else {
$divide = $this->_maxHeight / $oldY;
}
$newX = $oldX * $divide;
$newY = $oldY * $divide;
}
}
else {
$newX = $oldX;
$newY = $oldY;
}
Now, when you resize, you should use your $newX and $newY so that your
image isn't skewed.
|