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不用正则采集速度探究总结
Mar 24 PHP
php目录管理函数小结
Sep 10 PHP
php入门学习知识点三 PHP上传
Jul 14 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
PHP多文件上传类实例
Mar 07 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
PHP构造二叉树算法示例
Jun 21 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
PHP验证类的封装与使用方法详解
Jan 10 PHP
深入解析PHP底层机制及相关原理
Dec 11 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
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
Js中sort()方法的用法
2006/11/04 Javascript
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
如何基于Python制作有道翻译小工具
2019/12/16 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
民事和解协议书格式
2014/11/29 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书