[ erweiterte Suche ]
Ausgabe meiner IP-Cam gezielt per PHP aufnehmen?Neues Thema eröffnenNeue Antwort erstellenDas Thema einem Freund empfehlenDas Thema druckenimagebmp(): gute Funktion gefunden!
Seite 1 von 2 [12 Beiträge]
Seite: 1, 2 Weiter
AutorNachricht
Administrator 


Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 30240
Chats: 11081
Wohnort: Hennef


Meine eBay-Auktionen:
16.04.2010, 10:09


Es hat mich 4 Tage Arbeit gekostet, aber ich konnte die Funktion nun wie gewünscht fertigstellen.

Sie unterstützt nun alle gängigen 1-, 4-, 8-, 16-, 24- und 32-Bit Bitmaps.

Sie basiert auf der Funktion von DHKold, der diese bei php.net veröffentlicht hatte.

Die fertige Funktion:

   Code:
if (!function_exists('imagecreatefrombmp')) { function imagecreatefrombmp($filename) {
// version 1.00
if (!($fh = fopen($filename, 'rb'))) {
trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING);
return false;
}
// read file header
$meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14));
// check for bitmap
if ($meta['type'] != 19778) {
trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING);
return false;
}
// read image header
$meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40));
// read additional 16bit header
if ($meta['bits'] == 16) {
$meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12));
}
// set bytes and padding
$meta['bytes'] = $meta['bits'] / 8;
$meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4)- floor($meta['width'] * $meta['bytes'] / 4)));
if ($meta['decal'] == 4) {
$meta['decal'] = 0;
}
// obtain imagesize
if ($meta['imagesize'] < 1) {
$meta['imagesize'] = $meta['filesize'] - $meta['offset'];
// in rare cases filesize is equal to offset so we need to read physical size
if ($meta['imagesize'] < 1) {
$meta['imagesize'] = @filesize($filename) - $meta['offset'];
if ($meta['imagesize'] < 1) {
trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING);
return false;
}
}
}
// calculate colors
$meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors'];
// read color palette
$palette = array();
if ($meta['bits'] < 16) {
$palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4));
// in rare cases the color value is signed
if ($palette[1] < 0) {
foreach ($palette as $i => $color) {
$palette[$i] = $color + 16777216;
}
}
}
// create gd image
$im = imagecreatetruecolor($meta['width'], $meta['height']);
$data = fread($fh, $meta['imagesize']);
$p = 0;
$vide = chr(0);
$y = $meta['height'] - 1;
$error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!';
// loop through the image data beginning with the lower left corner
while ($y >= 0) {
$x = 0;
while ($x < $meta['width']) {
switch ($meta['bits']) {
case 32:
case 24:
if (!($part = substr($data, $p, 3))) {
trigger_error($error, E_USER_WARNING);
return $im;
}
$color = unpack('V', $part . $vide);
break;
case 16:
if (!($part = substr($data, $p, 2))) {
trigger_error($error, E_USER_WARNING);
return $im;
}
$color = unpack('v', $part);
$color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3);
break;
case 8:
$color = unpack('n', $vide . substr($data, $p, 1));
$color[1] = $palette[ $color[1] + 1 ];
break;
case 4:
$color = unpack('n', $vide . substr($data, floor($p), 1));
$color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
$color[1] = $palette[ $color[1] + 1 ];
break;
case 1:
$color = unpack('n', $vide . substr($data, floor($p), 1));
switch (($p * 8) % 8) {
case 0:
$color[1] = $color[1] >> 7;
break;
case 1:
$color[1] = ($color[1] & 0x40) >> 6;
break;
case 2:
$color[1] = ($color[1] & 0x20) >> 5;
break;
case 3:
$color[1] = ($color[1] & 0x10) >> 4;
break;
case 4:
$color[1] = ($color[1] & 0x8) >> 3;
break;
case 5:
$color[1] = ($color[1] & 0x4) >> 2;
break;
case 6:
$color[1] = ($color[1] & 0x2) >> 1;
break;
case 7:
$color[1] = ($color[1] & 0x1);
break;
}
$color[1] = $palette[ $color[1] + 1 ];
break;
default:
trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
return false;
}
imagesetpixel($im, $x, $y, $color[1]);
$x++;
$p += $meta['bytes'];
}
$y--;
$p += $meta['decal'];
}
fclose($fh);
return $im;
}}



Ich werde Sie bei Bedarf erweitern, aber so wie sie jetzt ist, hat sie bisher alle durch unsere User hochgeladenen Bilder erfolgreich abgedeckt.

Wie es anfing:
   Zitat:
Ich habe ca. 1.000 durch Nutzer unserer Community hochgeladene Bitmaps zum Test herangezogen.

Diese Funktion geht nicht:
http://printf.ru/wiki/imagecreatefrombmp

