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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
PHP初学者最感迷茫的问题小结
Mar 27 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
php实现telnet功能示例
Apr 08 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
php中使用websocket详解
Sep 23 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 03 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写出自己的BLOG系统 2
2010/04/12 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
详解如何实现一个简单的 vuex
2018/02/10 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
python实现统计文本中单词出现的频率详解
2019/05/20 Python
对Django url的几种使用方式详解
2019/08/06 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
学习新党章思想汇报
2014/01/09 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2015年财政局工作总结
2015/05/21 职场文书
花田少年史观后感
2015/06/16 职场文书