php ile görüntü yeniden boyutlandırmak

3 Cevap

hi every one 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;   
        }      
     }
    ?>

ve

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

Sizin kodunuz HTML içinde bir görüntü enjekte çalışıyoruz göstermektedir. Aslında (ve bazı tarayıcılar gerçekte bunu destekleyen) yapılabilir iken, sözdizimi farklı olduğunu ve bunu başarmak için çalışıyoruz ne olmadığını zaten eminim. İki seçeneğiniz var:

  1. Diskin içine görüntüyü kaydetme (zaten sınıfta bir save yöntemi var) ve bir <img> etiketi yük
  2. Content-Type üstbilgisi, çıktı ikili akışı ve stop komut yürütme oluşturun.

Tarayıcı bir görüntü ekrana olduğunu anlar, böylece php dosyanızın başında içerik türü başlığını ayarlayın. (Png dosyaları için kullanın image/png).

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

Ben herhangi bir HTTPResponse başlık manipüle ediliyor bulamıyorum. Sen resim ikilisini dışarı kızarma önce gelen görüntüye başlık içerik türünü ayarlamanız gerekir.

Örneğin

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

Bunu okuyun ilgili post ve reference.

PS: Bu başka hiçbir HTML görüntü önce ve sonra gönderilen emin bir şey yapmak gerekir.