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

如何用php从二进制blob数据中获取bmp图像,php,sql,image,blob,bmp,Php,Sql,Image,Blob,Bmp,我花了两天的时间试图找到一种从数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某处读过这个术语,但坦率地说,以前从未听说过) 大多数图像都是.jpeg格式,很容易获取并保存到文件中。但是我的问题是.bmp图像。由于某种原因,我当时不能出席 现在,我只使用一个简单的代码来获取图像并将其保存到文件中: $img = $row['image']; file_put_contents("file.jpeg", $img); //Doesn't matter what format i put

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

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

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

$img = $row['image'];
file_put_contents("file.jpeg", $img); //Doesn't matter what format i put there.
.jpeg
.png
中工作正常,但是当我尝试显示时,
.bmp
格式无法读取

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

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

顺便说一句,我不确定这是否会影响这个问题,但在我的项目中,我使用这个库,只有这样我才能看到图像的“半转换”。由于
文件\u put\u contents()
仍然无法读取。所以我的实际代码是这样的:

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

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

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


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

问题是
BLOB
,限制为65535字节

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

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


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

如果二进制日期为BMP格式,您可以将文件内容直接放入磁盘,然后直接查看该文件--它已损坏--然后唯一的答案是原始二进制数据不是BMP格式。在保存到磁盘上的据称BMP上运行
文件
,看看上面写的是什么。你不能只混合图像类型。您需要将二进制数据的格式存储在数据库中,并相应地使用该格式。@我确定它们是bmp图像,我在前面提到的链接中找到的两个代码在开始转换之前会进行检查。@DanFromGermany,很抱歉,存储图像的原始代码不是我的,我没有访问权限,也不是php。如果我只有一个安全的方法来读取这个二进制数据(包括bmp文件),那就太棒了。我确信已经有人遇到了这个问题,并且知道如何解决它。是否有可能数据库中的列是有限的,而您没有保存完整的bmp?比如,4MB的Jpeg可以是30MB的bmp格式。标准blob只能容纳65535个字节。您需要一个
MEDIUMBLOB
LONGBLOB
。再次感谢!使用strlen()计算字节数,我发现所有字符串都以64512字节停止。这个问题的解决方案可以在这里找到,我使用这个库是因为我想重新确定图像的尺寸,而且它已经在项目的其他地方使用了。:)