Exemplo n.º 1
0
 /**
  * @param ImagePreview $imagePreviewData
  * @return string
  */
 private function resize(ImagePreview $imagePreviewData)
 {
     $filter = 'preview';
     if (!$this->cacheManager->isStored($imagePreviewData->getTargetName(), $filter)) {
         $binary = $this->dataManager->find($filter, $imagePreviewData->getSourceUri());
         $filteredBinary = $this->filterManager->applyFilter($binary, $filter, ['filters' => ['thumbnail' => ['size' => [$imagePreviewData->getWidth(), $imagePreviewData->getHeight()]]]]);
         $this->cacheManager->store($filteredBinary, $imagePreviewData->getTargetName(), $filter);
     }
     return $this->assetsResolver->uriToPath($this->targetBasePath . $imagePreviewData->getTargetName());
 }
Exemplo n.º 2
0
 /**
  * @param string $path
  * @param string $filter
  * @param Image  $image
  *
  * @return string
  */
 public function getFormattedImage($path, $filter, Image $image = null)
 {
     if (!$this->cacheManager->isStored($path, $filter)) {
         $config = $this->filterManager->getFilterConfiguration()->get($filter);
         if (isset($config['filters']['focused_crop'])) {
             $config['filters']['focused_crop']['object'] = $image;
         }
         $binary = $this->dataManager->find($filter, $path);
         $binary = $this->filterManager->applyFilter($binary, $filter, $config);
         $this->cacheManager->store($binary, $path, $filter);
     }
     return $this->cacheManager->resolve($path, $filter);
 }
 /**
  * This action applies a given filter to a given image, optionally saves the image and outputs it to the browser at the same time.
  *
  * @param Request $request
  * @param string $path
  * @param string $filter
  *
  * @return Response
  */
 public function filterAction(Request $request, $path, $filter)
 {
     $targetPath = $this->cacheManager->resolve($request, $path, $filter);
     if ($targetPath instanceof Response) {
         return $targetPath;
     }
     $image = $this->dataManager->find($filter, $path);
     $response = $this->filterManager->get($request, $filter, $image, $path);
     if ($targetPath) {
         $response = $this->cacheManager->store($response, $targetPath, $filter);
     }
     return $response;
 }
 /**
  * This action applies a given filter to a given image, optionally saves the image and outputs it to the browser at the same time.
  *
  * @param Request $request
  * @param string  $hash
  * @param string  $path
  * @param string  $filter
  *
  * @throws \RuntimeException
  * @throws BadRequestHttpException
  *
  * @return RedirectResponse
  */
 public function filterRuntimeAction(Request $request, $hash, $path, $filter)
 {
     try {
         $filters = $request->query->get('filters', array());
         if (!is_array($filters)) {
             throw new NotFoundHttpException(sprintf('Filters must be an array. Value was "%s"', $filters));
         }
         if (true !== $this->signer->check($hash, $path, $filters)) {
             throw new BadRequestHttpException(sprintf('Signed url does not pass the sign check for path "%s" and filter "%s" and runtime config %s', $path, $filter, json_encode($filters)));
         }
         try {
             $binary = $this->dataManager->find($filter, $path);
         } catch (NotLoadableException $e) {
             if ($defaultImageUrl = $this->dataManager->getDefaultImageUrl($filter)) {
                 return new RedirectResponse($defaultImageUrl);
             }
             throw new NotFoundHttpException(sprintf('Source image could not be found for path "%s" and filter "%s"', $path, $filter), $e);
         }
         $rcPath = $this->cacheManager->getRuntimePath($path, $filters);
         $this->cacheManager->store($this->filterManager->applyFilter($binary, $filter, array('filters' => $filters)), $rcPath, $filter);
         return new RedirectResponse($this->cacheManager->resolve($rcPath, $filter), 301);
     } catch (NonExistingFilterException $e) {
         $message = sprintf('Could not locate filter "%s" for path "%s". Message was "%s"', $filter, $hash . '/' . $path, $e->getMessage());
         if (null !== $this->logger) {
             $this->logger->debug($message);
         }
         throw new NotFoundHttpException($message, $e);
     } catch (RuntimeException $e) {
         throw new \RuntimeException(sprintf('Unable to create image for path "%s" and filter "%s". Message was "%s"', $hash . '/' . $path, $filter, $e->getMessage()), 0, $e);
     }
 }
 public function testFindWithoutLoader()
 {
     $config = $this->getMockFilterConfiguration();
     $config->expects($this->once())->method('get')->with('thumbnail')->will($this->returnValue(array('size' => array(180, 180), 'mode' => 'outbound', 'data_loader' => null)));
     $dataManager = new DataManager($config);
     $this->setExpectedException('InvalidArgumentException', 'Could not find data loader for "thumbnail" filter type');
     $dataManager->find('thumbnail', 'cats.jpeg');
 }
 /**
  * Generate media thumbnails cache used by the PDF document
  *
  * @param ProductInterface     $product
  * @param AttributeInterface[] $imageAttributes
  * @param string               $locale
  * @param string               $scope
  */
 protected function generateThumbnailsCache(ProductInterface $product, array $imageAttributes, $locale, $scope)
 {
     foreach ($imageAttributes as $attribute) {
         $media = $product->getValue($attribute->getCode(), $locale, $scope)->getMedia();
         if (null !== $media && null !== $media->getKey()) {
             $path = $media->getKey();
             $filter = 'thumbnail';
             if (!$this->cacheManager->isStored($path, $filter)) {
                 $binary = $this->dataManager->find($filter, $path);
                 $this->cacheManager->store($this->filterManager->applyFilter($binary, $filter), $path, $filter);
             }
         }
     }
 }
 /**
  * This action applies a given filter to a given image, optionally saves the image and outputs it to the browser at the same time.
  *
  * @param Request $request
  * @param string  $hash
  * @param string  $path
  * @param string  $filter
  *
  * @throws \RuntimeException
  * @throws BadRequestHttpException
  *
  * @return RedirectResponse
  */
 public function filterRuntimeAction(Request $request, $hash, $path, $filter)
 {
     try {
         $filters = $request->query->get('filters', array());
         if (true !== $this->signer->check($hash, $path, $filters)) {
             throw new BadRequestHttpException(sprintf('Signed url does not pass the sign check for path "%s" and filter "%s" and runtime config %s', $path, $filter, json_encode($filters)));
         }
         try {
             $binary = $this->dataManager->find($filter, $path);
         } catch (NotLoadableException $e) {
             throw new NotFoundHttpException(sprintf('Source image could not be found for path "%s" and filter "%s"', $path, $filter), $e);
         }
         $cachePrefix = 'rc/' . $hash;
         $this->cacheManager->store($this->filterManager->applyFilter($binary, $filter, array('filters' => $filters)), $cachePrefix . '/' . $path, $filter);
         return new RedirectResponse($this->cacheManager->resolve($cachePrefix . '/' . $path, $filter), 301);
     } catch (RuntimeException $e) {
         throw new \RuntimeException(sprintf('Unable to create image for path "%s" and filter "%s". Message was "%s"', $hash . '/' . $path, $filter, $e->getMessage()), 0, $e);
     }
 }
 /**
  * Transform the file
  *
  * @param array $data
  *
  * @return \Liip\ImagineBundle\Binary\BinaryInterface
  */
 public function transformFile(array $data)
 {
     return $this->filterManager->apply($this->dataManager->find('original', $data['filename']), array('filters' => array('crop' => array('start' => array($data['x'], $data['y']), 'size' => array($data['width'], $data['height'])))));
 }
