PHP图像处理(GD库)
一、图像处理概述
1、开启GD2图像扩展库
①PHP不仅限于只产生HTML的输出,还可以创建与操作多种不同格式的图像文件。PHP提供了一些内置的图像处理函数,也可以使用GD函数库创建新图像或处理已有的图像。目前GD2库支持JPEG、PNG和WBMP格式。
②GD扩展用于动态创建图片,使用C语言编写,开放源代码,现在的版本是2.0,所以称为GD2。
③开启GD2扩展库:将php.ini中extension=php_gd2.dll选项前的分号去掉,重启。
图片.png
2、查看图像拓展库GD2是否开启
图片.png
图片.png
3、创建图像的大致步骤
①创建画布:创建一个画布,以后的操作都基于此画布操作;
②绘制图形:在画布上绘制图像轮廓或输入文本;
③输出图像:也可以另存为;
④释放资源:释放图像占用的内存资源。
图片.png
4、画布坐标系说明
下图说明了画布的坐标系。坐标原点位于画布左上角,以像素为单位。
图片.png
二、创建图像和销毁图像
1、创建基于已有图像的图像imagecreatefromjpeg()
1)描述:由文件或 URL 创建一个新图象。
2)语法:resource imagecreatefrompng ( string $filename )
3)参数:$filename
为图像的完整路径。
4)返回:成功后返回图象资源,失败后返回 FALSE 。
5)提示:imagecreatefrompng()
和imagecreatefromgif()
语法与该函数一样。
示例:
- //从已知背景上来创建画布
- //成功返回图片资源型数据,失败返回false
- $filename="./abc.jpg";
- $img=imagecreatefromjpeg($filename);
- //告诉浏览器以图像数据来显示
- header("content-type:image/jpeg");
- //输出图像
- imagejpeg($img);
- //关闭图像释放资源
- imagedestroy($img);
图片.png
2、创建空画布图像imagecreatetruecolor()
1)描述:新建一个真彩色图像,支持24位色,即RGB(256,256,256)。
2)语法:resource imagecreatetruecolor ( int $width , int $height )
3)参数:$width
图像宽度;$height
图像高度;
4)返回:成功后返回图象资源,失败后返回 FALSE 。
示例:
- //创建一个空画布
- $img=imagecreatetruecolor(300,300);
- //告诉浏览器以图像数据来显示
- header("content-type:image/jpeg");
- //输出图像
- imagejpeg($img);
- //关闭图像释放资源
- imagedestroy($img);
图片.png
3、销毁图像资源imagedestroy()
1)描述:销毁一图像。释放与 image图像标识符关联的内存。
2)语法:bool imagedestroy ( resource $image )
3)参数:$image
为由imagecreatetruecolor()
创建的图像标识符。
三、图像操作
1、为图像分配颜色imagecolorallocate()
1)语法:int imagecolorallocate(resource $image,int $red,int $green,int $blue)
2)参数:$image图像资源标识符;
3)提示:第一次对 imagecolorallocate()的调用会给图像填充背景色。
图片.png
2、输出图像到浏览器或保存文件imagejpeg()
1)描述:以 JPG/GIF/PNG 格式将图像输出到浏览器或文件
2)语法:bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )
3)参数:
a、$filename,将创建的图像保存到文件;如果省略,则直接在浏览器输出。
b、如果要省略这个参数而提供 quality 参数,使用NULL。
c、quality 为可选项,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。默认的质量值(大约 75)。
4)提示:imagegif()、imagepng(),与imagejpeg()格式一样,但没有第3个参数。
示例:
- //创建一个空画布
- $img=imagecreatetruecolor(300,300);
- //给画布分配颜色
- //十进制表示方法
- $color=imagecolorallocate($img,255,255,0);
- //绘制带填充的矩形
- imagefilledrectangle($img,30,30,100,80,$color);
- //保存图像,如果文件夹内有重名文件会覆盖
- //注意:质量只针对jpg格式图片有效
- imagejpeg($img,'./fuben/fuben.jpeg',100);
- imagegif($img,'./fuben/fuben.gif');
- imagepng($img,'./fuben/fuben.png');
- //关闭图像释放资源
- imagedestroy($img);
指定文件夹内产生如下文件:
图片.png
3、水平地画一行字符串imagestring()
1)语法:bool imagestring(resource $img,int $font,int $x,int $y,string $s,int $col)
2)参数:
- a、$img 图像资源;
- b、$font字体大小,取值1、2、3、4、5,使用内置字体;
- c、$x,$y绘制字符串的开始坐标,一般在字符串左上角;
- d、$s 代表要绘制的一行字符串;
- e、$col 代表文本颜色。
- f、$s,代表一行字符串;$col,代表文本颜色;
4、获取画布的宽度和高度
1)宽度:int imagesx ( resource $image )
2)高度:int imagesy ( resource $image )
5、获取内置字体的宽度和高度
1)描述:返回指定字体一个字符宽度或高度的像素值。
2)字体宽度:int imagefontwidth ( int $font )
3)字体高度:int imagefontheight ( int $font )
4)提示:$font为字体大小,取值1-5,最大为5。
6、画一矩形并填充
1)语法:bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )
2)参数:
- a、$x1 , $y1 左上角坐标;
- b、$x2 , $y2 右上角坐标;
- c、$color 填充背景色。
综合示例:在画布上居中显示字符串
- //创建一个空画布
- $width=300;
- $height=200;
- $img=imagecreatetruecolor($width,$height);
- //给画布分配颜色
- $color1=imagecolorallocate($img,200,200,200);
- $color2=imagecolorallocate($img,200,0,0);
- //绘制带填充的矩形
- imagefilledrectangle($img,0,0,$width,$height,$color1);
- //往画布上写一行居中的字符串
- $font=5;
- $str='Hello world!';
- $fontwidth=imagefontwidth($font);
- $fontheight=imagefontheight($font);
- $x=($width-$fontwidth*strlen($str))/2;
- $y=($height-$fontheight)/2;
- imagestring($img,$font,$x,$y,$str,$color2);
- //声明网页内容类型为图像
- header("content-type:image/png");
- //输出图像
- //此处细节,用png更清楚,如果用jpeg格式文字周边会稍有模糊
- imagepng($img);
- //销毁图像
- imagedestroy($img);
结果如下:
图片.png
7、画一个单一像素
1)描述:画一个单一像素
2)语法:bool imagesetpixel ( resource $image , int $x , int $y , int $color )
3)说明:imagesetpixel() 在 image图像中用 color颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。
8、用 TrueType 字体向图像写入文本
1)语法:array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
2)参数:
- a、$size,字号大小,自定义,同word字号一样;
- b、$angle,旋转角度(0~360);
- c、$x和$y,定义了第一个字符的基本点(大概是字符的左下角)。
- d、$fontfile,是想要使用的 TrueType 字体的绝对路径;
- e、$text,UTF-8 编码的文本字符串(其它编码要进行转换)。
9、为图像分配透明颜色imagecolorallocatealpha()
1)语法:int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
2)说明:imagecolorallocatealpha() 的行为和 imagecolorallocate() 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0表示完全不透明,127 表示完全透明。
示例:水印制作
- //创建画布
- $img=imagecreatetruecolor(300,200);
- $color=imagecolorallocate($img,200,200,200);
- //设置透明颜色
- $color_alpha=imagecolorallocatealpha($img,0,0,255,100);
- //设置画布背景色
- imagefilledrectangle($img,0,0,300,200,$color);
- //设置水印文字
- imagettftext($img,30,0,130,170,$color_alpha,'./font/ygy.ttf','图片水印');
- //输出画布图像
- header("content-type:image/png");
- imagepng($img);
- imagedestroy($img);
结果如下:
图片.png
10、生成图像缩略图
1)描述:将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。
2)语法:bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
3)参数:
- a、$dst_image,目标图像;
- b、$src_image,源像图;
- c、$dst_x和$dst_y,目标图像x、y坐标;
- d、$src_x和$src_y,源图像x、y坐标;
- e、$dst_w和$dst_h,目标图像的宽度和高度;
- f、$src_w和$src_h,源图像的宽度和高度;
4)提示:如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。
示例:
- //从已知背景上来创建画布
- $img_src = imagecreatefromjpeg('./img/abc.jpg');
- $src_w = imagesx($img_src);
- $src_h = imagesy($img_src);
- //创建缩略画布
- $dst_w = $src_w*0.5;
- $dst_h = $src_h*0.5;
- $img_dst = imagecreatetruecolor($dst_w,$dst_h);
- //复制原图像素并插入到缩略图中
- imagecopyresampled($img_dst,$img_src,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
- //保存并关闭图像释放资源
- imagejpeg($img_dst,'./img/abc_dst.jpg');
- imagedestroy($img_src);
- imagedestroy($img_dst);
结果如下:
图片.png
PHP图像处理(GD库)的更多相关文章
- PHP图形图像处理之初识GD库
d=====( ̄▽ ̄*)b 引语 php不仅仅局限于html的输出,还可以创建和操作各种各样的图像文件,如GIF.PNG.JPEG.WBMP.XBM等. php还可以将图像流直接显示在浏览器中. 要处 ...
- GD库处理图像
在PHP5中,动态图象的处理要比以前容易得多.PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了.PHP5包含的GD库正是升级的GD2库,其中包含支持真彩图像 ...
- 烂泥:centos单独编译安装gd库
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天一直在弄一个商城系统,该系统的源码及数据库都已经上传并创建完毕.但是在安装该系统时,却提示缺少gd库.如下: 使用php探针查看,发现php确实没 ...
- php中GD库的简单使用
在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...
- 【CentOS】php编译安装gd库
一.准备工作 使用之前服务器按源码最小化安装完nginx.php-fpm,没有安装gd库,下面介绍下gd库的安装. gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建 ...
- C&C++图形图像处理开源库
Google三维APIO3D O3D 是一个开源的 WebAPI 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准.此格式期望真正的基于浏览器,独立于操作系统之外, ...
- GD库简介和使用
简介 php并不仅限于创建html输出,它也可以创建和处理包括GIF,PNG,jpef,wbmp以及xpm在内的多种格式的图像.更加方便的是,php可以直接将图像数据库输出到浏览器.要想在php中使用 ...
- php 安装扩展插件实例-gd库
今天给php 安装一个扩展插件 gd库 一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...
- PHP的GD库
GD库 PHP通过GD库,可以对JPG.PNG.GIF.SWF等图片进行处理.GD库常用在图片加水印,验证码生成等方面. 绘制线条 要对图形进行操作,首先要新建一个画布,通过imagecreatetr ...
- gd库
1.开启GD库扩展 去掉注释: extension=php_gd2.dll extension_dir='ext目录所在位置' 2.检测GD库是否开启 phpinfo(); //检测扩展是够开启 ex ...
随机推荐
- KaliLinuxNetHunter教程下载相关资源
KaliLinuxNetHunter教程下载相关资源 当用户将刷机工具准备完后,则需要下载ROM包.ROM是ROM image(只读内存镜像)的简称,常用于手机定制系统.一般手机刷机的过程,就是将只读 ...
- angular中service封装$http做权限时拦截403等状态及获取验证码倒计时、跨域问题解决
封装$http.做权限时拦截403等状态及获取验证码倒计时: 拦截接口返回状态 var app = angular.module('app'); app.factory('UserIntercepto ...
- 数字图像特征提取之HOG特征
1.灰度化:(以便可以使用sobel等算子计算梯度)2.gamma校正: (降低光照影响)3.求每个像素的梯度和方向: (利用任意一种梯度算子,例如:sobel,laplacian等,对该patch进 ...
- angular.identity()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- window 日志清楚
@echo offset srcDir="D:\ApplicationLogs"set daysAgo=15forfiles /p %srcDir% /s /m *.* /d -% ...
- Anaconda安装Package的问题(Permission Denied)
最近需要用到低版本的pytorch,使用pytorch官网安装的pytorch版本是最新的0.4.1,而它的previous version的那个链接一直打不开. 因此考虑使用清华的镜像源: 1.In ...
- IOS不支持iframe的解决办法
最近做ios的兼容,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制 ...
- PHP字符串处理 单引号 双引号 heredoc nowdoc 定界符
---恢复内容开始--- 2019年2月22日09:49:54 参考文档: http://php.net/manual/zh/language.types.string.php#language. ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- CF653F Paper task
题目链接:洛谷 首先我们不考虑本质不同这个限制. 既然不能直接用栈乱搞,我们就可以用一个前缀和的套路了. 我们将(设为1,将)设为-1,记前缀和为$s_i$,则$[i,j]$这一段是回文子串当且仅当 ...