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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
PHP数组交集的优化代码分析
Mar 06 PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
解决cPanel无法安装php5.2.17
Jun 22 PHP
php图像处理类实例
Jul 28 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
Oct 22 PHP
php mysql操作mysql_connect连接数据库实例详解
Dec 26 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
浅谈PHP中的那些魔术常量
Dec 02 PHP
PHP策略模式写法
Apr 01 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
smarty section简介与用法分析
2008/10/03 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
js日期联动示例
2014/05/02 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
《雨点》教学反思
2014/02/12 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
岗位聘任书范文
2014/03/29 职场文书
亲子活动总结
2014/04/26 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
详解nginx进程锁的实现
2021/06/14 Servers
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android