0

画像を保存するために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 が存在しません。

4

0 に答える 0