Home  >  Article  >  Backend Development  >  PHP scales png images and supports transparent background_PHP tutorial

PHP scales png images and supports transparent background_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:22:17934browse

PHP 对png 图像进行缩放,支持透明背景

   PHP 对 png 图像进行缩放,支持透明背景

  function smart_resize_image( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false )

  {

  if ( $height <= 0 && $width <= 0 ) {

  return false;

  }

  $info = getimagesize($file);

  $image = '';

  $final_width = 0;

  $final_height = 0;

  list($width_old, $height_old) = $info;

  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;

  }

  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;

  }

  $image_resized = imagecreatetruecolor( $final_width, $final_height );

  if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {

  $trnprt_indx = imagecolortransparent($image);

  // If we have a specific transparent color

  if ($trnprt_indx >= 0) {

  // Get the original image's transparent color's RGB values

  $trnprt_color = imagecolorsforindex($image, $trnprt_indx);

  // Allocate the same color in the new image resource

  $trnprt_indx = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

  // Completely fill the background of the new image with allocated color.

  imagefill($image_resized, 0, 0, $trnprt_indx);

  // Set the background color for new image to transparent

  imagecolortransparent($image_resized, $trnprt_indx);

  }

  // Always make a transparent background color for PNGs that don't have one allocated already

  elseif ($info[2] == IMAGETYPE_PNG) {

  // Turn off transparency blending (temporarily)

  imagealphablending($image_resized, false);

  // Create a new transparent color for image

  $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);

  // Completely fill the background of the new image with allocated color.

  imagefill($image_resized, 0, 0, $color);

  // Restore transparency blending

  imagesavealpha($image_resized, true);

  }

  }

  imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);

  if ( $delete_original ) {

  if ( $use_linux_commands )

  exec('rm '.$file);

  else

  @unlink($file);

  }

  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;

  }

  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;

  }

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/848344.htmlTechArticlePHP scales png images and supports transparent backgrounds PHP scales png images and supports transparent backgrounds function smart_resize_image( $ file, $width = 0, $height = 0, $proportional =...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn