这是我想要做的。我有一个我创建的类但我只希望类的某些部分显示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);
}
答案 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
}
....
如果您需要更多解释,请告诉我们!