How to create a thumbnail of a .bmp file?

I use the functions imagecreatefromjpeg , imagecreatefromgif and imagecreatefrompng to create the thumbnails image/jpeg , image/gif and image/png mimes.

I would also like to create thumbnails of .BMP files.

I checked one file and found out that it is mime image/x-ms-bmp .

However, I cannot find a suitable imagecreatefrom... function.

Please offer.

+6
php bmp thumbnails
source share
3 answers

PHP does not have built-in image functions for BMP.

There have been several attempts to create functions for this.

In this comment in the PHP documentation, you will find a robust and well-documented version: http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214

Here is the function from this comment without excellent documentation that does a lot more, but much more readable:

 public function imagecreatefrombmp($p_sFile) { $file = fopen($p_sFile,"rb"); $read = fread($file,10); while(!feof($file)&&($read<>"")) $read .= fread($file,1024); $temp = unpack("H*",$read); $hex = $temp[1]; $header = substr($hex,0,108); if (substr($header,0,4)=="424d") { $header_parts = str_split($header,2); $width = hexdec($header_parts[19].$header_parts[18]); $height = hexdec($header_parts[23].$header_parts[22]); unset($header_parts); } $x = 0; $y = 1; $image = imagecreatetruecolor($width,$height); $body = substr($hex,108); $body_size = (strlen($body)/2); $header_size = ($width*$height); $usePadding = ($body_size>($header_size*3)+4); for ($i=0;$i<$body_size;$i+=3) { if ($x>=$width) { if ($usePadding) $i += $width%4; $x = 0; $y++; if ($y>$height) break; } $i_pos = $i*2; $r = hexdec($body[$i_pos+4].$body[$i_pos+5]); $g = hexdec($body[$i_pos+2].$body[$i_pos+3]); $b = hexdec($body[$i_pos].$body[$i_pos+1]); $color = imagecolorallocate($image,$r,$g,$b); imagesetpixel($image,$x,$height-$y,$color); $x++; } unset($body); return $image; } 
+11
source share
+2
source share

There is an open source project, PHP Image Magician, which allows you to read and write BMP files. See here: fooobar.com/questions/875537 / ...

+1
source share

All Articles