2012-07-12 91 views
0

我知道imagefilter函數需要很長的時間,但是有沒有辦法將一個變量放到一個很長的時間,或者我不得不爲每個過濾器創建單獨的函數。我的想法是這樣的:我可以將變量傳遞給PHP GD imagefilter嗎?

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

這可能嗎?

+1

你傳入'」 IMG_FILTER_GRAYSCALE「'作爲**字符串**? – deceze 2012-07-12 14:31:50

回答

3

提供:

$filter = "IMG_FILTER_GRAYSCALE" 

您應該能夠使用的功能constant

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

但是請注意,以下也將工作得很好:

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

你可以如果你需要這樣做的話,可以繞過常數作爲一個參數而沒有問題。前者只有在你真正需要常量名稱纔是有用的時纔有用。

+0

這工作......我走錯了路:)謝謝! – Paul 2012-07-12 14:35:14

0

鑄造製成這樣:

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

$var = (int) "123"; 
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)); 
相關問題