> php教程 > php手册 > 본문

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

WBOY
풀어 주다: 2016-06-13 09:28:24
원래의
757명이 탐색했습니다.

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

  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

  $final_height = ( $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;

  }

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