Как добавить новое значение в классе на основе значения поля базы данных? - PullRequest
0 голосов
/ 09 июля 2011

Вот что я хочу сделать. У меня есть класс, который я создал, но я хочу, чтобы только определенные части класса показывали, ЕСЛИ определенные значения установлены в базе данных. Класс делает то, что он окрашивает базовое изображение, а затем помещает другое изображение сверху. Иногда, хотя в базе данных установлено несколько слоев, класс должен быть адаптирован для соответствия.

Кто-нибудь знает, как или делать какие-либо предложения о том, как я могу это сделать?

Так, например, этот класс позволяет окрашивать базовое изображение, а другое масштабировать и размещать сверху:

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 голосов
/ 09 июля 2011

Насколько я вижу, самый простой способ - использовать массив слоев в качестве параметров, поэтому сигнатура метода будет:

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

А в теле вашего my_layers_func вы должны выполнить итерациюМассив $ NEWLAYERS, применяющий те же преобразования, что и в $ NEWLAYER в функции layer_3.

Это пример того, как вы можете реорганизовать свою функцию:

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

Дайте мне знать, если вам нужнобольше объяснений!

...