PHP实现图片的等比缩放和Logo水印功能示例


Posted in PHP onMay 04, 2017

本文实例讲述了PHP实现图片的等比缩放和Logo水印功能。分享给大家供大家参考,具体如下:

/**
 * 等比缩放函数(以保存的方式实现)
 * @param string $picname 被缩放的处理图片源
 * @param int $maxx 缩放后图片的最大宽度
 * @param int $maxy 缩放后图片的最大高度
 * @param string $pre 缩放后图片名的前缀名
 * @return String 返回后的图片名称(带路径),如a.jpg=>s_a.jpg
 */
function imageUpdateSize($picname,$maxx=100,$maxy=100,$pre="s_"){
  $info = getimageSize($picname); //获取图片的基本信息
  $w = $info[0];//获取宽度
  $h = $info[1];//获取高度
  //获取图片的类型并为此创建对应图片资源
  switch($info[2]){
    case 1: //gif
      $im = imagecreatefromgif($picname);
      break;
    case 2: //jpg
      $im = imagecreatefromjpeg($picname);
      break;
    case 3: //png
      $im = imagecreatefrompng($picname);
      break;
    default:
      die("图片类型错误!");
  }
  //计算缩放比例
  if(($maxx/$w)>($maxy/$h)){
    $b = $maxy/$h;
  }else{
    $b = $maxx/$w;
  }
  //计算出缩放后的尺寸
  $nw = floor($w*$b);
  $nh = floor($h*$b);
  //创建一个新的图像源(目标图像)
  $nim = imagecreatetruecolor($nw,$nh);
  //执行等比缩放
  imagecopyresampled($nim,$im,0,0,0,0,$nw,$nh,$w,$h);
  //输出图像(根据源图像的类型,输出为对应的类型)
  $picinfo = pathinfo($picname);//解析源图像的名字和路径信息
  $newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
  switch($info[2]){
    case 1:
      imagegif($nim,$newpicname);
      break;
    case 2:
      imagejpeg($nim,$newpicname);
      break;
    case 3:
      imagepng($nim,$newpicname);
      break;
  }
  //释放图片资源
  imagedestroy($im);
  imagedestroy($nim);
  //返回结果
  return $newpicname;
}
//测试:
//echo imageUpdateSize("./images/bg.jpg",200,200,"ss_"); // ./images/s_bg.jpg
/**
 * 为一张图片添加上一个logo图片水印(以保存的方式实现)
 * @param string $picname 被处理图片源
 * @param string $logo 水印图片
 * @param string $pre 处理后图片名的前缀名
 * @return String 返回后的图片名称(带路径),如a.jpg=>n_a.jpg
 */
function imageUpdateLogo($picname,$logo,$pre="n_"){
  $picnameinfo = getimageSize($picname); //获取图片源的基本信息
  $logoinfo = getimageSize($logo); //获取logo图片的基本信息
  //var_dump($logoinfo);
  //根据图片类型创建出对应的图片源
  switch($picnameinfo[2]){
    case 1: //gif
      $im = imagecreatefromgif($picname);
      break;
    case 2: //jpg
      $im = imagecreatefromjpeg($picname);
      break;
    case 3: //png
      $im = imagecreatefrompng($picname);
      break;
    default:
      die("图片类型错误!");
  }
  //根据logo图片类型创建出对应的图片源
  switch($logoinfo[2]){
    case 1: //gif
      $logoim = imagecreatefromgif($logo);
      break;
    case 2: //jpg
      $logoim = imagecreatefromjpeg($logo);
      break;
    case 3: //png
      $logoim = imagecreatefrompng($logo);
      break;
    default:
      die("logo图片类型错误!");
  }
  //执行图片水印处理
  imagecopyresampled($im,$logoim,$picnameinfo[0]-$logoinfo[0],$picnameinfo[1]-$logoinfo[1],0,0,$logoinfo[0],$logoinfo[1],$logoinfo[0],$logoinfo[1]);
  //输出图像(根据源图像的类型,输出为对应的类型)
  $picinfo = pathinfo($picname);//解析源图像的名字和路径信息
  $newpicname= $picinfo["dirname"]."/".$pre.$picinfo["basename"];
  switch($picnameinfo[2]){
    case 1:
      imagegif($im,$newpicname);
      break;
    case 2:
      imagejpeg($im,$newpicname);
      break;
    case 3:
      imagepng($im,$newpicname);
      break;
  }
  //释放图片资源
  imagedestroy($im);
  imagedestroy($logoim);
  //返回结果
  return $newpicname;
}
//测试
echo imageUpdateLogo("./images/bg2.jpg","./images/s_1.png");
PHP 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
关于BIG5-HKSCS的解决方法
Mar 20 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
php 常用的系统函数
Feb 07 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
laravel 修改记住我功能的cookie保存时间的方法
Oct 14 PHP
Yii2数据库操作常用方法小结
May 04 #PHP
Yii2中添加全局函数的方法分析
May 04 #PHP
Yii2表单事件之Ajax提交实现方法
May 04 #PHP
PHP经典实用正则表达式小结
May 04 #PHP
PHP实现的简单异常处理类示例
May 04 #PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 #PHP
PHP 无限级分类
May 04 #PHP
You might like
php桌面中心(一) 创建数据库
2007/03/11 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
JS+CSS实现动态时钟
2021/02/19 Javascript
基于Python的关键字监控及告警
2017/07/06 Python
python cs架构实现简单文件传输
2020/03/20 Python
Python简易版停车管理系统
2019/08/12 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
python空元组在all中返回结果详解
2020/12/15 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
J2EE面试题
2016/03/14 面试题
毕业生优秀推荐信
2013/11/26 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
临床护理求职信
2014/04/26 职场文书
有关爱国演讲稿
2014/05/07 职场文书
党员自我剖析材料
2014/08/31 职场文书
公积金接收函格式
2015/01/30 职场文书
学雷锋感言
2015/08/03 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
python实现过滤敏感词
2021/05/08 Python
Window server中安装Redis的超详细教程
2021/11/17 Redis