Diese auch nicht:
http://snipplr.com/view/24283/imagecreatef­rombmp/

Sinnfrei, weil die includete "function_imagecreatefrombmp.php" fehlt:
http://www.php-code.eu/code/Function-ImageCrea­teFromBMP-169.html

Weitere Tests laufen..

Zuletzt bearbeitet von mgutt am 20.04.2010, 08:33, insgesamt 5-mal bearbeitet

Verfasst am: 16.04.2010, 14:34

Funktioniert nicht (werden falsch ausgelesen und dazu läuft der RAM voll):
http://www.php.net/manual/de/function.imagecre­atefromwbmp.php#83119

Verfasst am: 16.04.2010, 14:50

Nicht kompatibel zu 8 und 16 Bit Bitmaps:
http://www.php.net/manual/de/function.imagecre­atefromwbmp.php#86214

Verfasst am: 16.04.2010, 14:55

Getestet mit den Bugfixes in späteren Kommentaren:
http://www.php.net/manual/de/function.imagecre­ate.php#53879

Resultat:
Noch nicht ganz perfekt.

Ich habe das noch etwas korrigiert, da die Bugfixes nicht korrekt waren und zu Farbfehlern bei 16 Bit Bitmaps führten.

Weiterhin habe ich den Code optimiert und eine Bedingung für 16 Bit Bilder realisiert, die auch eine Palette besitzen.

Aktuell hänge ich bei einigen wenigen Bildern fest, die nicht korrekt umgerechnet werden. Laut Header haben die ebenfalls 16 Bit, aber nach ca. 50% bricht die Umrechnung ab. Keine Ahnung warum.

Die Funktion unterstützt auch kein 32 Bit. Daher suche ich erstmal weiter.

Verfasst am: 16.04.2010, 15:04

Soll bei 32 Bit gehen, funktionierte bei mir aber nur mit 8 Bit:
http://bytes.com/topic/php/answers/6631-bm­p-gd-then-jpg-32-bits

Verfasst am: 16.04.2010, 15:12

Die Funktion hat fast genau den gleichen Fehler wie die von mir zuvor korrigierte von php.net:
http://bytes.com/topic/php/answers/4399-im­agecreatefrombmp (Den Link hatte ich hier gefunden)

Bei bestimmten 16 Bit Bildern gibts Probleme. Allerdings bei ein paar mehr als zuvor.

Es resultiert diese Fehlermeldung:
   Zitat:
Warning: imagecreatefromgd() [function.imagecreatefromgd]: '/tmp/GDZs5PSQ' is not a valid GD file in /www/htdocs/xyz on line 123


Ich vermute mal fast, dass die in der Version komplett ignoriert werden und daher der Fehler auftaucht. Ich mach mir mal die Mühe und formatiere den Code. Mal sehen ob ich was finde.

Zuletzt bearbeitet von mgutt am 20.04.2010, 08:25, insgesamt einmal bearbeitet

Verfasst am: 16.04.2010, 15:39

Ok die Funktion kann allgemein nicht mit 16 Bit Bildern umgehen. Mal sehen ob ich sie erweitern kann.
Verfasst am: 16.04.2010, 15:52

Noch habe ich nichts herausfinden können. Aber dafür habe ich schon mal die 32-Bit Bedingung von hier eingebaut.

Ich muss gleich mal schauen, ob ich überhaupt 32 Bit Bitmaps zum Testen da habe.

Aber bis dahin erstmal weiter mit 16 Bit. Hier hatte schon jemand erfolglos danach gefragt.

Verfasst am: 16.04.2010, 16:00

An die 16 Bit Lösung hat sich hier schon mal jemand rangetraut:
http://stackoverflow.com/questions/1586094­/convert-bitmap-files-into-jpeg-usi­ng-the-gd-library-in-php/1586107#15­86107

Aber die Variante habe ich getestet und ich erhalte wie in dem Kommentar geschildert ebenfalls ein grünes Bild als Resultat.

Verfasst am: 16.04.2010, 16:07

Ich bin bei der Suche hier drüber gestolpert:
http://www.phpsources.org/scripts120-PHP.htm

Funktioniert aber mit gar keiner Bitrate bzw. alle Bilder werden diagonal und schwarz / weiß ausgegeben ;)
Nach obenprofil pn email www icq
Gast 

19.04.2010, 23:29


Mach mit!

Wenn Dir die Beiträge zum Thema "function imagecreatefrombmp(): Läuft mit allen Bitraten!" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:

    » 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...

Verwandte Suchbegriffe

imagecreatefrombmp, create bit bitmap palette, function_imagecreatefrombmp.php, php imagecreatefrombmp, imagecreatefrombmp 8bit error, php image create from bmp loop, php ??????? imagecreatefrombmp, E_USER_WARNING, amd turion prozessor oder welche bitrate
Nach oben
Seite 1 von 2 [12 Beiträge]
Seite: 1, 2 Weiter
Neues Thema eröffnenNeue Antwort erstellen

