GD库简介和使用

简介

php并不只限于建立html输出,它也能够建立和处理包括GIF,PNG,jpef,wbmp以及xpm在内的多种格式的图像。更加方便的是,php能够直接将图像数据库输出到浏览器。要想在php中使用图像处理功能,你须要连带gd库一块儿来编译php。gd库和php可能须要其余的库,这取决于你要处理的图像格式。php

你可使用PHP中的图像函数来获取下列格式图像的大小:jpeg,gif,png,swf,tiff和jpeg2000.html

若是联合exif扩展一块儿使用,你能够操做存储在jprg和tiff图像文件头部的信息,这样就能够获取数码相机所产生的元数据。exif相关的函数不须要gd库亦可以使用。数据库

getimagesize()函数不须要gd扩展库。windows

格式 支持读取 支持写入 备注
JPEG TRUE TRUE GD 1.8+
PNG TRUE TRUE
GIF TRUE TRUE GD 1.6 和 GD 2.0.28 之间的版本不支持
XBM TRUE TRUE PHP 4.0.1 开始支持读取,PHP 5.0.0 开始支持写入
XPM TRUE FALSE PHP 4.0.1 开始支持读取。Windows 平台上不可用。须要 PHP 绑定的 GD 库
WBMP TRUE TRUE GD 1.8+
WebP TRUE TRUE GD 2.1+, PHP 5.5+

很遗憾的是,虽然上表中显示大部分图像格式都是支持读取和写入的,可是表明你的PHP环境在编译的时候是支持这些操做的。要想检测gd库所支持的格式,请使用gd_info()函数。浏览器

需求

若是你有gd库(可从http://www.libgd.org得到),你就能够建立和处理图像。
能够处理的图像格式由你所使用的gd库版本以及gd库可能须要的其余库决定。GD-1.6以前的版本呢支持gif格式,可是不支持png格式。gd1.6以上,gd2.0.28如下的版本支持Png,可是不支持gif格式。在gd2.0.28中,又从新启用了对于gif格式的支持。函数

Note: 从 PHP 4.3 开始就绑定了 GD 库。 这个版本的库中还提供了一些额外增长的功能,例如透明混> > 合处理。 这个版本的代码被很好的维护着,而且运行稳定, 因此建议优先选择绑定版本。code

安装

在windows中,须要将gd2的dll文件php_gd2.dll做为一个扩展包含在php.ini中。gd1的dll文件php_gd.dll在php4.3.2中被删除了。此外要注意首选的真彩色图像函数,例如imagecreatetruecolor(),须要gd2.htm

Note
要在windows下启用exif,在php.ini中php_mbstring.dll必须在php_exif.dll以前加载。图片

预约义常量

GD_VERSION(); PHP编译所依据的GD版本。
GD_MAJOR_VERSION(); PHP编译所依据的大版本。
GD_MINOR_VERSION(); PHP编译所依据的gd小版本。
GD_RELEASE_VERSION(); PHP编译所依赖的GD发布版本。
GD_EXTRA_VERSION (string) PHP 编译所依据的 GD 扩展版本(beta/rc..)。 (PHP 5.2.4 可用) GD_BUNDLED (integer) 当使用绑定版本的 GD 时,此值为 1, 反之为 0。
...ip

Example 1

<?php

header("Content-type: image/png");
$string = $_GET['text'];
$im     = imagecreatefrompng("images/button1.png");
$orange = imagecolorallocate($im, 220, 210, 60);
$px     = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 3, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);

?>

Example 2
使用Alpha为图片添加水印

<?php
// 加载水印以及要加水印的图像
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');

// 设置水印图像的外边距,而且获取水印图像的尺寸
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);


// 利用图像的宽度和水印的外边距计算位置,而且将水印复制到图像上

imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// 输出图像并释放内存
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

Example 3

使用imagecopymerge()函数建立半透明水印

<?php
// 加载要加水印的图像
$im = imagecreatefromjpeg('photo.jpeg');

// 首先咱们从 GD 手动建立水印图像
$stamp = imagecreatetruecolor(100, 70);
imagefilledrectangle($stamp, 0, 0, 99, 69, 0x0000FF);
imagefilledrectangle($stamp, 9, 9, 90, 60, 0xFFFFFF);
$im = imagecreatefromjpeg('photo.jpeg');
imagestring($stamp, 5, 20, 20, 'libGD', 0x0000FF);
imagestring($stamp, 3, 20, 40, '(c) 2007-9', 0x0000FF);

// 设置水印图像的位置和大小
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// 以 50% 的透明度合并水印和图像
imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50);

// 将图像保存到文件,并释放内存
imagepng($im, 'photo_stamp.png');
imagedestroy($im);

?>
相关文章
相关标签/搜索