1

我正在使用 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 照片查看器呈现的。

4

1 回答 1

1

我通过这样做解决了它:

$image = stream_get_contents($image->getData());
$hex = substr($image, 1);
$image =  pack("H*", $hex);

echo $image;

我的 $image 内容是以 x 开头的十六进制字符串,如果您的内容以 0x 开头,请执行以下操作: substr($image, 2);

于 2013-01-22T16:12:49.620 回答