2016-09-22 3 views
1

Der unten stehende Code (meistens von hier) erzeugt Text in der Farbe des Bildes, solange das Bild eine Volltonfarbe hat. Ich möchte in der Lage sein, den Text zu erstellen, wenn das Bild nicht eine Farbe hat, wie wenn es das Bild eines Ziegels wäre, in dem die Oberfläche unterschiedliche, zufällige Farben hat. Ich habe hier einen Code gefunden, wo jedes Pixel der Quelle eingelesen werden kann, aber dann führt es diese zusammen und das ergibt keine echte Reproduktion. Ist das möglich>RGB-Werte von einem Bild mit verschiedenen Farben erhalten

$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

Sie möchten rot auf rote Bilder schreiben? Wie wird das nützlich sein? –

Antwort

0

Statt einer Probe, nahm ich 10 Proben und gemittelt die Farbe. Sie können mit noch mehr Proben versuchen.

 <?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

Danke für den Code, aber es tut nicht was ich will aus irgendeinem Grund. Das Bild, das ich benutze, ist 220x220 und ist ein Bild von Slate, also ist es grau mit Weiß gemischt. Wenn ich deinen Code starte, ist das Bild immer grau. Ich habe versucht, die Anzahl in den for-Schleifen, die Anzahl der for-Schleifen und die Spalten- und Zeilennummern zu ändern, aber das Ergebnis ist immer Text in grau. Der Code als Show gibt eine Farbe von 152, 156, 156. Wenn ich die Samples verdopple, wird es 151, 155, 155. Irgendeine Idee, was ich vielleicht vermisse? – user3052443

+0

Ich habe die Antwort bearbeitet. Ich änderte die Farbe jedes Buchstabens des Textes entsprechend jeder Probe von dem Bild. Hoffe, dass sich eine etwas bessere Lösung ergibt. –

+0

Ich habe den letzten Ansatz versucht und wenn ich die Probe erhöht habe, hat sie die Farbe an den Stellen verändert. Aber ich möchte, dass jeder Buchstabe das Bild verwendet. Im Idealfall, wenn ich ein transparentes Bild erstellen und dann mit dem Hintergrundbild ausfüllen könnte, würde es tun, was ich will, denke ich. Also habe ich den Code geändert, um das zu versuchen, aber es funktioniert nicht. Irgendwelche Ideen? Ich kann den Code, den ich mir ausgedacht habe, nicht posten. Soll ich einen anderen Thread dafür öffnen? – user3052443

Verwandte Themen