如何用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字节停止。这个问题的解决方案可以在这里找到,我使用这个库是因为我想重新确定图像的尺寸,而且它已经在项目的其他地方使用了。:)