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
PHP合并两个数组的两种方式的异同
Sep 14 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php实现微信发红包
Dec 05 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
学习PHP session的传递方式
Jun 15 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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类
2006/07/15 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php链表用法实例分析
2015/07/09 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
orm获取关联表里的属性值
2016/04/17 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
Script的加载方法小结
2011/01/12 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
使用Python对MySQL数据操作
2017/04/06 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python help函数实例用法
2020/12/06 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
伊索寓言教学反思
2014/05/01 职场文书
保护野生动物倡议书
2014/05/16 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
出国导师推荐信
2015/03/25 职场文书