Exemplo n.º 9
0
    public function testShouldReturnBinaryWithLoaderContentAndGuessedFormatOnFind()
    {
        $content = 'theImageBinaryContent';
        $mimeType = 'image/png';
        $expectedFormat = 'png';

        $loader = $this->getMockLoader();
        $loader
            ->expects($this->once())
            ->method('find')
            ->will($this->returnValue($content))
        ;

        $mimeTypeGuesser = $this->getMockMimeTypeGuesser();
        $mimeTypeGuesser
            ->expects($this->once())
            ->method('guess')
            ->with($content)
            ->will($this->returnValue($mimeType))
        ;

        $extensionGuesser = $this->getMockExtensionGuesser();
        $extensionGuesser
            ->expects($this->once())
            ->method('guess')
            ->with($mimeType)
            ->will($this->returnValue($expectedFormat))
        ;

        $config = $this->createFilterConfigurationMock();
        $config
            ->expects($this->once())
            ->method('get')
            ->with('thumbnail')
            ->will($this->returnValue(array(
                'size' => array(180, 180),
                'mode' => 'outbound',
                'data_loader' => null,
            )))
        ;

        $dataManager = new DataManager($mimeTypeGuesser, $extensionGuesser, $config, 'default');
        $dataManager->addLoader('default', $loader);

        $binary = $dataManager->find('thumbnail', 'cats.jpeg');

        $this->assertInstanceOf('Liip\ImagineBundle\Model\Binary', $binary);
        $this->assertEquals($expectedFormat, $binary->getFormat());
    }
Exemplo n.º 10
0
 /**
  * Applies the given filter to the given picture
  * @param Picture $picture
  * @param $filter
  */
 public function filter(Picture $picture, $filter)
 {
     $binary = $this->dataManager->find($filter, $picture->getId());
     $thumb = $this->filterManager->applyFilter($binary, $filter);
     $this->cacheManager->store($thumb, $picture->getId(), $filter);
 }