Ich habe kürzlich nach einer Methode gesucht, per PHP-Skript Bilddateien in Monochrom-Bitmaps für mein Snom 360 zu konvertieren.
Die gd-Bibliothek von PHP bietet von Haus aus keine BMP-Unterstützung, aber auf http://www.jpexs.com/download/php/bmp_1.php findet sich eine passende Umsetzung.
Damit kann man dann mit folgendem Code eine Bilddatei in ein Snom-kompatibles Bitmap verwandeln:
Nicht-quadratisches Eingangsmaterial wird hier nicht korrekt gehandhabt, kann man aber leicht beheben (imagecopyresampled()-Zeile).
Bei kontrastarmen Bildern kommt allerdings naturbedingt meist nicht viel brauchbares heraus, eventuell kann man das jedoch je nach Eingangsmaterial durch Ändern der Koeffizienten in der Zeile $gs = ... verbessern.
Die gd-Bibliothek von PHP bietet von Haus aus keine BMP-Unterstützung, aber auf http://www.jpexs.com/download/php/bmp_1.php findet sich eine passende Umsetzung.
Damit kann man dann mit folgendem Code eine Bilddatei in ein Snom-kompatibles Bitmap verwandeln:
PHP:
require_once 'bmp.inc.php'; // http://www.jpexs.com/download/php/bmp_1.php
header('Content-Type: image/bmp');
$infile = $_GET['img'];
list($width, $height) = getimagesize($infile);
$ext = strtolower(end(explode('.',$photo_name)));
if ($ext == 'jpg' || $ext == 'jpeg')
$source = imagecreatefromjpeg($infile);
else if ($ext == 'gif')
$source = imagecreatefromgif($infile);
else if ($ext == 'png')
$source = imagecreatefrompng($infile);
else
die('Invalid image format');
$small = imagecreatetruecolor(64,64);
imagecopyresampled($small,$source,0,0,0,0,64,64,$width, $height);
imagedestroy($source); $source = &$small;
$width = 64; $height = 64;
$bwimage= imagecreate($width, $height);
$paletteBlack = imagecolorallocate( $bwimage, 0, 0, 0 );
$paletteWhite = imagecolorallocate( $bwimage, 255, 255, 255 );
// monochrome conversion taken from http://www.captchakiller.com/php-convert-monochrome
for ($y=0;$y<$height;$y++)
for ($x=0;$x<$width;$x++)
{
$rgb = imagecolorat($source,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$gs = (($r*0.299)+($g*0.587)+($b*0.114));
if ( $gs > 150 )
imagesetpixel($bwimage,$x,$y,$paletteWhite);
else
imagesetpixel($bwimage,$x,$y,$paletteBlack);
}
imagebmp($bwimage);
Nicht-quadratisches Eingangsmaterial wird hier nicht korrekt gehandhabt, kann man aber leicht beheben (imagecopyresampled()-Zeile).
Bei kontrastarmen Bildern kommt allerdings naturbedingt meist nicht viel brauchbares heraus, eventuell kann man das jedoch je nach Eingangsmaterial durch Ändern der Koeffizienten in der Zeile $gs = ... verbessern.
Zuletzt bearbeitet: