2017-09-29 2 views
1

Ich habe versucht, herauszufinden, wo das Problem den ganzen Tag lang ist, schrieb ich einige PHP-Code zum Einbetten von Text in einem gegebenen Bild. Ich platziere alle drei Buchstaben in jedem Pixel, indem ich seinen ASCII-Wert als RGB-Werte verwende. Mein Problem ist, dass wenn ich das Skript starte, es für immer lädt. Ich denke, ich habe einige Probleme mit meinem Code, aber ich kann es nicht herausfinden, der Debugger hat auch nicht viel geholfen. Hier ist mein Code:PHP-Skript wird für immer geladen und zeigt keine Ausgabe

<?php 
$img = imagecreatefromjpeg ("https://dataencrypt.xyz/testimage.jpg"); 
$data = "abcdefghi"; //example 
if($q=strlen($data)%3!=0){ 
    $q==1?$data.="--":$data.="-"; 
} 
if($img!=false){ 
    for($i = 0;$i<(strlen($data)-3);$i+3){ 
     $part = substr ($data , $i,3 ); 
     $color = getEncryptedColor($img,$part); 
     imagesetpixel($img, $i,$i, $color); 
    } 
} 
$decrypted = decryptDataFromImage($img,0,0); // get the first 3 letters. 
echo "".$decrypted; 
imagedestroy($img); 

function getEncryptedColor($img,$string){ 
    return imagecolorallocate($img, ord($string[0]), ord($string[1]), ord($string[2])); 
} 
function printImageValues($image,$num){ 
    for($x = 0;$x<$num;$x++){ 
     echo "\n".imagecolorat($image, $x, $x); 
    } 
    echo "--END--"; 
} 
function decryptDataFromImage($img,$x,$y){ 
    $currpixel = imagecolorat($img, $x, $y); 
    $colors = imagecolorsforindex($img, $currpixel); 
    $str = "".chr($colors["red"]).chr($colors["green"]).chr($colors["blue"]); 
    return $str; 
} 
?> 
+2

Möglicherweise ist das nicht das einzige Problem, aber die erste Schleife wird niemals beendet - Sie müssen '$ i + = 3 anstelle von $ i + 3' verwenden – iainn

+0

Die einzige Schleife, die Sie haben, ist in' printImageValues 'aber ich kann nicht sehen, wo Sie diese Funktion nennen. – Andreas

Antwort

0

Ihre for Schleife läuft immer, weil Sie $i+3 schrieb, statt diesen Wert zu $i Zuordnung, die $i = $i + 3

Also diesen Teil ändern würde:

for($i = 0;$i<(strlen($data)-3);$i+3)

in

+0

Eigentlich ist die Antwort im ersten Kommentar! (Ich wollte dich nur wissen lassen) – EhsanT

+0

Wow danke vielen Menschen, kann nicht glauben ich habe das bis jetzt nicht bemerkt. Du machst nur meinen Tag. –

Verwandte Themen