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

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

我尝试了 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,只有这样我才能看到图像的 "semi conversion"。使用 file_put_contents() 它仍然不可读。所以我的实际代码是这样的:

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

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

编辑:

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

PHP : binary image data, checking the image type

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

问题是 BLOB 限制为 65535 字节。

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

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

您也不需要 github 中的库,如果图像已完全存储,您可以使用 file_put_contents()(这是二进制安全的,是的!),方法与 png 相同或 jpeg。