» imagebmp(): gute Funktion gefunden!

Ausgabe meiner IP-Cam gezielt per PHP aufnehmen?Neuen Thread eröffnenNeue Antwort erstellen5stelligen code generieren, abspeichern,...
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52420
Wohnort: Lohmar


Meine eBay-Auktionen:
20.04.2010, 09:17
zitieren

Ich habe hier eine gute imagebmp Funktion gefunden, die ich nur maginal optimiert bzw. neu formatiert habe.

8 und 24 Bit ohne Kompression habe ich getestet. 32 Bit wird nicht unterstützt, ist aber zu verschmerzen.

function imagebmp($im, $filename='', $bit=24, $compression=0) {
// version 1.00
if (!in_array($bit, array(1, 4, 8, 16, 24, 32))) {
$bit = 24;
}
else if ($bit == 32) {
$bit = 24;
}
$bits = pow(2, $bit);
imagetruecolortopalette($im, true, $bits);
$width = imagesx($im);
$height = imagesy($im);
$colors_num = imagecolorstotal($im);
$rgb_quad = '';
if ($bit <= 8) {
for ($i = 0; $i < $colors_num; $i++) {
$colors = imagecolorsforindex($im, $i);
$rgb_quad .= chr($colors['blue']) . chr($colors['green']) . chr($colors['red']) . "\0";
}
$bmp_data = '';
if ($compression == 0 || $bit < 8) {
$compression = 0;
$extra = '';
$padding = 4 - ceil($width / (8 / $bit)) % 4;
if ($padding % 4 != 0) {
$extra = str_repeat("\0", $padding);
}
for ($j = $height - 1; $j >= 0; $j --) {
$i = 0;
while ($i < $width) {
$bin = 0;
$limit = $width - $i < 8 / $bit ? (8 / $bit - $width + $i) * $bit : 0;
for ($k = 8 - $bit; $k >= $limit; $k -= $bit) {
$index = imagecolorat($im, $i, $j);
$bin |= $index << $k;
$i++;
}
$bmp_data .= chr($bin);
}
$bmp_data .= $extra;
}
}
// RLE8
else if ($compression == 1 && $bit == 8) {
for ($j = $height - 1; $j >= 0; $j--) {
$last_index = "\0";
$same_num = 0;
for ($i = 0; $i <= $width; $i++) {
$index = imagecolorat($im, $i, $j);
if ($index !== $last_index || $same_num > 255) {
if ($same_num != 0) {
$bmp_data .= chr($same_num) . chr($last_index);
}
$last_index = $index;
$same_num = 1;
}
else {
$same_num++;
}
}
$bmp_data .= "\0\0";
}
$bmp_data .= "\0\1";
}
$size_quad = strlen($rgb_quad);
$size_data = strlen($bmp_data);
}
else {
$extra = '';
$padding = 4 - ($width * ($bit / 8)) % 4;
if ($padding % 4 != 0) {
$extra = str_repeat("\0", $padding);
}
$bmp_data = '';
for ($j = $height - 1; $j >= 0; $j--) {
for ($i = 0; $i < $width; $i++) {
$index  = imagecolorat($im, $i, $j);
$colors = imagecolorsforindex($im, $index);
if ($bit == 16) {
$bin = 0 << $bit;
$bin |= ($colors['red'] >> 3) << 10;
$bin |= ($colors['green'] >> 3) << 5;
$bin |= $colors['blue'] >> 3;
$bmp_data .= pack("v", $bin);
}
else {
$bmp_data .= pack("c*", $colors['blue'], $colors['green'], $colors['red']);
}
}
$bmp_data .= $extra;
}
$size_quad = 0;
$size_data = strlen($bmp_data);
$colors_num = 0;
}
$file_header = 'BM' . pack('V3', 54 + $size_quad + $size_data, 0, 54 + $size_quad);
$info_header = pack('V3v2V*', 0x28, $width, $height, 1, $bit, $compression, $size_data, 0, 0, $colors_num, 0);
if ($filename != '') {
$fp = fopen($filename, 'wb');
fwrite($fp, $file_header . $info_header . $rgb_quad . $bmp_data);
fclose($fp);
return true;
}
echo $file_header . $info_header. $rgb_quad . $bmp_data;
return true;
}

