2011-07-09 12 views
0

ここは私がしたいことです。私は作成したクラスを持っていますが、クラスの特定の部分には、特定の値がデータベースに設定されているかどうかを示すだけです。クラスがしていることは、ベースイメージを色付けし、別のイメージを上に配置することです。時にはデータベースに複数のレイヤーが設定されているため、クラスが調整する必要があります。データベースのフィールド値に基づいてクラスに新しい値を追加する方法は?

誰でも方法を知っているか、私がこれをどうやってできるかについて何か提案していますか?

SO例えば、このクラスは、ベース画像を着色すると、別の上にスケーリングされ、配置されることを可能にする:

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 

}

Iの数に応じて別の値を追加したいどのようなデータベーステーブルに設定されているベースイメージのレイヤーの数。これは、複数の色のレイヤーを持つ画像があるためです。

ので、このような何か:

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); 

}

答えて

0

私の知る限り最も簡単な方法は、パラメータとして、層の配列を使用することで、見ることができるので、メソッドのシグネチャは次のようになります

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

そして、あなたのmy_layers_funcの本体では、$ NEWLAYERのlayer_3関数と同じ変換を適用して、$ NEWLAYERS配列を反復処理する必要があります。

これは、あなたの機能をリファクタリングできるかのサンプルです:

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

あなたはより多くの説明が必要な場合は、私に教えてください!

+0

本当にありがとうございますが、私があなたが言及したことをやり遂げる方法についてはあまりよく分からないことを認めなければなりません。あなたが精緻化できる方法はありますか? – GGcupie

+0

私はリファクタリングの例で私の答えを編集しました... –

+0

Fabrizioありがとう! – GGcupie

関連する問題