我花了两天时间试图找到一种从数据库中检索一些图像的方法。它们被保存为一个二进制字符串(我在某个地方读过这个词,但坦率地说,以前从未听说过)。
大多数图像都是.jpeg
格式,很容易获取并保存到文件中。但我的问题是CCD_ 2图像。由于某种原因,我不能出席。
现在,我使用一个简单的代码来获取图像并将其保存到文件中:
$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一样。