用PHP调整图像大小

时间:2010-02-23 08:11:21

标签: php

我有调整图片大小的脚本。除输出外,它运行良好。在输出它提供二进制流但我想要图像。我的代码如下              

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;   
        }      
     }
    ?>

   <?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
               }
              ?>

3 个答案:

答案 0 :(得分:1)

您的代码建议您尝试在HTML中注入图片。虽然它实际上可以完成(并且一些浏览器实际上支持它),但语法是不同的,我确信无论如何它不是你想要完成的。您有两种选择:

  1. 将图片保存到光盘中(您的课程中已有save方法)并从<img>标记加载
  2. 生成Content-Type标头,输出二进制流并停止执行脚本。

答案 1 :(得分:0)

在php文件的开头设置内容类型标题,以便浏览器了解要显示的图像。 (对{png文件使用image/png)。

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

答案 2 :(得分:0)

我找不到任何HTTPResponse标头被操纵。在清除图像二进制文件之前,您需要将标题内容类型设置为相应的图像。

E.g。

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

阅读此相关的postreference

PS:您需要确保在图像之前和之后不会发送任何其他HTML。