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 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
php 获取完整url地址
Dec 20 PHP
PHP中文件上传的一个问题
Sep 04 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
php使用百度ping服务代码实例
Jun 19 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 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的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
详解参数传递四种形式
2015/07/21 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
js数组常用最重要的方法
2018/02/04 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
如何使用python进行pdf文件分割
2019/11/11 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
自我推荐书
2013/12/04 职场文书
公司会议策划方案
2014/05/17 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
职代会闭幕词
2015/01/28 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL