我正在尝试2天,以找到一种从数据库中检索一些图像的方法。它们被保存为二进制字符串(我在某个地方读过该术语,但坦率地说从未听说过)。
大多数图像都是.jpeg格式化的,很容易获取并保存到文件中。但是我的问题是.bmp图像。由于某种原因,我当时无法显示。
.jpeg
.bmp
现在,我正在使用一个简单的代码来获取图像并将其保存到文件中:
$img = $row['image']; file_put_contents("file.jpeg", $img); //Doesn't matter what format i put there.
在.jpeg和中都能正常工作.png,但是.bmp在尝试显示时格式不可读。
.png
我已经发现但尚未解决的问题:
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()它仍然不可读。所以我的实际代码是这样的:
file_put_contents()
$img = Image::make(imagecreatefrombmpstring($item['image'])); $filename = __DIR__ . '/test.jpeg'; $img->save($filename);
编辑:
我在下面的此解决方案之前使用过,以检查我的图像是否为.bmp:
PHP:二进制图像数据,检查图像类型
他们是。我可以轻松地调整它并更正我的文件输出格式,但这不是我的真正问题。我的问题是由于.bmp某种原因文件没有显示。
问题是BLOB它限制为65535个字节。
BLOB
位图大约是压缩图像大小的4-8倍,很可能需要更多空间才能放入数据库。
我建议将列更改为LONGBLOB或至少更改为 MEDIUMBLOB。
LONGBLOB
MEDIUMBLOB
您也不需要来自github的库,如果图像已完全存储,则可以使用file_put_contents()与png或jpeg相同的方式(是安全的二进制文件)。