zoukankan      html  css  js  c++  java
  • GD库简介和使用

    简介

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

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

    如果联合exif扩展一起使用,你可以操作存储在jprg和tiff图像文件头部的信息,这样就可以获取数码相机所产生的元数据。exif相关的函数不需要gd库亦可使用。

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

      </td>
    
    格式 支持读取 支持写入 备注
    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+
      </td>
    

    很遗憾的是,虽然上表中显示大部分图像格式都是支持读取和写入的,但是代表你的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 库。 这个版本的库中还提供了一些额外增加的功能,例如透明混> > 合处理。 这个版本的代码被很好的维护着,并且运行稳定, 所以建议优先选择绑定版本。

    安装

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

    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。
    ...

    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);
    
    ?> 
    
  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/workerman/p/5281255.html
Copyright © 2011-2022 走看看