小编典典

如何使用PHP从二进制Blob数据中获取BMP图像

sql

我正在尝试2天,以找到一种从数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某个地方读过该术语,但坦率地说从未听说过)。

大多数图像都是.jpeg格式化的,很容易获取并保存到文件中。但是我的问题是.bmp图像。由于某种原因,我当时无法显示。

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

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

.jpeg和中都能正常工作.png,但是.bmp在尝试显示时格式不可读。

我已经发现但尚未解决的问题:

原因: 两者都尝试转换图像,但是缺少某些部分,变成了黑色。

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

$img = Image::make(imagecreatefrombmpstring($item['image']));

$filename = __DIR__ . '/test.jpeg';
$img->save($filename);

编辑:

我在下面的此解决方案之前使用过,以检查我的图像是否为.bmp

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

他们是。我可以轻松地调整它并更正我的文件输出格式,但这不是我的真正问题。我的问题是由于.bmp某种原因文件没有显示。


阅读 155

收藏
2021-04-28

共1个答案

小编典典

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

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

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

您也不需要来自github的库,如果图像已完全存储,则可以使用file_put_contents()与png或jpeg相同的方式(是安全的二进制文件)。

2021-04-28