2016-02-02 69 views

回答

0

试试这个,它的工作对我来说:

function img_resize($file,$width=0,$height=0,$proportional=false,$output='file') { 

     if ($height <= 0 && $width <= 0) return false; 
     # Setting defaults and meta 
     $info= getimagesize($file); 
     $image= ''; 
     $final_width= 0; 
     $final_height= 0; 
     list($width_old, $height_old) = $info; 
     # Calculating proportionality 
     if ($proportional) { 
      if  ($width == 0) $factor = $height/$height_old; 
      elseif ($height == 0) $factor = $width/$width_old; 
      else     $factor = min($width/$width_old, $height/$height_old); 
      $final_width = round($width_old * $factor); 
      $final_height = round($height_old * $factor); 
     } 
     else { 
      $final_width = ($width <= 0) ? $width_old : $width; 
      $final_height = ($height <= 0) ? $height_old : $height; 
     } 
     # Loading image to memory according to type 
     switch ($info[2]) { 
      case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break; 
      case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break; 
      case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break; 
      default: return false; 
     } 
     # This is the resizing/resampling/transparency-preserving magic 
     $image_resized = imagecreatetruecolor($final_width, $final_height); 
     if (($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG)) { 
      $transparency = imagecolortransparent($image); 
      if ($transparency >= 0) { 
      $transparent_color = imagecolorsforindex($image, $trnprt_indx); 
      $transparency  = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); 
      imagefill($image_resized, 0, 0, $transparency); 
      imagecolortransparent($image_resized, $transparency); 
      } 
      elseif ($info[2] == IMAGETYPE_PNG) { 
      imagealphablending($image_resized, false); 
      $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); 
      imagefill($image_resized, 0, 0, $color); 
      imagesavealpha($image_resized, true); 
      } 
     } 
     imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old); 
     # Preparing a method of providing result 
     switch (strtolower($output)) { 
      case 'browser': 
      $mime = image_type_to_mime_type($info[2]); 
      header("Content-type: $mime"); 
      $output = NULL; 
      break; 
      case 'file': 
      $output = $file; 
      break; 
      case 'return': 
      return $image_resized; 
      break; 
      default: 
      break; 
     } 
     # Writing image according to type to the output destination 
     switch ($info[2]) { 
      case IMAGETYPE_GIF: imagegif($image_resized, $output); break; 
      case IMAGETYPE_JPEG: imagejpeg($image_resized, $output); break; 
      case IMAGETYPE_PNG: imagepng($image_resized, $output); break; 
      default: return false; 
     } 
     return true; 
    } 

调用函数象下面这样:

$image = new Phalcon\Image\Adapter\GD(YOUR_IMAGE_PATH); 
$a=img_resize($image->getRealpath(),$image->getWidth(),$image->getHeight()); 

某些代码可能您没有必要。

+0

谢谢你的支持。但背景总是对我来说是黑色的:/。 – John

+0

图像的原始背景是什么?白色还是黑色? –

+0

我的形象是透明的 – John

相关问题