찾다
php教程php手册常用的php图片处理类(水印、等比缩放、固定高宽)分享,

常用的php图片处理类(水印、等比缩放、固定高宽)分享,

常用的php图片处理类(水印、等比缩放、固定高宽)分享

<&#63;php  
//PHP 添加水印 & 比例缩略图 & 固定高度 & 固定宽度 类。 
class Image_process{ 
  public $source; //原图 
  public $source_width;  //原图宽度 
  public $source_height; //原图高度 
  public $source_type_id; 
  public $orign_name; 
  public $orign_dirname; 
    
  //传入原图路径 
  public function __construct($source){ 
    $this->typeList = array(1=>'gif',2=>'jpg',3=>'png'); 
    $ginfo = getimagesize($source); 
    $this->source_width = $ginfo[0]; 
    $this->source_height = $ginfo[1]; 
    $this->source_type_id = $ginfo[2]; 
    $this->orign_url = $source; 
    $this->orign_name = basename($source); 
    $this->orign_dirname = dirname($source); 
  } 
    
  //判断图片的文件的格式,返回PHP可识别的编码 
  public function judgeType($type,$source){ 
    if($type == 1){ 
      return imagecreatefromgif($source); //gif 
    }else if($type == 2){ 
      return imagecreatefromjpeg($source); //jpg 
    }else if($type == 3){ 
      return imagecreatefrompng($source); //png 
    }else{ 
      return false; 
    } 
  } 
    
  //生成水印图片 
  public function waterMakeImage($logo){ 
    $linfo = getimagesize($logo); 
    $logo_width = $linfo[0]; 
    $logo_height = $linfo[1]; 
    $logo_type_id = $linfo[2]; 
    $sourceHandle = $this->judgeType($this->source_type_id,$this->orign_url); 
    $logoHandle = $this->judgeType($logo_type_id,$logo); 
    if(!$sourceHandle || !$logoHandle){ 
      return false; 
    } 
    $x = ($this->source_width - $logo_width)/2; 
    $y = ($this->source_height - $logo_height)/2; 
    imagecopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_height); 
    $newPic = $this->orign_dirname.'\water_'.time().'.'.$this->typeList[$this->source_type_id]; 
    if($this->saveImage($sourceHandle,$newPic)){ 
      imagedestroy($sourceHandle); 
      imagedestroy($logoHandle); 
    } 
  } 
    
  //固定高度宽度 
  public function fixSizeImage($width,$height){ 
    if($width > $this->source_width) $this->source_width; 
    if($height > $this->source_height) $this->source_height; 
    if($width === false){ 
      $width = floor($this->source_width / ($this->source_height / $height)); 
    } 
    if($height === false){ 
      $height = floor($this->source_height / ($this->source_width / $width)); 
    } 
    $this->tinyImage($width,$height); 
  } 
    
  //等比例缩放图片 
  public function scaleImage($scale){ 
    $width = floor($this->source_width * $scale); 
    $height = floor($this->source_height * $scale); 
    $this->tinyImage($width, $height); 
  } 
    
  //创建缩略图 
  public function tinyImage($width,$height){ 
    $tinyImage = imagecreatetruecolor($width,$height); 
    $handle = $this->judgeType($this->source_type_id,$this->orign_url); 
    if(function_exists('imagecopyresampled')){ 
      imagecopyresampled($tinyImage, $handle, 0, 0, 0, 0, $width, $height, $this->source_width, $this->source_height); 
    }else{ 
      imagecopyresized($tinyImage, $handle, 0, 0, 0, 0, $width, $height, $this->source_width, $this->source_height); 
    } 
    $newPic = $this->orign_dirname.'\thumb_'.time().'_'.$width."_".$height.".".$this->typeList[$this->source_type_id]; 
    if($this->saveImage($tinyImage,$newPic)){ 
      imagedestroy($tinyImage); 
      imagedestroy($handle); 
    } 
  } 
  //保存图片 
  private function saveImage($image,$url){ 
    if(imagejpeg($image,$url)){ 
      return true; 
    } 
  } 
} 
$imgHandle = new Image_process('D:\AppServ\www\test\getimg\14061907445601.jpg'); 
//$imgHandle->waterMakeImage('D:\AppServ\www\test\getimg\shougongke.png');  //生成水印图片 
//$imgHandle->fixSizeImage(200,150); //固定长度图片 
$imgHandle->scaleImage(0.2); //等比例缩放 
&#63;>

