我正在使用Doctrine将图像保存到数据库中,使用以下内容进行映射:
/** @Column(type="blob") **/
protected $data;
一切似乎都没问题。我可以用这种方式将图像数据保存在数据库中:
$largeImage = new ImageData();
$handle = fopen($imagePath, "r");
$bytes = fread($handle, filesize($imagePath));
$largeImage->setData(base64_encode($bytes));
fclose($handle);
$entityManager->persist($largeImage);
$entityManager->flush();
行。数据被保存,但是当我需要阅读时,我不能。
var_dump($image->getData());
// outputs resource(1) of type (stream)
所以,我试过这个:
$fp = fopen('image.jpg', 'w');
fwrite($fp, base64_decode(stream_get_contents($image->getData())));
fclose($fp);
并且文件的内容不是来自图像,因此Windows照片查看器不会呈现图像。
答案 0 :(得分:1)
我这样解决了这个问题:
$image = stream_get_contents($image->getData());
$hex = substr($image, 1);
$image = pack("H*", $hex);
echo $image;
我的$ image内容是一个以x开头的十六进制字符串,如果你的字母以0x开头,请执行:substr($ image,2);