生成图像上的单色

Posted

技术标签:

【中文标题】生成图像上的单色【英文标题】:Single color on generated image 【发布时间】:2012-10-26 13:01:48 【问题描述】:

我的脚本将多张图像粘合到一个图像中,但结果图像在胶合图像集中的第一张图像上以单一颜色为主:

但输入的 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】:

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

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

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

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

【讨论】:

以上是关于生成图像上的单色的主要内容,如果未能解决你的问题,请参考以下文章

在opencv中将三个灰度[R,G,B]图像合并为单色图像

将单色图像转换为二进制字符串的最佳方法是啥?

如何选择RGB图像单色通道MATLAB?

69 RGB图像转单色位图

69 RGB图像转单色位图

69 RGB图像转单色位图