示例二:

<&#63;php
/**
 * 
 * 图像处理类
 * @author FC_LAMP
 * @internal功能包含:水印,缩略图
 */
class Img
{
 //图片格式
 private $exts = array ('jpg', 'jpeg', 'gif', 'bmp', 'png' );

 /**
 * 
 * 
 * @throws Exception
 */
 public function __construct()
 {
 if (! function_exists ( 'gd_info' ))
 {
  throw new Exception ( '加载GD库失败!' );
 }
 }

 /**
 * 
 * 裁剪压缩
 * @param $src_img 图片
 * @param $save_img 生成后的图片
 * @param $option 参数选项,包括: $maxwidth 宽 $maxheight 高
 * array('width'=>xx,'height'=>xxx)
 * @internal
 * 我们一般的压缩图片方法,在图片过长或过宽时生成的图片
 * 都会被“压扁”,针对这个应采用先裁剪后按比例压缩的方法
 */
 public function thumb_img($src_img, $save_img = '', $option)
 {

 if (empty ( $option ['width'] ) or empty ( $option ['height'] ))
 {
  return array ('flag' => False, 'msg' => '原图长度与宽度不能小于0' );
 }
 $org_ext = $this->is_img ( $src_img );
 if (! $org_ext ['flag'])
 {
  return $org_ext;
 }

 //如果有保存路径,则确定路径是否正确
 if (! empty ( $save_img ))
 {
  $f = $this->check_dir ( $save_img );
  if (! $f ['flag'])
  {
  return $f;
  }
 }

 //获取出相应的方法
 $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );

 //获取原大小
 $source = $org_funcs ['create_func'] ( $src_img );
 $src_w = imagesx ( $source );
 $src_h = imagesy ( $source );

 //调整原始图像(保持图片原形状裁剪图像)
 $dst_scale = $option ['height'] / $option ['width']; //目标图像长宽比
 $src_scale = $src_h / $src_w; // 原图长宽比
 if ($src_scale >= $dst_scale)
 { // 过高
  $w = intval ( $src_w );
  $h = intval ( $dst_scale * $w );

  $x = 0;
  $y = ($src_h - $h) / 3;
 } else
 { // 过宽
  $h = intval ( $src_h );
  $w = intval ( $h / $dst_scale );

  $x = ($src_w - $w) / 2;
  $y = 0;
 }
 // 剪裁
 $croped = imagecreatetruecolor ( $w, $h );
 imagecopy ( $croped, $source, 0, 0, $x, $y, $src_w, $src_h );
 // 缩放
 $scale = $option ['width'] / $w;
 $target = imagecreatetruecolor ( $option ['width'], $option ['height'] );
 $final_w = intval ( $w * $scale );
 $final_h = intval ( $h * $scale );
 imagecopyresampled ( $target, $croped, 0, 0, 0, 0, $final_w, $final_h, $w, $h );
 imagedestroy ( $croped );

