用C实现PHP扩展 Image_Tool 图片常用处理工具类的使用

一、类文档说明


代码如下:

class Image_Tool{
    /**
     * 构造Image_Tool对象
     * @param string|array $img_data
     * $img_data可以为图片的路径
     */
 function __construct($img_data="");

/**
  * 添加文字注解,或用于文字水印
  * @access public
  * @param string $txt UTF8编码的文本
  * @param float $opacity 设置透明度
  * @param constant $gravity
  * 设置文字摆放位置:
  * NorthWest,North,NorthEast,West, Center,East,SouthWest,South,SouthEast,Static
  * @param array $font 字体数组可以设置如下属性:
  * name,常量,字体名称,如果需要添加中文注解,请使用中文字体,否则中文会显示乱码。
     *        支持的字体:SimSun(宋体,默认)、SimKai(楷体)、SimHei(正黑)、MicroHei(微米黑)、Arial
     * weight,字体宽度,int
     * size,字体大小,int
     * color,字体颜色,例如:"blue", "#0000ff", "rgb(0,0,255)"等,默认为"black";
     * @return boolean
  */
 function annotate($txt, $opacity, $gravity, array $font);

/**
  * 将对象的数据重新初始化,用于多次重用一个Image_Tool对象
  * @access public
  * @return void
  */
 function clean();

*
  * 图片合成,可以进行多张图片的合成,也可以做图片水印用
  * @access public
  * @param int $src_img 合成的目标图片,可以为ImageTool对象或图片二进制数据
  * @param int $x 合成在画布的X坐标
  * @param string $y 合成在画布的Y坐标
  * @return boolean
  *
 function composite($src_img, $x, $y);

/**
  * 返回错误信息
  * @access public
  * @return string
  */
 function errmsg();

/**
  * 返回错误编号
  * @access public
  * @return int
  */
 function errcode();

/**
  * 进行图片处理操作
  * @access public
  * @param string $format
  * @param boolean $display
  * @return boolean|string 若设置$display为true,返回void,否则返回图片二进制数据。失败时返回false
  */
 function exec($format, $display=false);

/**
  * 水平翻转
  * @access public
  * @return boolean
  */
 function flipH();

/**
  * 垂直翻转
  * @access public
  * @return boolean
  */
 function flipV();

/**
  * 取得图片属性
  * @access public
  * @return array|boolean 错误返回false
  */
 function getImageAttr();

/**
  * 去噪点,改善图片质量,通常用于exec之前
  * @access public
  * @return boolean
  */
 function improve();

/**
  * 缩放图片,只指定width或者height时,将进行等比缩放
  * @access public
  * @param int $width
  * @param int $height
  * @param boolean $thumbnail 是否清除图片附加信息
  * @return boolean
  */
 function resize($width, $height, $thumbnail=true);

/**
  * 按比例缩放.1为原大小
  * @access public
  * @param float $ratio
  * @param boolean $thumbnail 是否清除图片附加信息
  * @return boolean
  */
 function resizeRatio($ratio, $thumbnail=true);

/**
  * 顺时针旋转图片
  * @access public
  * @param int $degree 旋转度数(0 - 360)
  * @return boolean
  */
 function rotate($degree=90);

/**
  * 设置要处理的图片二进制数据
  * @access public
  * @param string $img_blob
  * @return boolean
  */
 function setData($img_blob);
}

三、扩展实现
1.php_fetch_url.h


代码如下:

/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2012 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.01 of the PHP license,      |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_01.txt                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Author:                                                              |
  +----------------------------------------------------------------------+
*/

/* $Id$ */

#ifndef PHP_IMAGE_TOOL_H
#define PHP_IMAGE_TOOL_H

extern zend_module_entry image_tool_module_entry;
#define phpext_image_tool_ptr &image_tool_module_entry

#ifdef PHP_WIN32
# define PHP_IMAGE_TOOL_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_IMAGE_TOOL_API __attribute__ ((visibility("default")))
#else
# define PHP_IMAGE_TOOL_API
#endif

#ifdef ZTS
#include "TSRM.h"
#endif

#define FETCH_THIS Z_OBJCE_P(getThis()), getThis()
#define IMAGETOOL_MAGICKWAND_RSRC_NAME "MagickWand"
#define IMAGETOOL_PIXELWAND_RSRC_NAME "PixelWand"

#define IMAGETOOL_NORTHWEST 1
#define IMAGETOOL_NORTH     2
#define IMAGETOOL_NORTHEAST 3
#define IMAGETOOL_WEST      4
#define IMAGETOOL_CENTER    5
#define IMAGETOOL_EAST      6
#define IMAGETOOL_SOUTHWEST 7
#define IMAGETOOL_SOUTH     8
#define IMAGETOOL_SOUTHEAST 9
#define IMAGETOOL_STATIC    10

#define IMAGETOOL_TOP_LEFT      1
#define IMAGETOOL_TOP_CENTER    2
#define IMAGETOOL_TOP_RIGHT     3
#define IMAGETOOL_CENTER_LEFT   4
#define IMAGETOOL_CENTER_CENTER 5
#define IMAGETOOL_CENTER_RIGHT  6
#define IMAGETOOL_BOTTOM_LEFT   7
#define IMAGETOOL_BOTTOM_CENTER 8
#define IMAGETOOL_BOTTOM_RIGHT  9

#define GET_MAGICK_WAND(zval, magick_wand) zval = zend_read_property(FETCH_THIS, ZEND_STRL("magick_wand"), 0 TSRMLS_CC);\
        ZEND_FETCH_RESOURCE_NO_RETURN(magick_wand, MagickWand*, &zval, -1, IMAGETOOL_MAGICKWAND_RSRC_NAME, le_image_wand);

