如何使用php从二进制blob数据中获取bmp图像


How to get bmp image from from binary blob data with php

我花了两天时间试图找到一种从数据库中检索一些图像的方法。它们被保存为一个二进制字符串(我在某个地方读过这个词,但坦率地说,以前从未听说过)。

大多数图像都是.jpeg格式,很容易获取并保存到文件中。但我的问题是CCD_ 2图像。由于某种原因,我不能出席。

现在,我使用一个简单的代码来获取图像并将其保存到文件中:

$img = $row['image'];
file_put_contents("file.jpeg", $img); //Doesn't matter what format i put there.

.jpeg.png中工作良好,但当我尝试显示时,.bmp格式不可读。

我已经发现但没有解决的问题:

  • http://www.webhostingtalk.com/showthread.php?t=718919

  • http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm

原因:双方都试图转换图像,但有些部分丢失,变成黑色。

顺便说一句,我不确定这是否会影响这个问题,但在我的项目中,我使用了这个库https://github.com/Intervention/image,只有这样我才能看到图像的"半转换"。有了file_put_contents(),它仍然无法读取。所以我的实际代码是这样的:

$img = Image::make(imagecreatefrombmpstring($item['image']));
$filename = __DIR__ . '/test.jpeg';
$img->save($filename);

编辑:

我在下面的这个解决方案之前使用了它来检查我拥有的图像是否是.bmp:

PHP:二进制图像数据,检查图像类型

事实确实如此。我可以很容易地调整它并更正我的文件输出格式,但这不是我真正的问题。我的问题是,由于某种原因,.bmp文件没有显示。

问题是BLOB,它被限制为65535字节。

位图的大小大约是压缩图像的4-8倍,很可能需要更多的空间才能放入数据库。

我建议将列更改为LONGBLOB或至少为MEDIUMBLOB

你也不需要github的库,如果图像被完全存储,你可以使用file_put_contents()(它是二进制安全的,是的!),就像使用png或jpeg一样。