2016-09-22 105 views
1

只要圖像是純色,下面的代碼(主要來自這裏)將創建圖像顏色的文本。我希望能夠在圖像不是一種顏色時創建文本,就像它是表面具有不同顏色,隨機顏色的磚塊圖像一樣。我在這裏發現了一些代碼,其中源的每個像素都可以被讀入,但是然後它合併那些並且不能給出真正的複製。這是可能的>從不同顏色的圖像中獲取RGB值

$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>'; 
+0

你想在紅色圖像上寫紅色?這將如何有用? –

回答

0

而不是一個樣本,我拿了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"; 
    ?> 
+0

感謝您的代碼,但由於某種原因,它不會做我想要的。我使用的圖像是220x220,是石板的圖像,因此灰色和白色混合在一起。當我運行代碼時,圖像始終是灰色的。我試着改變for循環中的count,for循環的次數和列和行的數字,但結果總是灰色的文本。顯示的代碼給出了152,156,156的顏色。如果我將樣本加倍,它會變成151,155,155。有什麼想法可能會丟失? – user3052443

+0

我編輯了答案。根據圖像中的每個樣本,我改變了文本每個字母的顏色。希望能出現一個更好的解決方案.. –

+0

我試過最後一種方法,如果我增加了樣本,它確實改變了點的顏色。但我正在尋找使每封信使用圖像。理想情況下,如果我能創建一個透明圖像,然後用背景圖像填充它,我想它會做我想要的。所以我改變了代碼,試圖做到這一點,但它不工作。有任何想法嗎?我無法發佈我想出的代碼。我應該打開另一個線程嗎? – user3052443

相關問題