我可以将变量传递给PHP GD imagefilter吗?

时间:2012-07-12 14:22:30

标签: php gd imagefilter

我知道imagefilter函数需要很长但有一种方法可以将变量强制转换为long或者我只是为每个过滤器创建单独的函数。我的想法是:

public function ImgFilter($filter, $arg1=null, $arg2=null){
    $this->lazyLoad();
    if($this->_cache_skip) return;
    if(isset($this->_image_resource)){
        imagefilter($this->_image_resource, $filter);
    }
}

抱怨我的$filter变量。对于此示例,我的$filter值为:IMG_FILTER_GRAYSCALE

这可能吗?

3 个答案:

答案 0 :(得分:3)

本发明提供:

$filter = "IMG_FILTER_GRAYSCALE"

您应该可以使用函数constant

imagefilter($this->_image_resource, constant($filter));

但请注意,以下内容也可以正常使用:

$filter = IMG_FILTER_GRAYSCALE
imagefilter($this->_image_resource, $filter);

如果需要,可以将常量作为参数传递而不会出现问题。前者仅在您确实需要常量名称为动态时才有用。

答案 1 :(得分:0)

以这种方式进行施法:

<holder> = (<type>) <expression>

$var = (int) "123";

答案 2 :(得分:0)

以下功能可以满足您的需求:

public function ImgFilter($filter, $arguments = array())
{
    $this->lazyLoad();

    if ($this->_cache_skip) {
        return;
    }

    if (isset($this->_image_resource)) {
        $params = array($this->_image_resource, $filter);

        if (!empty($arguments)) {
            $params = array_merge($params, $arguments);
        }

        call_user_func_array('imagefilter', $params);
    }
}

然后像这样使用它:

$this->ImgFilter(IMG_FILTER_GRAYSCALE);
$this->ImgFilter(IMG_FILTER_COLORIZE, array(0, 255, 0));