用PHP调整图像大小

I have script to resize image. It work well except output. In out put it gives binary stream but i want image . my code is following

class SimpleImage {

    var $image;
   var $image_type;

 function load($filename) {
    $image_info = getimagesize($filename);
  $this->image_type = $image_info[2];
  if( $this->image_type == IMAGETYPE_JPEG ) {
     $this->image = imagecreatefromjpeg($filename);
  } elseif( $this->image_type == IMAGETYPE_GIF ) {
     $this->image = imagecreatefromgif($filename);
  } elseif( $this->image_type == IMAGETYPE_PNG ) {
     $this->image = imagecreatefrompng($filename);
  }
  }
   function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
  if( $image_type == IMAGETYPE_JPEG ) {
     imagejpeg($this->image,$filename,$compression);
  } elseif( $image_type == IMAGETYPE_GIF ) {
     imagegif($this->image,$filename);         
  } elseif( $image_type == IMAGETYPE_PNG ) {
     imagepng($this->image,$filename);
  }   
  if( $permissions != null) {
     chmod($filename,$permissions);
  }
  }
  function output($image_type=IMAGETYPE_JPEG) {
  if( $image_type == IMAGETYPE_JPEG ) {
     imagejpeg($this->image);
  } elseif( $image_type == IMAGETYPE_GIF ) {
     imagegif($this->image);         
  } elseif( $image_type == IMAGETYPE_PNG ) {
     imagepng($this->image);
  }  

 }
  function getWidth() {
  return imagesx($this->image);
   }
   function getHeight() {
  return imagesy($this->image);
   }
   function resizeToHeight($height) {
  $ratio = $height / $this->getHeight();
  $width = $this->getWidth() * $ratio;
  $this->resize($width,$height);
  }
  function resizeToWidth($width) {
  $ratio = $width / $this->getWidth();
  $height = $this->getheight() * $ratio;
  $this->resize($width,$height);
   }
     function scale($scale) {
  $width = $this->getWidth() * $scale/100;
  $height = $this->getheight() * $scale/100; 
  $this->resize($width,$height);
     }
       function resize($width,$height) {
          $new_image = imagecreatetruecolor($width, $height);
         imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height,$this->getWidth(), $this->getHeight());
       $this->image = $new_image;   
        }      
     }
    ?>

and

   <?php
         if( isset($_POST['submit']) ) {
          include('SimpleImage.php');
         $image = new SimpleImage();
         $image->load($_FILES['uploaded_image']['tmp_name']);
              $image->resizeToWidth(400,400);
          $image->save($_FILES['uploaded_image']['name']);

         $image->output();
           } else {
       ?>

      <form action="" method="post" enctype="multipart/form-data">
       <input type="file" name="uploaded_image" />
       <input type="submit" name="submit" value="Upload" />
     </form>

       <?php
               }
              ?>

Set the content type header at the beginning of your php file, so that the browser understands that an image is to be displayed. (Use image/png for png files).

header('Content-type: image/jpeg');

I can't find any HTTPResponse header being manipulated. You will need to set the header content-type to the corresponding image before flushing out the image binary.

E.g.

header('Content-Type: image/jpeg');

Read this related post and reference.

PS: You need to make sure nothing no other HTML is sent before and after the image.

Your code suggests you're trying to inject an image inside your HTML. While it can actually be done (and some browsers actually support it), the syntax is different and I'm sure anyway that it's not what you're trying to accomplish. You have two options:

  1. Save the image into disc (you already have a save method in your class) and load from an <img> tag
  2. Generate a Content-Type header, output the binary stream and stop the script execution.