PHP » Quellcode betrachten

Download

<?php
/*
    Author:        2005 Julian von Mendel (http://derjulian.net)
    License:    LGPL
    Provides:    class steg
                function img_encode
                function img_decode
                function img_clear
                function img_get
*/

class steg
{
    function 
img_encode($text,$ih1)
    { 
// Versteckt Daten in einem Bild
        // Informationen über das Bild ermitteln
        
$farben steg::img_get($ih1);
        
$width imagesx($ih1);
        
$height imagesy($ih1);

        
// Neues Bild vorbereiten
        
$ih2 imagecreatetruecolor($width,$height);

        
// Text ins Binäre umsetzen
        
for($i=0,$bin="";$i<strlen($text);$i++)
        {
            
$tmp decbin(ord(substr($text,$i,1)));
            while(
strlen($tmp)<8$tmp "0".$tmp;
            
$bin .= $tmp;
        }
        
// Schlussbyte, dass das Ende signalisiert anhängen
        
$bin .= "00000111"// 7

        
for($i=0,$fertig=FALSE$i<$height$i++)
        { 
// Höhe
            
for($i2=0$i2<$width$i2++)
            { 
// Breite => $i=y, $i2=x
                // Position im Binärstring berechnen
                
$pos = (($i*$width)+$i2)*3;

                if (
$pos<=strlen($bin))
                {
                    
// Pixelfarbe ermitteln
                    
$pixel $farben[$i2][$i];
                    
$pixel = array($pixel["red"],$pixel["green"],$pixel["blue"]);

                    
// Daten aus Binärstring in Pixelfarbe reinmodulieren
                    
for($i3=0,$werte=array();$i3<=2;$i3++)
                    {
                        
$pixel[$i3]%2!=substr($bin,$pos+$i3,1) ? $werte[$i3] = $pixel[$i3]+$werte[$i3] = $pixel[$i3];
                    }
                }
                else
                {
                    
// Pixelfarbe nicht verändern
                    
$fertig TRUE;
                    
$werte $farben[$i2][$i];
                    
$werte = array($werte["red"],$werte["green"],$werte["blue"]);
                }

                
// Pixel im neuen Bild setzen
                
$farbe imagecolorallocate($ih2,$werte[0],$werte[1],$werte[2]);
                
imagesetpixel($ih2,$i2,$i,$farbe);
            }
        }

        
// Ergebnis zurückgeben
        
if (!$fertig) return FALSE; else return $ih2;
    }

    function 
img_decode($ih1)
    { 
// Liest versteckte Daten aus einem Bild
        // Informationen über das Bild ermitteln
        
$farben steg::img_get($ih1);
        
$width imagesx($ih1);
        
$height imagesy($ih1);

        for(
$i=0,$fertig=FALSE,$bin=""$i<$height && !$fertig$i++)
        { 
// Höhe
            
for($i2=0$i2<$width$i2++)
            { 
// Breite => $i=y,$i2=x
                // Position im Binärstring errechnen
                
$pos = (($i*$width)+$i2)*3;
                
// Position des letzten abgeschlossenen Bytes berrechnen
                
$pos_ganz $pos-($pos%8);

                
// Pixelfarbe ermitteln
                
$pixel $farben[$i2][$i];
                
// Daten aus Pixelfarbe extrahieren und an Binärstring anhängen
                
$bin .= ($pixel["red"]%2).($pixel["green"]%2).($pixel["blue"]%2);

                
// Auf Schlussbyte überprüfen, das Ende signalisiert um ggf. das Lesen abzubrechen
                
if ($pos_ganz%8==&& substr($bin,$pos_ganz-8,8)=="00000111")
                {
                    
$bin substr($bin,0,$pos_ganz-8).substr($bin,$pos_ganz);
                    
$fertig TRUE;
                    break(
2);
                }
            }
        }

        for(
$i=0,$text="";$i<strlen($bin);$i+=8)
            
$text .= chr(bindec(substr($bin,$i,8)));

        if (!
$fertig) return FALSE; else return $text;
    }

    function 
img_clear($ih1)
    { 
// Überschreibt versteckte Daten in einem Bild
        
$str '';
        
$seeds "abcdefghijklmnopqrstuvwxyz0123456789!§$%&/()=?,.-;:_QWERTZUIOPÜASDFGHJKLYXCN";
        
$seeds_count strlen($seeds);
        list(
$usec$sec) = explode(' 'microtime());
        
$seed = (float) $sec + ((float) $usec 100000);
        
mt_srand($seed);
        for (
$i 0$length $i$i++) $str .= $seeds{mt_rand(0$seeds_count 1)};

        return 
steg::img_encode($str,$ih1);
    }

    function 
img_get($ih1)
    { 
// Liest die Farbwerte der Pixel in einem Bild
        
$width imagesx($ih1);
        
$height imagesy($ih1);
        for(
$x=0,$farben=array();$x<$width;$x++)
        { for(
$y=0;$y<$height;$y++) {
            
$farben[$x][$y] = imagecolorsforindex($ih1,imagecolorat($ih1,$x,$y));
        } }
        return 
$farben;
    }
}
?>

© 2009 Julian von Mendel (http://derjulian.net) | Datum: 07.12.2024