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 相关文章推荐
PHP4之真OO
Oct 09 PHP
PHP has encountered an Access Violation
Jan 15 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php curl的深入解析
Jun 02 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
php简单判断文本编码的方法
Jul 30 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
php实现微信支付之现金红包
May 30 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
优秀实习自我鉴定
2013/12/04 职场文书
《去年的树》教学反思
2014/04/11 职场文书
品牌推广策划方案
2014/05/28 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang