繁体   English   中英

如何使用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 ,只有这样我才能看到图像的“半转换”。 使用file_put_contents()它仍然无法读取。 所以我的实际代码是这样的:

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

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

编辑:

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

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

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

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

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

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

您也不需要来自 github 的库,如果图像已完全存储,您可以像使用 png 或 jpeg 一样使用file_put_contents() (这是二进制安全的,是的!)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM