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中使用unset销毁变量并内存释放问题
Jul 05 PHP
解析PHP的session过期设置
Jun 29 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
php下获取http状态的实现代码
May 09 PHP
跟我学Laravel之路由
Oct 15 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 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生成缩略图的代码
2011/01/12 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Django中几种重定向方法
2015/04/28 Python
python读写二进制文件的方法
2015/05/09 Python
python监控键盘输入实例代码
2018/02/09 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
Python调用飞书发送消息的示例
2020/11/10 Python
python3中数组逆序输出方法
2020/12/01 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
python实现简单文件读写函数
2021/02/25 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
办公室内勤工作职责
2013/12/11 职场文书
中学生演讲稿
2014/04/26 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
公安学专业求职信
2014/07/27 职场文书
会计电算化实训报告
2014/11/04 职场文书
小学生交通安全寄语
2015/02/27 职场文书
离婚被告代理词
2015/05/23 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
MySQL kill不掉线程的原因
2021/05/07 MySQL