Das passende imagecreatefrombmp-Gegenstück gibts hier:
http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm


pn email
Gast 
20.04.2010, 09:17
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "imagebmp(): gute Funktion gefunden!" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
Gute Alternative zu Type-R Hecklippe gefunden
Hallo, lange habe ich nach einer Hecklippe gesucht, die der Type-R Lippe recht nahe kommt, aber etwas spezielles hat, um sich von der Masse abzuheben. Und diese will ich euch natürlich nicht vorenthalten. Besonderer Vorteil ist bei dieser...
von Jiss
1
525
06.11.2008, 16:50
chartinael
LSD Funktion
Wollte mal wissen ob irgendjemand von euch weiß wie man herausfindet ob das LSD so funktioniert wie es soll? Oder könnte man sonst überhaupt nicht fahren. Wie weiß ich ob das LSD wirklich jetzt sperrt oder...
von Honda_Civic_Boy_VB
4
354
29.09.2011, 10:35
Honda_Civic_Boy_VB
ZV ohne Funktion
Hallo, ich habe das Problem, das mein ZV mit einen Schlüssel nicht Funktioniert, ich weiß von anderen Hersteller das man Schlüssel anlernen, codieren muss, habe vor drei Wochen einen komplett reset durchgefürt, gibt es sowas auch bei Honda und wie geht...
von wund
1
1.899
23.02.2011, 21:20
Spink
Berganfahrhilfe - Funktion
Vielleicht kann mir jemand kurz helfen. Wie funktioniert die Berganfahrhilfe im CRZ? Ich habe diesbezüglich keine Taste gefunden. Danke für eure...
von Japanbomber
2
351
13.01.2020, 07:02
Japanbomber
Sound Off Funktion
hätte da mal ne kleine Anregung. Die Chat Sounds können einem Teilweise echt auf den Geist gehen :yes: Ich weis nicht wie oft ich mich zu Tode erschrecke, weil ich den Chat im Hintergrund habe und auf einmal son Sound kommt! Meistens hatte ich dann...
von HugoFreund
3
360
07.06.2011, 20:20
Pumsti
Problem mit PN funktion
Hallo Leute, Bekam von dem User AndreasRoedel eine PM, weil er sich für meinen Civic interessiert. Als flink antworten dachte ich. Jedoch kommt dann auf einmal die Meldung der Benutzer exisiterit nicht. Okay dachte ich, dann schaust mal in die Suche und...
von Mitsupichu
1
138
03.09.2012, 13:23
DarkAngel1977
Airbag Funktion
Hallo, kann mir mal einer sagen wie unser Airbag ausgelöst wird? Dafür muss es ja ein Aufprallsensor geben, wo sitzt dieser und wie funktioniert...
von Ingo01
3
211
10.11.2016, 16:20
stussy
V-Tec auf Funktion prüfen?
Sevus Leute, ich bin eben auf dieses Forum gestoßen und habe mich gleich mal angemeldet. Ich fahre seit ca nem Monat einen Del Sol V-Tec 1,6L 125Ps Baujahr 1993. Da ich vorher noch nie Honda gefahren habe, kenne ich mich leider nicht mit V-Tec...
von Mr.Schraubergott
11
1.078
09.06.2012, 18:29
Dragonia
array in funktion
Hallo , ich möchte 4 zahlen nach der Größe sortieren, das ist für mich Jetzt kein Problem, allerdings möchte ich die Sortierung in einer Funktion machen. Aber die zahlen sollen trotzdem in der main ausgegeben werden also call by reference, kann mir...
[C++]von arti1012
1
356
28.06.2015, 13:33
arti1012
Drehzahlmesser funktion ed6
Hallöchen, weiß jemand iwe der drehzahlmesser aufgebaut ist? Sprich wo der geber (sensor ist). Ich hab nämlich das problem das er absolut gar nicht funzt... Vieleicht hat ja jemand nen paar...
von Tarique
6
2.133
29.10.2005, 08:51
Ed6er
© 2004 - 2024 www.programmierer-forum.de | Communities | Impressum |