如何使用 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。
我尝试了 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。