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的FTP学习(三)
Oct 09 PHP
MySQL修改密码方法总结
Mar 25 PHP
PHP 柱状图实现代码
Dec 04 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
微信API接口大全
Apr 15 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
YII2框架中actions的作用与使用方法示例
Mar 13 PHP
详解PHP服务器如何在有限的资源里最大提升并发能力
May 25 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php中取得文件的后缀名?
2012/02/20 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
python实现将元祖转换成数组的方法
2015/05/04 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python模块如何查看
2020/06/16 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
应届大学生求职的自我评价
2013/11/17 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
pandas数值排序的实现实例
2021/07/25 Python