画像を保存するためにAmazon s3を使用しています。今のところ、私は 3 つの異なるフォルダーを持っています - 受け入れられない写真用の一時的なフォルダー、受け入れられた写真用のフォルダー、透かし入りの写真用のフォルダーです。
写真が承認されると、承認済みの透かし入りのフォルダーにコピーされ、一時フォルダーから削除されます。
透かしを追加する必要があるため、問題は透かしフォルダーにあります。進行中の作業中に、次のように透かしを追加するメソッドをモックしました。
protected function addWatermark($product)
{
$filterName = 'watermark';
$this->imagineFilterManager->getFilter($filterName)
->apply($this->imagine->open($product->getFilePath()))
->save($path, array('format' => "png"));
}
そしてそれはかなり良かった。しかし問題は、アップロードされたファイルでモックが機能していて、FilePath がイメージへの一時ファイル パスであったことです。
次に、Amazon s3 から画像を取得し、それを ImagineFilterManager に渡し、Amazon s3 の場所に保存する必要があります。問題は写真の取得にあります。
私はこのように試しました: 読み取り方法:
public function read($path)
{
return $this->fileSystem->read($path);
}
protected function addWatermark($product)
{
var_dump('addWatermark');
$filterName = 'watermark';
$path = $this->getShopPicturePath($product);
$file = $this->staticContentAdapter->read($path);
$file = imagecreatefromstring($file);
$this->imagineFilterManager->getFilter($filterName)
->apply($this->imagine->open($file))
->save($path, array('format' => "png"));
var_dump('filtered');exit;
}
しかし、この後 $this-imagine-open() は戻ります
ファイル リソース ID #141 は存在しません
私からの奇妙なことは、パスのみを使用してs3に画像ファイルを保存することが可能だったことです:
->save($path, array('format' => "png"));
ただし、パスのみを使用してファイルを開くことはできません:
->apply($this->imagine->open($file->getFilePath()))
例外をスローします
ファイル watermarked/asd_asd.png が存在しません。