【问题标题】:Getting rgb values from an image with different colors从具有不同颜色的图像中获取 rgb 值
【发布时间】:2016-09-22 01:20:35
【问题描述】:

只要图像是纯色,下面的代码(主要来自此处)将以图像的颜色创建文本。我希望能够在图像不是一种颜色时创建文本,就像它是表面具有不同、随机颜色的砖块图像一样。我在这里找到了一些代码,其中源的每个像素都可以被读取,但随后它会合并这些代码,这并不能提供真正的再现。这可能吗>

    $im = imagecreatefrompng('green.png');
    $rgb = imagecolorat($im, 4,4);
    $r = ($rgb >> 16) & 0xFF;
    $g = ($rgb >> 8) & 0xFF;
    $b = $rgb & 0xFF;

    echo '<div style="font-size:60px;color:rgb(' .$r .','.$g.','.$b.')">Text in color of the Image</div>';

【问题讨论】:

  • 您想在红色图像上用红色书写?这会有什么用?

标签: php image argb


【解决方案1】:

我取了 10 个样本而不是一个样本,然后对颜色进行平均。您可以尝试更多示例。

        <?php 
    $im = imagecreatefrompng('images/green.png');

    $width = imagesx($im);
    $height = imagesy($im);        

    $hpart = round($width/5);  // divide image in five columns
    $vpart = round($height/2); // divide image in two rows


    $r = 0;
    $g = 0;
    $b = 0;

    $rarr = array();
    $garr = array();
    $barr = array();


    for($i=0; $i<5; $i++) {
        $sampleh = round($hpart/2) + ($hpart*$i);
        $samplev = round($vpart/2);

        $rgb = imagecolorat($im, $sampleh,$samplev);
        $r += ($rgb >> 16) & 0xFF;
        $g += ($rgb >> 8) & 0xFF;
        $b += $rgb & 0xFF;        

        $rarr[] = ($rgb >> 16) & 0xFF;
        $garr[] = ($rgb >> 8) & 0xFF;
        $barr[] = $rgb & 0xFF;

    }

    for($i=0; $i<5; $i++) {
        $sampleh = round($hpart/2) + ($hpart*$i);
        $samplev = round($vpart/2) + $vpart;

        $rgb = imagecolorat($im, $sampleh,$samplev);
        $r += ($rgb >> 16) & 0xFF;
        $g += ($rgb >> 8) & 0xFF;
        $b += $rgb & 0xFF;     

        $rarr[] = ($rgb >> 16) & 0xFF;
        $garr[] = ($rgb >> 8) & 0xFF;
        $barr[] = $rgb & 0xFF;            

    }        

    $r = round($r/10);
    $g = round($g/10);
    $b = round($b/10);

   // echo "$r , $g, $b <br/>\n";        

    //        $rgb = imagecolorat($im, 4,4);
    //        $r = ($rgb >> 16) & 0xFF;
    //        $g = ($rgb >> 8) & 0xFF;
    //        $b = $rgb & 0xFF;
    //        echo "$r , $g, $b <br/>\n";    

    echo "<div> <img src='images/green.png' border=1 /></div><br/>\n";
    echo '<div style="font-size:60px;color:rgb(' .$r .','.$g.','.$b.')">Text in color of the Image</div>';

    $text = "Text in color of the Image";
    $coloredText = "";
    $j = 0;

    for($i=0; $i<strlen($text); $i++) {
        $coloredText .= '<span style="color:rgb(' .$rarr[$j] .','.$garr[$j].','.$barr[$j].')">'.$text[$i].'</span>';
        $j++;
        if($j === 10) {
            $j=0;
        }
    }

    echo "<div style='font-size:60px;'>$coloredText </div>\n";
    ?>

【讨论】:

  • 感谢您的代码,但由于某种原因它不能满足我的要求。我使用的图像是 220x220 并且是石板图像,​​所以它是灰色的,混合了白色。当我运行你的代码时,图像总是灰色的。我尝试更改 for 循环中的计数、for 循环的数量以及列号和行号,但结果始终是灰色文本。显示的代码给出的颜色为 152 , 156, 156 。如果我将样本加倍,它将变为 151、155、155。知道我可能会丢失什么吗?
  • 我编辑了答案。我根据图像中的每个样本更改了文本每个字母的颜色。希望能提出一个更好的解决方案..
  • 我尝试了最后一种方法,如果我增加样本,它确实会改变斑点的颜色。但我希望让每个字母都使用图像。理想情况下,如果我可以创建一个透明图像,然后用背景图像填充它,我想它会做我想要的。所以我更改了代码以尝试这样做,但它不起作用。有任何想法吗?我无法发布我想出的代码。我应该为它打开另一个线程吗?
  • 我发现这个页面显示了这是如何完成的,但是代码对我不起作用并且该线程已关闭,任何人都可以让它工作吗? phpbuilder.com/columns/cash20030526.php3?page=5
猜你喜欢
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多