当前位置: 首页 > 面试题库 >

如何使用PHP从二进制Blob数据中获取BMP图像

郜杰
2023-03-14
问题内容

我正在尝试2天,以找到一种从html" target="_blank">数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某个地方读过该术语,但坦率地说从未听说过)。

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

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

$img = $row['image'];
file_put_contents("file.jpeg", $img); //Doesn't matter what format i put there.

.jpeg和中都能正常工作.png,但是.bmp在尝试显示时格式不可读。

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

  • http://www.webhostingtalk.com/showthread.php?t=718919

  • http://www.programmierer-forum.de/function-imagecreatefrombmp-laeuft-mit-allen-bitraten-t143137.htm

原因: 两者都尝试转换图像,但是缺少某些部分,变成了黑色。

顺便说一句,我不确定这是否会影响问题,但是在我的项目中,我正在使用该库https://github.com/Intervention/image,只有这样,我才能看到图像的“半转换”。与file_put_contents()它仍然不可读。所以我的实际代码是这样的:

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

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

编辑:

我在下面的此解决方案之前使用过,以检查我的图像是否为.bmp

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

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


问题答案:

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

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

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

您也不需要来自github的库,如果图像已完全存储,则可以使用file_put_contents()与png或jpeg相同的方式(是安全的二进制文件)。



 类似资料:
  • 问题内容: 我正在尝试创建一个用于在PHP上执行oracle sql语句的类。 这是我的index.php,我正在尝试调用我的函数 和我的dbcontrol.php用于我的功能 我不确定似乎有什么问题。但是每次我运行这个。页面上未显示任何内容。没有结果,没有数据。但是我确信数据库中有数据。 问题答案: 您总是得到空白页的原因是: oci_num_rows()函数不会返回您可能认为的所选行数。它返回

  • 问题内容: 我似乎无法找出一种将SQL Server中的二进制数据读取到PHP中的方法。我正在一个项目中,我需要能够将图像直接存储在SQL表中,而不是文件系统中。 目前,我一直在使用这样的查询: 插入到myTable(Document)中SELECT * FROM OPENROWSET(BULK N’C:\ image.jpg’,SINGLE_BLOB)as BLAH 实际将图像插入表中的效果很好

  • 我需要拍摄一个div的屏幕截图,并需要将其发送到服务器(Java)进行存储。我公司项目中的现有代码使用Html2Canvas。js获取元素的位置(div,body…)返回base64数据URI,它工作正常,但在Chrome中冻结了应用程序。因此,我正在寻找其他解决方案,并从堆栈溢出中找到以下代码。 在这里,我得到的网址是Blob-Url(blob:https://fiddle.jshell.net

  • 问题内容: 我在SWIG的Python中使用C 函数,现在遇到了一个问题。当我将char *从C 传递给Python时,char *被Python截断。 例如: example.h: 现在在Python中,我们称为example.fun(),它仅打印“ abc”而不是“ abc \ 0de”,Python删除“ \ 0”后面的数据。 我想从C ++中的fun()获取所有字符(它是一个可以包含’\

  • 问题内容: 我正在尝试从Firefox扩展程序中下载一些二进制数据。当我尝试将创建的XMLHttpRequest设置为arraybuffer模式时: 错误 被抛出。 还有另一种在Firefox扩展中下载二进制数据的方法吗? 问题答案: 您必须先调用该方法。

  • 我有一个包含玩家数据的数组。这个数组根据玩家的数量而变化。数组看起来像这样: 我只想从每个玩家的数组中获取玩家名。我该怎么做?输出应该是如下所示的字符串:我在Internet或YouTube上没有找到任何内容。答案当然简单明了,但我还没有找到。 Im使用PHP 8.0.13。