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变量存储的详解
Jun 13 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
php析构函数的简单使用说明
Aug 24 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
php使用event扩展的io复用测试的示例
Oct 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下过滤HTML代码的函数
2007/12/10 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP解决中文乱码
2017/04/28 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
2008/12/19 Javascript
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
python中实现php的var_dump函数功能
2015/01/21 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
详解python算法之冒泡排序
2019/03/05 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
个人租房协议书范本
2014/09/30 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