Last update: 31.03.2008 | © 2024 Julian von Mendel | Datenschutz
<?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]+1 : $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==0 && 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