Max Großmanns Website

Was denken Sie?

# Bit2Pic

Generieren Sie aus einem Textstring ein Bild. Genutzt wird hier ASCII.


# Wie funktioniert es?

Jedes Zeichen hat einen bestimmten ASCII-Wert, M zum Beispiel 77. Diesen Wert kann man mit der PHP-Funktion ord() ermitteln und mit der Funktion chr() geht das Ganze auch rückwärts, also von ASCII-Wert zum Buchstaben.
Diese Möglichkeit machen wir uns zunutze, denn der weitverbreitete RGB-Farbraum unterstützt jeweils Farben von 0-255, also insgesamt 256^3 = 16777216 Farben, welche wir in einem Bild benutzen können.

Farbe = rgb(R,G,B)

Nachdem wir also den ASCII-Wert ermittelt haben, können wir mit der PHP-Funktion imagesetpixel() einen Pixel an einer bestimmten Positon setzen und zwar an der Position $i, welche in einer foreachschleife uns die Stelle des aktuellen Buchstabens ausgibt (wir haben den vollen String zuerst zerteilt [str_split()] in Teile zu je einem Zeichen). Nun setzen wir also Pixel für Pixel, bis das Bild fertig ist. Dann wird es durch PHP mit der Funktion imagepng() ausgegeben. Warum wir hier PNG und nicht JPG/GIF/XYZ verwenden? PNG speichert verlustfrei und hat dazu noch kleine Dateigrößen. Wir benötigen maximale Farbtreue (32bit), damit wir bei der Rückkonvertierung nicht irgendwelche wirren Zeichen herausbekommen.

# Das Script

<?php
/*
Copyright (c) 2010 <Max Großmann>

Permission is hereby granted, free of charge,
to any person obtaining a copy of this software
and associated documentation files (the "Software"),
to deal in the Software without restriction,
including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to
whom the Software is furnished to do so, subject to the
following conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/

header("Content-Type: image/png");

$str stripslashes($_GET["t"]); # String übergeben durch GET[t]
$img imagecreatetruecolor(strlen($str),1); # wichtig: truecolor nicht weggelassen!
imagefill($img,0,0,imagecolorallocate($img,255,255,255));
$fix str_split($str,1);
$ascii = array();

foreach (
$fix as $ch) {
$ascii[] = ord($ch);
}

foreach (
$ascii as $i=>$a2ch) {
imagesetpixel($img,$i,0,$a2ch);
}

imagepng($img);
imagedestroy($img);
?>