Ähnliche BeiträgeAutorAntwortenAufrufeLetzter Beitrag
[B] HP Compaq 6715b - ca. 1,5j alt - läuft-läuft-läuft 
HP Compaq 6715b - keine Ahnung was man dafür verlangen kann... Die Tasten sind teilweise deutlich abgegriffen :roll: Er war täglich im Einsatz und muß nun einem neuen Notebook weichen! DIE TECHNISCHEN DATEN: Prozessor: AMD Turion 64 X2...
nfs_freak15023.05.2010, 14:17
TP-Dene
Burnout mit meine Prelude sollte bei allen gehen 
Ich habe mal meine alten Sommerreifen verheitzt, komischer weisse läuft das Auto nach dem Burnout besser. Ich empfehle euch das nicht nach zumachen denn nach einer Woche stinkt es immernoch nach Gummi im Innenraum. Einmal sieht man im video dass der...
Seite: 2 ]
36Chamber14134623.02.2006, 21:51
Metalass
D16Z6 mit allen anbauteilen+ getriebe für 700€ ,, Ebay" 
Tach Leute Schlachte einen silberen Del sol (mit E-Dach) 94er BJ mit d16z6 __125PS__172xxxTkm(Nachweisbar durch checkgheft) Laut vorbesitzer kein ölverbrauch und immer zuverlässig gewesen... kein getriebe kratzen oder sonst was... Motor d16Z6 incl....
Redfire834408.06.2010, 06:46
Redfire
mkfile function 
Hi, diese Funktion erstellt bei Bedarf eine Datei. function mkfile($filename, $data='', $chmod=0644) { if ($data) { // serialize array if (is_array($data)) { $h =...
PHP ]
mgutt09620.09.2009, 13:25
mgutt
The Pursuit of Function 
He Leute ich denke dieses Material gehört mit zu den besten Docu´s die erzählen was JDM eigentlich ist! Ich kann nur sagen es lohnt sich es zu besorgen, nachdem man diese Docu geguckt hat versteht man JDM und den Lebenstil JDM. Ich kann nur sagen ...
Smooth587218821.01.2008, 22:29
Smooth587
Warning: mysql_connect() [function.mysql-connect]: Can't con 
Ich brauche dringend hilfe. auf [URL=http://imp-rom.wdpt.de/]http://imp-rom.wdpt.de[/URL] kann ich nicht weiterarbeiten, weil die MySQL-Verbindung nicht klappt. Ich hab alles versucht, aber die Daten stimmen und ich weiß nicht, was ich jetzt noch tun...
Allgemein ]
mox9.imp-rom351703.09.2009, 12:19
mox9.imp-rom
Amroth's CRX ED9 (Kupplung fertig...läuft läuft 31.07.2010) 
Moin, wollt mal meinen CRX Vorstellen. Hab den wagen im oktober 2008 gekauft mit leichtem hagelschaden auf der haube und diese direkt getauscht Bild nach dem kauf Update: -hab einmal die alte lippe gegen eine neue ausgetauscht (vom renault...
Seite: 2, 3, 4, ..., 13, 14, 15 ]
Amroth140648402.08.2010, 06:52
jeremy
B16A2 läuft mit 440er Düsen unrund, normal? 
Hallo zusammen. Habe heute mein Turbo weiter gemacht und jetzt alles zusammengebaut. Bisher läuft alles ohne ladedruck und nur im Stand. Wo ich die Seriendüsen drin hatte, lief er im Stand völlig normal, ist ja auch nichts anders, Motor ist...
Seite: 2, 3 ]
SilentDeath2172010.03.2010, 23:24
ek4turbo
EG3 mit Tuning Guide - Motor läuft zu fett 
Ich war gerade bei der AU und habe diese nicht bestanden. Ich habe einen EG3 und habe den Unterdruckschlauch dicht gemacht und den Drosselklappen anschlag entfernt. Könnte das die Ursache dafür sein, dass der Motor zu fett läuft oder könnte es an...
Bossi836100930.11.2007, 06:43
Bossi83
probleme mit der neuen ansaugbrücke (Sport)läuft unruhig??? 
hallo zusammen. habe mir vor 3 wochen eine sportansaugbrücke gekauft für 200 euro. nach dem kauf hab ich 2 wochen warten müssen bis es ankommt.nach dem ankommen hab ich gemerkt,das die anschlüsse für die schläuche gaaanz wo anders sind,musste sie...
Seite: 2 ]
Dakingdom881014019.04.2009, 17:15
Dakingdom88
© 2004 - 2010 www.programmierer-forum.de | Communities | Impressum