2012-04-09 154 views
0

我从输入框中提取提交网站网址的所有图像。它可以工作,但我希望这个图像不应该被拉伸,即使尺寸图像大于100X100或小于100x100。我希望这个图像应该是100X100没有拉伸。图片越来越延伸

假设我的形象“http://l.yimg.com/bt/api/res/1.2/vni2Ykd.HwvosAbFxUVzHQ--/YXBwaWQ9eW5ld3M7Y2g9MjAwOTtjcj0xO2N3PTMwODY7ZHg9MDtkeT0zOTA7Zmk9dWxjcm9wO2g9MjgwO3E9ODU7dz00MzA-/http://l.yimg.com/os/这SRC 153/2012/04/08/142583283-10-jpg_170430.jpg“

我想图像大小应该是100X100。他们有什么功能可以在我展示这个图片时创建缩略图。或者你有其他解决方案。

感谢

+2

是的。你有没有在本网站搜索“创建缩略图”?这是一个很好的主题。 – deceze 2012-04-09 07:00:04

回答

1

你可以尝试这样...保存下面的代码在resize.php

resize.php

<?php 

    /** 

    * Image Resizer. 

    * @author : Harish Chauhan 

    * @copyright : Freeware 

    * About :This PHP script will resize the given image and can show on the fly or save as image file. 

    * 

    */ 





    define("HAR_AUTO_NAME",1); 

    Class RESIZEIMAGE 

    { 

     var $imgFile=""; 

     var $imgWidth=0; 

     var $imgHeight=0; 

     var $imgType=""; 

     var $imgAttr=""; 

     var $type=NULL; 

     var $_img=NULL; 

     var $_error=""; 



     /** 

     * Constructor 

     * 

     * @param [String $imgFile] Image File Name 

     * @return RESIZEIMAGE (Class Object) 

     */ 



     function RESIZEIMAGE($imgFile="") 

     { 
      if (!function_exists("imagecreate")) 

      { 

       $this->_error="Error: GD Library is not available."; 

       return false; 

      } 



      $this->type=Array(1 => 'GIF', 2 => 'JPG', 3 => 'PNG', 4 => 'SWF', 5 => 'PSD', 6 => 'BMP', 7 => 'TIFF', 8 => 'TIFF', 9 => 'JPC', 10 => 'JP2', 11 => 'JPX', 12 => 'JB2', 13 => 'SWC', 14 => 'IFF', 15 => 'WBMP', 16 => 'XBM'); 

      if(!empty($imgFile)) 

       $this->setImage($imgFile); 

     } 

     /** 

     * Error occured while resizing the image. 

     * 

     * @return String 

     */ 

     function error() 

     { 

      return $this->_error; 

     } 



     /** 

     * Set image file name 

     * 

     * @param String $imgFile 

     * @return void 

     */ 

     function setImage($imgFile) 

     { 

      $this->imgFile=$imgFile; 

      return $this->_createImage(); 

     } 

     /** 

     * 

     * @return void 

     */ 

     function close() 

     { 

      return @imagedestroy($this->_img); 

     } 

     /** 

     * Resize a image to given width and height and keep it's current width and height ratio 

     * 

     * @param Number $imgwidth 

     * @param Numnber $imgheight 

     * @param String $newfile 

     */ 

     function resize_limitwh($imgwidth,$imgheight,$newfile=NULL) 

     { 

      $image_per = 100; 

      list($width, $height, $type, $attr) = @getimagesize($this->imgFile); 

      if($width > $imgwidth && $imgwidth > 0) 

       $image_per = (double)(($imgwidth * 100)/$width); 



      if(floor(($height * $image_per)/100)>$imgheight && $imgheight > 0) 

       $image_per = (double)(($imgheight * 100)/$height); 



      $this->resize_percentage($image_per,$newfile); 



     } 

     /** 

     * Resize an image to given percentage. 

     * 

     * @param Number $percent 

     * @param String $newfile 

     * @return Boolean 

     */ 

     function resize_percentage($percent=100,$newfile=NULL) 

     { 

      $newWidth=($this->imgWidth*$percent)/100; 

      $newHeight=($this->imgHeight*$percent)/100; 

      return $this->resize($newWidth,$newHeight,$newfile); 

     } 

     /** 

     * Resize an image to given X and Y percentage. 

     * 

     * @param Number $xpercent 

     * @param Number $ypercent 

     * @param String $newfile 

     * @return Boolean 

     */ 

     function resize_xypercentage($xpercent=100,$ypercent=100,$newfile=NULL) 

     { 

      $newWidth=($this->imgWidth*$xpercent)/100; 

      $newHeight=($this->imgHeight*$ypercent)/100; 

      return $this->resize($newWidth,$newHeight,$newfile); 

     } 



     /** 

     * Resize an image to given width and height 

     * 

     * @param Number $width 

     * @param Number $height 

     * @param String $newfile 

     * @return Boolean 

     */ 

     function resize($width,$height,$newfile=NULL) 

     { 

      if(empty($this->imgFile)) 

      { 

       $this->_error="File name is not initialised."; 

       return false; 

      } 

      if($this->imgWidth<=0 || $this->imgHeight<=0) 

      { 

       $this->_error="Could not resize given image"; 

       return false; 

      } 

      if($width<=0) 

       $width=$this->imgWidth; 

      if($height<=0) 

       $height=$this->imgHeight; 



      return $this->_resize($width,$height,$newfile); 

     } 



     /** 

     * Get the image attributes 

     * @access Private 

     *  

     */ 

     function _getImageInfo() 

     { 

      @list($this->imgWidth,$this->imgHeight,$type,$this->imgAttr)[email protected]($this->imgFile); 

      $this->imgType=$this->type[$type]; 

     } 



     /** 

     * Create the image resource 

     * @access Private 

     * @return Boolean 

     */ 

     function _createImage() 

     { 

      $this->_getImageInfo($this->imgFile); 

      if($this->imgType=='GIF') 

      { 

       $this->[email protected]($this->imgFile); 

      } 

      elseif($this->imgType=='JPG') 

      { 

       $this->[email protected]($this->imgFile); 

      } 

      elseif($this->imgType=='PNG') 

      { 

       $this->[email protected]($this->imgFile); 

      }   

      if(!$this->_img || [email protected]_resource($this->_img)) 

      { 

       $this->_error="Error loading ".$this->imgFile; 

       return false; 

      } 

      return true; 

     } 



     /** 

     * Function is used to resize the image 

     * 

     * @access Private 

     * @param Number $width 

     * @param Number $height 

     * @param String $newfile 

     * @return Boolean 

     */ 

     function _resize($width,$height,$newfile=NULL) 

     { 

      if (!function_exists("imagecreate")) 

      { 

       $this->_error="Error: GD Library is not available."; 

       return false; 

      } 



      [email protected]($width,$height); 

      //imagecolortransparent($newimg, imagecolorat($newimg, 0, 0)); 



      if($this->imgType=='GIF' || $this->imgType=='PNG') 

      { 

       /** Code to keep transparency of image **/ 

       $colorcount = imagecolorstotal($this->_img); 

       if ($colorcount == 0) $colorcount = 256; 

       imagetruecolortopalette($newimg,true,$colorcount); 

       imagepalettecopy($newimg,$this->_img); 

       $transparentcolor = imagecolortransparent($this->_img); 

       imagefill($newimg,0,0,$transparentcolor); 

       imagecolortransparent($newimg,$transparentcolor); 

      } 



      @imagecopyresampled ($newimg, $this->_img, 0,0,0,0, $width, $height, $this->imgWidth,$this->imgHeight); 







      if($newfile===HAR_AUTO_NAME) 

      { 

       if(@preg_match("/\..*+$/",@basename($this->imgFile),$matches)) 

        [email protected]_replace($this->imgFile,"_har",[email protected]($matches[0]),0);    

      } 

      elseif(!empty($newfile)) 

      { 

       if([email protected]_match("/\..*+$/",@basename($newfile))) 

       { 

        if(@preg_match("/\..*+$/",@basename($this->imgFile),$matches)) 

         $newfile=$newfile.$matches[0]; 

       } 

      } 



      if($this->imgType=='GIF') 

      { 

       if(!empty($newfile)) 

        @imagegif($newimg,$newfile); 

       else 

       { 

        @header("Content-type: image/gif"); 

        @imagegif($newimg); 

       } 

      } 

      elseif($this->imgType=='JPG') 

      { 

       if(!empty($newfile)) 

        @imagejpeg($newimg,$newfile); 

       else 

       { 

        @header("Content-type: image/jpeg"); 

        @imagejpeg($newimg); 

       } 

      } 

      elseif($this->imgType=='PNG') 

      { 

       if(!empty($newfile)) 

        @imagepng($newimg,$newfile); 

       else 

       { 

        @header("Content-type: image/png"); 

        @imagepng($newimg); 

       } 

      } 

      @imagedestroy($newimg); 

     } 

    } 

?> 

包括文件resize.php在你的代码和使用下面的代码来调整大小或为图像创建缩略图

include "resize.php"; 
$path = "your image path"; 
$newname = "your image name to be resized"; 

$rimg=new RESIZEIMAGE("$path/$newname"); 
$width = $rimg->imgWidth; 
if($width > 800){ 
    $per = round(800/$width*100); 
    $rimg->resize_percentage($per,"$path/$newname"); //resize image 
} 
$rimg->resize(100,100,"$path/$newname"); //create thumbnail for an image 
$rimg->close();