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 相关文章推荐
谈谈PHP语法(2)
Oct 09 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
使用php实现从身份证中提取生日
May 09 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
php实现session共享的实例方法
Sep 19 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
PHP实现倒计时功能
Nov 16 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
15种PHP Encoder的比较
2007/04/17 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
PHP7新特性
2021/03/09 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python能做什么 python的含义
2019/10/12 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python urllib3软件包的使用说明
2020/11/18 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
AOP的定义以及作用
2013/09/08 面试题
八项规定对照检查材料
2014/08/31 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
公司员工培训管理制度
2015/08/04 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
spring boot实现文件上传
2022/08/14 Java/Android