Bilddateien per PHP für Snom konvertieren

mkuron

Neuer User
Mitglied seit
24 Dez 2004
Beiträge
199
Punkte für Reaktionen
0
Punkte
16
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:

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:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.