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和MySql来与ODBC数据连接
Oct 09 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
详解Go与PHP的语法对比
May 29 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 mysql数据库操作类
2008/06/04 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python selenium如何设置等待时间
2016/09/15 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
自主实习接收函
2014/01/13 职场文书
文明生主要事迹
2014/05/25 职场文书
纪律教育月活动总结
2014/08/26 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
js作用域及作用域链工作引擎
2022/07/07 Javascript