0

我的脚本将几个图像粘合到一个图像中,但结果图像在胶水图像集中的第一张图像上具有单一颜色:

在此处输入图像描述

但是输入的 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;
}

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

在此处输入图像描述

4

1 回答 1

2

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

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

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

$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);
于 2012-10-26T13:23:01.017 回答