如何根据数据库字段值在类中添加新值?

时间:2011-07-09 14:35:05

标签: php mysql gd

这是我想要做的。我有一个我创建的类但我只希望类的某些部分显示IF在数据库中设置了某些值。这个类的作用是它为基本图像着色,然后将另一个图像放在上面。有时虽然在数据库中设置了多个图层,但是类必须进行调整以适应。

有人知道如何做或如何做到这一点?

例如,这个类允许基本图像被着色而另一个被缩放并放在顶部:

public function layers2 ($target, $art, $newcopy, $red, $blue, $green) {

    $artLayer = imagecreatefrompng($art); // Art Layer  
    $base = imagecreatefrompng($target); // Base Product
    $base_location = "base";

    $img = imagecreatefrompng($base);

    $width3 = imagesx( $artLayer ); // artLayer
    $height3 = imagesy( $artLayer ); // artLayer

    //COLOR THE IMAGE
    imagefilter($base, IMG_FILTER_COLORIZE, $red, $green, $blue, 1); //the product

    imagecopyresampled($base,$artLayer,350, 150, 0, 0, 300, 300, imagesx( $artLayer ), imagesy( $artLayer ));       // rotate image 

    // save the alpha
    imagesavealpha($base,true);
    // Output final product
    imagepng($base, $newcopy); //OUTPUT IMAGE

}

我想要做的是根据数据库表中设置的基本图像的层数添加另一个值。这是因为有些图像有多层颜色。

这样的事情:

public function layer_3($target, $NEWLAYER, $art, $newcopy, $r, $b, $g) {

    $artLayer = imagecreatefrompng($art); // Art Layer      
    $colorLayer1 = imagecreatefrompng($NEWLAYER); // NEW LAYER      
    $base = imagecreatefrompng($target); // Base Product
    $base_location = "base";

    $img = imagecreatefrompng($base);

    // NEW LAYER
    $width = imagesx( $colorLayer1 ); // colorLayer1
    $height = imagesy( $colorLayer1 ); // colorLayer1

    $width3 = imagesx( $artLayer ); // artLayer
    $height3 = imagesy( $artLayer ); // artLayer

    $img=imagecreatetruecolor( $width, $height ); // NEW LAYER

    imagealphablending($img, true); // NEW LAYER


    $transparent = imagecolorallocatealpha( $img, 0, 0, 0, 127 );
    imagefill( $img, 0, 0, $transparent );

    //COLOR THE IMAGE
    imagefilter($base, IMG_FILTER_COLORIZE, $r, $b, $g, 1); //the base  
    imagecopyresampled($img,$base,1,1,0,0, 1000, 1000, imagesx( $base ), imagesy( $base ) );            
    imagecopyresampled($img,$colorLayer1,1,1,0,0, 1000, 1000, imagesx( $colorLayer1 ), imagesy( $colorLayer1 )); //NEW LAYER    
    imagecopyresampled($img,$artLayer,300, 200, 0, 0, 350, 350, imagesx( $artLayer ), imagesy( $artLayer ));


    imagealphablending($img, false);
    imagesavealpha($img,true);
    imagepng($img, $newcopy);

}

1 个答案:

答案 0 :(得分:0)

据我所知,最简单的方法是使用图层数组作为参数,因此方法签名将是:

public function my_layers_func($target, $NEWLAYERS = array(), $art, $newcopy, $r, $b, $g) 

在你的my_layers_func的主体中,你应该迭代$ NEWLAYERS数组,应用与你在layer_3函数中$ NEWLAYER上所做的相同的转换。

这是一个如何重构函数的示例:

public function my_layers_func($target, $newlayers = array(), $art, $newcopy, $r, $b, $g)
        $artLayer = imagecreatefrompng($art); // Art Layer   
    $colorLayers = array();
    foreach($newlayers as $newlayer){
        $colorLayers[] = imagecreatefrompng($newlayer); // NEW LAYER      
    }
        ....

如果您需要更多解释,请告诉我们!