我尝试了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
:
PHP : binary image data, checking the image type
他们是。我可以轻松地调整它并更正我的文件输出格式,但这不是我真正的问题。我的问题是.bmp
文件由于某种原因没有显示。
答案 0 :(得分:1)
问题是BLOB
,限制为65535字节。
位图大约是压缩图像大小的4-8倍,很可能需要更多空间放入数据库。
我建议将列更改为LONGBLOB
或至少MEDIUMBLOB
。
你也不需要来自github的库,如果图像是完全存储的,你可以使用file_put_contents()
(二进制安全,是的!),就像使用png或jpeg一样。