 //输出(保存)图片
 if (! empty ( $save_img ))
 {

  $org_funcs ['save_func'] ( $target, $save_img );
 } else
 {
  header ( $org_funcs ['header'] );
  $org_funcs ['save_func'] ( $target );
 }
 imagedestroy ( $target );
 return array ('flag' => True, 'msg' => '' );
 }

 /**
 * 
 * 等比例缩放图像
 * @param $src_img 原图片
 * @param $save_img 需要保存的地方
 * @param $option 参数设置 array('width'=>xx,'height'=>xxx)
 * 
 */
 function resize_image($src_img, $save_img = '', $option)
 {
 $org_ext = $this->is_img ( $src_img );
 if (! $org_ext ['flag'])
 {
  return $org_ext;
 }

 //如果有保存路径,则确定路径是否正确
 if (! empty ( $save_img ))
 {
  $f = $this->check_dir ( $save_img );
  if (! $f ['flag'])
  {
  return $f;
  }
 }

 //获取出相应的方法
 $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );

 //获取原大小
 $source = $org_funcs ['create_func'] ( $src_img );
 $src_w = imagesx ( $source );
 $src_h = imagesy ( $source );

 if (($option ['width'] && $src_w > $option ['width']) || ($option ['height'] && $src_h > $option ['height']))
 {
  if ($option ['width'] && $src_w > $option ['width'])
  {
  $widthratio = $option ['width'] / $src_w;
  $resizewidth_tag = true;
  }

  if ($option ['height'] && $src_h > $option ['height'])
  {
  $heightratio = $option ['height'] / $src_h;
  $resizeheight_tag = true;
  }

  if ($resizewidth_tag && $resizeheight_tag)
  {
  if ($widthratio < $heightratio)
   $ratio = $widthratio;
  else
   $ratio = $heightratio;
  }

  if ($resizewidth_tag && ! $resizeheight_tag)
  $ratio = $widthratio;
  if ($resizeheight_tag && ! $resizewidth_tag)
  $ratio = $heightratio;

  $newwidth = $src_w * $ratio;
  $newheight = $src_h * $ratio;

  if (function_exists ( "imagecopyresampled" ))
  {
  $newim = imagecreatetruecolor ( $newwidth, $newheight );
  imagecopyresampled ( $newim, $source, 0, 0, 0, 0, $newwidth, $newheight, $src_w, $src_h );
  } else
  {
  $newim = imagecreate ( $newwidth, $newheight );
  imagecopyresized ( $newim, $source, 0, 0, 0, 0, $newwidth, $newheight, $src_w, $src_h );
  }
 }
 //输出(保存)图片
 if (! empty ( $save_img ))
 {

  $org_funcs ['save_func'] ( $newim, $save_img );
 } else
 {
  header ( $org_funcs ['header'] );
  $org_funcs ['save_func'] ( $newim );
 }
 imagedestroy ( $newim );
 return array ('flag' => True, 'msg' => '' );
 }

 /**
 * 
 * 生成水印图片
 * @param $org_img 原图像
 * @param $mark_img 水印标记图像
 * @param $save_img 当其目录不存在时,会试着创建目录
 * @param array $option 为水印的一些基本设置包含:
 * x:水印的水平位置,默认为减去水印图宽度后的值
 * y:水印的垂直位置,默认为减去水印图高度后的值
 * alpha:alpha值(控制透明度),默认为50
 */
 public function water_mark($org_img, $mark_img, $save_img = '', $option = array())
 {
 //检查图片
 $org_ext = $this->is_img ( $org_img );
 if (! $org_ext ['flag'])
 {
  return $org_ext;
 }
 $mark_ext = $this->is_img ( $mark_img );
 if (! $mark_ext ['flag'])
 {
  return $mark_ext;
 }
 //如果有保存路径,则确定路径是否正确
 if (! empty ( $save_img ))
 {
  $f = $this->check_dir ( $save_img );
  if (! $f ['flag'])
  {
  return $f;
  }
 }

 //获取相应画布
 $org_funcs = $this->get_img_funcs ( $org_ext ['msg'] );
 $org_img_im = $org_funcs ['create_func'] ( $org_img );

 $mark_funcs = $this->get_img_funcs ( $mark_ext ['msg'] );
 $mark_img_im = $mark_funcs ['create_func'] ( $mark_img );

 //拷贝水印图片坐标
 $mark_img_im_x = 0;
 $mark_img_im_y = 0;
 //拷贝水印图片高宽
 $mark_img_w = imagesx ( $mark_img_im );
 $mark_img_h = imagesy ( $mark_img_im );

 $org_img_w = imagesx ( $org_img_im );
 $org_img_h = imagesx ( $org_img_im );

 //合成生成点坐标
 $x = $org_img_w - $mark_img_w;
 $org_img_im_x = isset ( $option ['x'] ) &#63; $option ['x'] : $x;
 $org_img_im_x = ($org_img_im_x > $org_img_w or $org_img_im_x < 0) &#63; $x : $org_img_im_x;
 $y = $org_img_h - $mark_img_h;
 $org_img_im_y = isset ( $option ['y'] ) &#63; $option ['y'] : $y;
 $org_img_im_y = ($org_img_im_y > $org_img_h or $org_img_im_y < 0) &#63; $y : $org_img_im_y;

 //alpha
 $alpha = isset ( $option ['alpha'] ) &#63; $option ['alpha'] : 50;
 $alpha = ($alpha > 100 or $alpha < 0) &#63; 50 : $alpha;

 //合并图片
 imagecopymerge ( $org_img_im, $mark_img_im, $org_img_im_x, $org_img_im_y, $mark_img_im_x, $mark_img_im_y, $mark_img_w, $mark_img_h, $alpha );

 //输出(保存)图片
 if (! empty ( $save_img ))
 {

  $org_funcs ['save_func'] ( $org_img_im, $save_img );
 } else
 {
  header ( $org_funcs ['header'] );
  $org_funcs ['save_func'] ( $org_img_im );
 }
 //销毁画布
 imagedestroy ( $org_img_im );
 imagedestroy ( $mark_img_im );
 return array ('flag' => True, 'msg' => '' );

 }

 /**
 * 
 * 检查图片
 * @param unknown_type $img_path
 * @return array('flag'=>true/false,'msg'=>ext/错误信息) 
 */
 private function is_img($img_path)
 {
 if (! file_exists ( $img_path ))
 {
  return array ('flag' => False, 'msg' => "加载图片 $img_path 失败!" );
 }
 $ext = explode ( '.', $img_path );
 $ext = strtolower ( end ( $ext ) );
 if (! in_array ( $ext, $this->exts ))
 {
  return array ('flag' => False, 'msg' => "图片 $img_path 格式不正确!" );
 }
 return array ('flag' => True, 'msg' => $ext );
 }

 /**
 * 
 * 返回正确的图片函数
 * @param unknown_type $ext
 */
 private function get_img_funcs($ext)
 {
 //选择
 switch ($ext)
 {
  case 'jpg' :
  $header = 'Content-Type:image/jpeg';
  $createfunc = 'imagecreatefromjpeg';
  $savefunc = 'imagejpeg';
  break;
  case 'jpeg' :
  $header = 'Content-Type:image/jpeg';
  $createfunc = 'imagecreatefromjpeg';
  $savefunc = 'imagejpeg';
  break;
  case 'gif' :
  $header = 'Content-Type:image/gif';
  $createfunc = 'imagecreatefromgif';
  $savefunc = 'imagegif';
  break;
  case 'bmp' :
  $header = 'Content-Type:image/bmp';
  $createfunc = 'imagecreatefrombmp';
  $savefunc = 'imagebmp';
  break;
  default :
  $header = 'Content-Type:image/png';
  $createfunc = 'imagecreatefrompng';
  $savefunc = 'imagepng';
 }
 return array ('save_func' => $savefunc, 'create_func' => $createfunc, 'header' => $header );
 }

 /**
 * 
 * 检查并试着创建目录
 * @param $save_img
 */
 private function check_dir($save_img)
 {
 $dir = dirname ( $save_img );
 if (! is_dir ( $dir ))
 {
  if (! mkdir ( $dir, 0777, true ))
  {
  return array ('flag' => False, 'msg' => "图片保存目录 $dir 无法创建!" );
  }
 }
 return array ('flag' => True, 'msg' => '' );
 }
}

if (! empty ( $_FILES ['test'] ['tmp_name'] ))
{
 //例子
 $img = new Img ();
 //原图
 $name = explode ( '.', $_FILES ['test'] ['name'] );
 $org_img = 'D:/test.' . end ( $name );
 move_uploaded_file ( $_FILES ['test'] ['tmp_name'], $org_img );
 $option = array ('width' => $_POST ['width'], 'height' => $_POST ['height'] );
 if ($_POST ['type'] == 1)
 {
 $s = $img->resize_image ( $org_img, '', $option );
 } else
 {
 $img->thumb_img ( $org_img, '', $option );
 }
 unlink ( $org_img );
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구