生成图像上的单色

时间:2012-10-26 13:01:48

标签: php gd image-manipulation

我的脚本将多个图像粘合到一个图像中,但结果图像在胶合图像集的第一个图像上占主导地位:

enter image description here

但输入的4张图像有不同的颜色(黄色,绿色,蓝色,红色)。只有来自集合的第一张图片看起来是正确的。

$images = array();

foreach ($fileNames as $fileName) {
    $image = imagecreatefrompng($path . $fileName);
    if ($image) {
        $images[] = $image;
    }
}

// ...

$img = imagecreate($w, $h);

$x = 0;
foreach ($images as $image) {
    $width = imagesx($image);
    $height = imagesy($image);

    imagecopy($img, $image, $x, 0, 0, 0, $width, $height);
    $x += $width;
}

另一个例子(如果胶水套装的第一张图片是蓝色,其他图片是不同的颜色):

enter image description here

1 个答案:

答案 0 :(得分:2)

您可能正在混合调色板图像,其中调色板将从第一个目标图像中获取。

通过创建合适大小的真彩色图像将它们转换为TrueColor,然后将所有图像复制到该图像中。

之后,您可以尝试将目标图像再次缩小为调色板,即使这可能会略微产生“关闭”颜色。

$img = imageCreateTrueColor($w, $h);
// Add transparency management if needed

$x = 0;
foreach ($images as $image) {
    $width  = imagesx($image);
    $height = imagesy($image);    
    imagecopy($img, $image, $x, 0, 0, 0, $width, $height);
    $x += $width;
}
// Reduce image to non-dithered, 256-color paletted if needed
// imageTrueColorToPalette($img, False, 256);