PHP图片处理之图片背景、画布操作


Posted in PHP onNovember 19, 2014

像验证码或根据动态数据生成统计图标,以及前面介绍的一些GD库操作等都属于动态绘制图像。而在web开发中,也会经常去处理服务器中已存在的图片。例如,根据一些需求对图片进行缩放、加水印、裁剪、翻转和旋转等改图的操作。在web应用中,经常使用的图片格式有GIF、JPEG和PNG中的一种或几种,当然GD库也可以处理其他格式的图片,但都很少用到。所以安装GD库时,至少安装GIF、JPEG或PNG三种格式中的一种。

在前面介绍的画布管理中,使用imagecreate()和imageCreateTrueColor()两个函数去创建画布资源。但如果需要对自己已有的图片进行处理,只要将这个图片作为画布资源即可,也就是我们所说的创建图片背景。可以通过下面介绍的几个函数,打开服务器或网络文件中已经存在的GIF、JPEG和PNG图像,返回一个图像标识符,代表了从给定的文件名取得的图像作为操作的背景资源。它们的原型如下所示,它们在失败时都会返回一个空字符串,并且输出一条错误信息。

resource  imagecreatefromjpeg(string $filename)           //从JPEG文件或URL新建一图像

resource  imagecreatefrompng(string $filename)             //从PNG文件或URL新建一图像

resource  imagecreatefromgif(string $filename)            //从GIF文件或URL新建一图像

不管使用哪个函数创建的图像资源,用完以后都需要使用imagedestroy()函数进行销毁。再有就是图片格式对应的问题,任何一种方式打开的图片资源都可以保存为同一种格式。例如,对于使用imagecreatefromjpeg()函数创建的图片资源,可以使用imagepng()函数以PNG格式将图像输出到浏览器或文件。当然最好是打开的是哪种格式的图片,就保存成对应的图片格式。如果要做到这一点,我们还需要先认识一下getimagesize()函数,通过图片名称就可以获取图片的类型、宽度和高度等。该函数的原型如下所示:

array  getimagesize(string filename[,array &imageinfo])             //获取图片的大小和类型

如果不能访问filename指定的图像或者其不是有效图像,该函数将返回FALSE并产生一条E_WARNING级的错误。如果不出错,getimagesize()返回一个具有四个单元的数组,索引0包含图像宽度的像素值,索引1包含图像高度的索引值,索引2是图像类型的标记:1=GIF,2=JPG,3=PNG,4=SWF等,索引3是文本字符串,内容为“height=”yyy”  width=”xxx””,可以直接用于<IMG>标记。如下所示:

<?php

list($width,$height,$type,$attr) = getimagesize("image/brophp.jpg");

echo "<img src='image/brophp.jpg'".$attr.">";

?>

下面的例子声明一个image()函数,可以打开GIF、JPG和PNG中任意格式的图片,并在图片的中间加上一个字符串后,保存成原来的格式(文字水印)。在以后的开发中,如果需要同样的操作(打开的是哪种格式的图片,也保存成对应格式的文件),可以参与本例的模式,代码如下所示:

<?php

    //向不同格式的图片中间画一个字符串(也是文字水印)

    function image($filename,$string){

        //获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png

        list($width,$height,$type) = getimagesize($filename);

        //可以处理的图片类型

        $types = array(1=>"gif",2=>"jpeg",3=>"png",);

        //通过图片类型去组合,可以创建对应图片格式的,创建图片资源的GD库函数

        $createfrom = "imagecreatefrom".$types[$type];

        //通过“变量函数”去打对应的函数去创建图片的资源

        $image = $createfrom($filename);

        //设置居中字体的X轴坐标位置

        $x = ($width-imagefontwidth(5)*strlen($string))/2;

        //设置居中字体的Y轴坐标位置

        $y = ($height-imagefontheight(5))/2;

        //设置字体的颜色为红色

        $textcolor = imagecolorallocate($image, 255, 0, 0);

        //向图片画一个指定的字符串

        imagestring($image, 5, $x, $y, $string, $textcolor);

        //通过图片类型去组合保存对应格式的图片函数

        $output = "image".$types[$type];

        //通过变量函数去保存对应格式的图片

        $output($image,$filename);

        imagedestroy($image);

    }

    image("brophp.gif","GIF");

    image("brophp.jpg", "JPEG");

    image("brophp.png", "PNG");

?>
PHP 相关文章推荐
PHP编程中八种常见的文件操作方式
Nov 19 PHP
php 采集书并合成txt格式的实现代码
Mar 01 PHP
php cookies中删除的一般赋值方法
May 07 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
PHP消息队列用法实例分析
Feb 12 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
php 数据结构之链表队列
Oct 17 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
php使用function_exists判断函数可用的方法
Nov 19 #PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 #PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 #PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 #PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 #PHP
php图片处理函数获取类型及扩展名实例
Nov 19 #PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 #PHP
You might like
SONY ICF-SW55的电路分析
2021/03/02 无线电
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
功能强大的php文件上传类
2016/08/29 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
js获取变量
2006/08/24 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python实现划词翻译
2020/04/23 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python 实现超级玛丽游戏
2020/11/25 Python
公司营业员的自我评价
2014/03/04 职场文书
工程资料员岗位职责
2014/03/10 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
情况说明书怎么写
2015/10/08 职场文书