设为首页 收藏本站
查看: 673|回复: 0

[经验分享] PHP创建图片

[复制链接]

尚未签到

发表于 2017-3-22 10:02:55 | 显示全部楼层 |阅读模式
  <?php
  /**
  * 功能:生成缩略图
  * 作者:phpox
  * 日期:Thu May 17 09:57:05 CST 2007
  */
  class CreatMiniature
  {
  //公共变量
  var $srcFile=""; //原图
  var $echoType; //输出图片类型,link--不保存为文件;file--保存为文件
  var $im=""; //临时变量
  var $srcW=""; //原图宽
  var $srcH=""; //原图高
  //设置变量及初始化
  function SetVar($srcFile,$echoType)
  {
  if (!file_exists($srcFile)){
  echo '源图片文件不存在!';
  exit();
  }
  $this->srcFile=$srcFile;
  $this->echoType=$echoType;
  $info = "";
  $data = GetImageSize($this->srcFile,$info);
  switch ($data[2])
  {
  case 1:
  if(!function_exists("imagecreatefromgif")){
  echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!<a href='javascript:go(-1);'>返回</a>";
  exit();
  }
  $this->im = ImageCreateFromGIF($this->srcFile);
  break;
  case 2:
  if(!function_exists("imagecreatefromjpeg")){
  echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!<a href='javascript:go(-1);'>返回</a>";
  exit();
  }
  $this->im = ImageCreateFromJpeg($this->srcFile);
  break;
  case 3:
  $this->im = ImageCreateFromPNG($this->srcFile);
  break;
  }
  $this->srcW=ImageSX($this->im);
  $this->srcH=ImageSY($this->im);
  }
  //生成扭曲型缩图
  function Distortion($toFile,$toW,$toH)
  {
  $cImg=$this->CreatImage($this->im,$toW,$toH,0,0,0,0,$this->srcW,$this->srcH);
  return $this->EchoImage($cImg,$toFile);
  ImageDestroy($cImg);
  }
  //生成按比例缩放的缩图
  function Prorate($toFile,$toW,$toH)
  {
  $toWH=$toW/$toH;
  $srcWH=$this->srcW/$this->srcH;
  if($toWH<=$srcWH)
  {
  $ftoW=$toW;
  $ftoH=$ftoW*($this->srcH/$this->srcW);
  }
  else
  {
  $ftoH=$toH;
  $ftoW=$ftoH*($this->srcW/$this->srcH);
  }
  if($this->srcW>$toW||$this->srcH>$toH)
  {
  $cImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH);
  return $this->EchoImage($cImg,$toFile);
  ImageDestroy($cImg);
  }
  else
  {
  $cImg=$this->CreatImage($this->im,$this->srcW,$this->srcH,0,0,0,0,$this->srcW,$this->srcH);
  return $this->EchoImage($cImg,$toFile);
  ImageDestroy($cImg);
  }
  }
  //生成最小裁剪后的缩图
  function Cut($toFile,$toW,$toH)
  {
  $toWH=$toW/$toH;
  $srcWH=$this->srcW/$this->srcH;
  if($toWH<=$srcWH)
  {
  $ctoH=$toH;
  $ctoW=$ctoH*($this->srcW/$this->srcH);
  }
  else
  {
  $ctoW=$toW;
  $ctoH=$ctoW*($this->srcH/$this->srcW);
  }
  $allImg=$this->CreatImage($this->im,$ctoW,$ctoH,0,0,0,0,$this->srcW,$this->srcH);
  $cImg=$this->CreatImage($allImg,$toW,$toH,0,0,($ctoW-$toW)/2,($ctoH-$toH)/2,$toW,$toH);
  return $this->EchoImage($cImg,$toFile);
  ImageDestroy($cImg);
  ImageDestroy($allImg);
  }
  //生成背景填充的缩图
  function BackFill($toFile,$toW,$toH,$bk1=255,$bk2=255,$bk3=255)
  {
  $toWH=$toW/$toH;
  $srcWH=$this->srcW/$this->srcH;
  if($toWH<=$srcWH)
  {
  $ftoW=$toW;
  $ftoH=$ftoW*($this->srcH/$this->srcW);
  }
  else
  {
  $ftoH=$toH;
  $ftoW=$ftoH*($this->srcW/$this->srcH);
  }
  if(function_exists("imagecreatetruecolor"))
  {
  @$cImg=ImageCreateTrueColor($toW,$toH);
  if(!$cImg)
  {
  $cImg=ImageCreate($toW,$toH);
  }
  }
  else
  {
  $cImg=ImageCreate($toW,$toH);
  }
  $backcolor = imagecolorallocate($cImg, $bk1, $bk2, $bk3); //填充的背景颜色
  ImageFilledRectangle($cImg,0,0,$toW,$toH,$backcolor);
  if($this->srcW>$toW||$this->srcH>$toH)
  {
  $proImg=$this->CreatImage($this->im,$ftoW,$ftoH,0,0,0,0,$this->srcW,$this->srcH);
  if($ftoW<$toW)
  {
  ImageCopy($cImg,$proImg,($toW-$ftoW)/2,0,0,0,$ftoW,$ftoH);
  }
  else if($ftoH<$toH)
  {
  ImageCopy($cImg,$proImg,0,($toH-$ftoH)/2,0,0,$ftoW,$ftoH);
  }
  else
  {
  ImageCopy($cImg,$proImg,0,0,0,0,$ftoW,$ftoH);
  }
  }
  else
  {
  ImageCopyMerge($cImg,$this->im,($toW-$ftoW)/2,($toH-$ftoH)/2,0,0,$ftoW,$ftoH,100);
  }
  return $this->EchoImage($cImg,$toFile);
  ImageDestroy($cImg);
  }
  function CreatImage($img,$creatW,$creatH,$dstX,$dstY,$srcX,$srcY,$srcImgW,$srcImgH)
  {
  if(function_exists("imagecreatetruecolor"))
  {
  @$creatImg = ImageCreateTrueColor($creatW,$creatH);
  if($creatImg)
  ImageCopyResampled($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
  else
  {
  $creatImg=ImageCreate($creatW,$creatH);
  ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
  }
  }
  else
  {
  $creatImg=ImageCreate($creatW,$creatH);
  ImageCopyResized($creatImg,$img,$dstX,$dstY,$srcX,$srcY,$creatW,$creatH,$srcImgW,$srcImgH);
  }
  return $creatImg;
  }
  //输出图片,link---只输出,不保存文件。file--保存为文件
  function EchoImage($img,$to_File)
  {
  switch($this->echoType)
  {
  case "link":
  if(function_exists('imagejpeg')) return ImageJpeg($img);
  else return ImagePNG($img);
  break;
  case "file":
  if(function_exists('imagejpeg')) return ImageJpeg($img,$to_File);
  else return ImagePNG($img,$to_File);
  break;
  }
  }
  }
  ?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-353441-1-1.html 上篇帖子: php操作SVN 下篇帖子: php后退一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表