PHP_MINIT_FUNCTION(image_tool);
PHP_MSHUTDOWN_FUNCTION(image_tool);
PHP_RINIT_FUNCTION(image_tool);
PHP_RSHUTDOWN_FUNCTION(image_tool);
PHP_MINFO_FUNCTION(image_tool);

#ifdef ZTS
#define IMAGE_TOOL_G(v) TSRMG(image_tool_globals_id, zend_image_tool_globals *, v)
#else
#define IMAGE_TOOL_G(v) (image_tool_globals.v)
#endif

#endif /* PHP_IMAGE_TOOL_H */

源码下载地址:http://l9.yunpan.cn/lk/QEcqyYY6zy9YR

(0)

相关推荐

  • 一个典型的PHP分页实例代码分享

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

  • PHP常用工具类大全附全部代码下载

    废话不多说了,直接给大家贴php代码了,具体代码如下所示: <?php /** * 助手类 * @author www.shouce.ren * */ class Helper { /** * 判断当前服务器系统 * @return string */ public static function getOS(){ if(PATH_SEPARATOR == ':'){ return 'Linux'; }else{ return 'Windows'; } } /** * 当前微妙数 * @retu

  • php实现分页工具类分享

    代码: 复制代码 代码如下: /**    * 把中间的看成一个可以滑动的固定长度的尺子    *    * 把$this->_totalShowPages 当成一个可以滑动的固定长度尺子,    * 然后$this->_totalPages就是一个给定长度的木块,尺子在这个    * 木块上滑动.情况两种:    * 1. 尺子长度大于木块长度,那么就直接输出所有的页码:    * 2. 尺子长度小于木块长度,那么就只用找到输出这个尺子长度页    * 数的起始点--$start, $end

  • PHP抓取、分析国内视频网站的视频信息工具类

    使用方法: 复制代码 代码如下: require_once "VideoUrlParser.class.php";$url = "http://v.youku.com/v_show/id_XMjkwMzc0Njg4.html";$info = VedioUrlParser::parse($url);echo $info; 说明:调用该工具php文件VideoUrlParser.class.php,$url变量后面的字符串为视频页的地址,然后使用echo输出变量$in

  • php 分页原理详解

    在看本文之前,请确保你已掌握了PHP的一些知识以及MYSQL的查询操作基础哦. 作为一个Web程序,经常要和不计其数的数据打交道,比如会员的数据,文章数据,假如只有几十个会员那很好办,在一页显示就可以了,可是假如你的网站是几千甚至几十万会员的话,如果都在一页打开的话无论对浏览器还是观看者都是一种折磨,而且如果数据上亿,从数据库里查询一次的话,对服务器的压力是很大的,这不是正确的方法. 相信每个学习PHP的新手都会对分页这个东西感觉很头疼,不过有了默默的这一水帖,你肯定会拍拍脑袋说,嘿,原来分页竟

  • 精美漂亮的php分页类代码

    这是一款简单,方便,功能齐全的分页类,可以根据自己的需要更改CSS样式文件以实现分页颜色的控制,利用php分页类,可以省去自己很多时间,只需要在分页的地方嵌入即可,下面看下使用方法: 1,在head里包含pager.css 复制代码 代码如下: <link href="pager.css" type="text/css" rel="stylesheet" /> 2,在分页处进行类的实例化: 复制代码 代码如下: <?php   

  • php实现网页缓存的工具类分享

    php程序在抵抗大流量访问的时候动态网站往往都是难以招架,所以要引入缓存机制,一般情况下有两种类型缓存 一.文件缓存 二.数据查询结果缓存,使用内存来实现高速缓存 本例主要使用文件缓存. 主要原理使用缓存函数来存储网页显示结果,如果在规定时间里再次调用则可以加载缓存文件. 工具类代码: // 文件缓存类 class Cache { /** * $dir : 缓存文件存放目录 * $lifetime : 缓存文件有效期,单位为秒 * $cacheid : 缓存文件路径,包含文件名 * $ext :

  • 常用PHP封装分页工具类

    分页基本上是每个项目都会使用到的,所以呢,把它封装成一个工具类,以后直接调用就可以了(虽然TP框架的灰常强大,但是自己封一个也未尝不可.),这样既省时又省力还赚'工分'. 我封的这个分页工具类还比较完整,有首页,上一页,下一页,末页和可选数量的页码数量(也就是当页面很多时,只显示依据参数传入的个数),还可以依据需求选择是否使用下拉跳转页面功能. <?php /** * 分页工具类 */ class page{ /** * 返回分页所需字符串 * @param $pageNum int 显示的页码

  • 分享一段PHP制作的中文拼音首字母工具类

    代码很简单,这里就不多BB了,大家看注释吧,注释都看不懂的小伙伴,求放过PHP!!! 复制代码 代码如下: <?php /** * 汉字拼音首字母工具类 *  注: 英文的字串:不变返回(包括数字)    eg .abc123 => abc123 *      中文字符串:返回拼音首字符        eg. 测试字符串 => CSZFC *      中英混合串: 返回拼音首字符和英文   eg. 我i我j => WIWJ *  eg. *  $py = new str2PY()

  • php封装的验证码工具类完整实例

    本文实例讲述了php封装的验证码工具类.分享给大家供大家参考,具体如下: <?php //验证码工具类 class Captcha{ //属性 private $width; private $height; private $fontsize; private $pixes; private $lines; private $str_len; /* * 构造方法 * @param1 array $arr = array(),初始化属性的关联数组 */ public function __con

随机推荐