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 で始まる 16 進文字列です。あなたのコンテンツが 0x で始まる場合は、次のようにします: substr($image, 2);

于 2013-01-22T16:12:49.620 に答える