当前位置:首页 > PHP教程 > php图像处理 > 列表

PHP实现对png图像进行缩放的方法(支持透明背景)

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-12 19:47:28 浏览: 评论:0 

这篇文章主要介绍了PHP实现对png图像进行缩放的方法(支持透明背景),可实现php针对png图像的缩放功能,且支持透明背景,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了PHP实现对png图像进行缩放的方法,分享给大家供大家参考,具体实现方法如下:

  1. function smart_resize_image( $file$width = 0, $height = 0, $proportional = false, $output = 'file'$delete_original = true, $use_linux_commands = false ) 
  2.     if ( $height <= 0 && $width <= 0 ) { 
  3.       return false; 
  4.     } 
  5.     $info = getimagesize($file); 
  6.     $image = ''
  7.     $final_width = 0; 
  8.     $final_height = 0; 
  9.     list($width_old$height_old) = $info
  10.     if ($proportional) { 
  11.       if ($width == 0) $factor = $height/$height_old
  12.       elseif ($height == 0) $factor = $width/$width_old
  13.       else $factor = min ( $width / $width_old$height / $height_old);  
  14.       $final_width = round ($width_old * $factor); 
  15.       $final_height = round ($height_old * $factor); 
  16.     } 
  17.     else {     
  18.       $final_width = ( $width <= 0 ) ? $width_old : $width
  19.       $final_height = ( $height <= 0 ) ? $height_old : $height
  20.     } 
  21.     switch ($info[2] ) { 
  22.       case IMAGETYPE_GIF: 
  23.         $image = imagecreatefromgif($file); 
  24.       break
  25.       case IMAGETYPE_JPEG: 
  26.         $image = imagecreatefromjpeg($file); 
  27.       break
  28.       case IMAGETYPE_PNG: 
  29.         $image = imagecreatefrompng($file); 
  30.       break
  31.       default
  32.         return false; 
  33.     } 
  34.     $image_resized = imagecreatetruecolor( $final_width$final_height ); 
  35.     if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) { 
  36.       $trnprt_indx = imagecolortransparent($image); 
  37.       // If we have a specific transparent color 
  38.       if ($trnprt_indx >= 0) { 
  39.         // Get the original image's transparent color's RGB values 
  40.         $trnprt_color  = imagecolorsforindex($image$trnprt_indx); 
  41.         // Allocate the same color in the new image resource 
  42.         $trnprt_indx  = imagecolorallocate($image_resized$trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); 
  43.         // Completely fill the background of the new image with allocated color. 
  44.         imagefill($image_resized, 0, 0, $trnprt_indx); 
  45.         // Set the background color for new image to transparent 
  46.         imagecolortransparent($image_resized$trnprt_indx); 
  47.       } 
  48.       // Always make a transparent background color for PNGs that don't have one allocated already 
  49.       elseif ($info[2] == IMAGETYPE_PNG) { 
  50.         // Turn off transparency blending (temporarily) 
  51.         imagealphablending($image_resized, false); 
  52.         // Create a new transparent color for image 
  53.         $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); 
  54.         // Completely fill the background of the new image with allocated color. 
  55.         imagefill($image_resized, 0, 0, $color); 
  56.         // Restore transparency blending 
  57.         imagesavealpha($image_resized, true); 
  58.       } 
  59.     } 
  60.     imagecopyresampled($image_resized$image, 0, 0, 0, 0, $final_width$final_height$width_old$height_old); 
  61.     if ( $delete_original ) { 
  62.       if ( $use_linux_commands ) 
  63.         exec('rm '.$file); 
  64.       else 
  65.         @unlink($file); 
  66.     } 
  67.     switch ( strtolower($output) ) { 
  68.       case 'browser'
  69.         $mime = image_type_to_mime_type($info[2]); 
  70.         header("Content-type: $mime"); 
  71.         $output = NULL; 
  72.       break
  73.       case 'file'
  74.         $output = $file
  75.       break
  76.       case 'return'
  77.         return $image_resized
  78.       break
  79.       default
  80.       break
  81.     } 
  82.     switch ($info[2] ) { 
  83.       case IMAGETYPE_GIF: 
  84.         imagegif($image_resized$output); 
  85.       break
  86.       case IMAGETYPE_JPEG: 
  87.         imagejpeg($image_resized$output); 
  88.       break
  89.       case IMAGETYPE_PNG: 
  90.         imagepng($image_resized$output); 
  91.       break
  92.       default
  93.         return false; 
  94.     } 
  95.     return true; 

希望本文所述对大家的php程序设计有所帮助。

Tags: png图像缩放

分享到: