Пример #1
0
 /**
  * Render image directly
  *
  * @param string $request_path The `Request::path()`
  * @return string The path, relative to the storage disk, to the crop
  */
 public function render($request_path)
 {
     // Get crop path relative to it's dir
     $crop_path = $this->url->relativePath($request_path);
     // If the crops_dir is a remote disk and if the crop has already been
     // created.  If it has, just return that path.
     if ($this->storage->cropsAreRemote() && $this->storage->cropExists($crop_path)) {
         return $crop_path;
     }
     // Parse the path.  In the case there is an error (the pattern on the route
     // SHOULD have caught all errors with the pattern) just return
     if (!($params = $this->url->parse($request_path))) {
         return;
     }
     list($path, $width, $height, $options) = $params;
     // Check if there are too many crops already
     if ($this->storage->tooManyCrops($path)) {
         throw new Exception('Croppa: Max crops');
     }
     // Increase memory limit, cause some images require a lot to resize
     if ($this->config['memory_limit'] !== null) {
         ini_set('memory_limit', $this->config['memory_limit']);
     }
     // Build a new image using fetched image data
     $image = new Image($this->storage->readSrc($path), $this->url->phpThumbConfig($options));
     // Process the image and write its data to disk
     $this->storage->writeCrop($crop_path, $image->process($width, $height, $options)->get());
     // Return the paht to the crop, relative to the storage disk
     return $crop_path;
 }
Пример #2
0
 /**
  * Handles a Croppa style route
  *
  * @param string $request The `Request::path()`
  * @throws Exception
  * @return Symfony\Component\HttpFoundation\StreamedResponse
  */
 public function handle($request)
 {
     // Validate the signing token
     if (($token = $this->url->signingToken($request)) && $token != $this->request->input('token')) {
         throw new NotFoundHttpException('Token missmatch');
     }
     // Get crop path relative to it's dir
     $crop_path = $this->url->relativePath($request);
     // If the crops_dir is a remote disk, check if the path exists on it and redirect
     if (($remote_crops = $this->storage->cropsAreRemote()) && $this->storage->cropExists($crop_path)) {
         return new RedirectResponse($this->url->pathToUrl($crop_path), 301);
     }
     // Parse the path.  In the case there is an error (the pattern on the route
     // SHOULD have caught all errors with the pattern) just return
     if (!($params = $this->url->parse($request))) {
         return;
     }
     list($path, $width, $height, $options) = $params;
     // Check if there are too many crops already
     if ($this->storage->tooManyCrops($path)) {
         throw new Exception('Croppa: Max crops');
     }
     // Increase memory limit, cause some images require a lot to resize
     if ($this->config['memory_limit'] !== null) {
         ini_set('memory_limit', $this->config['memory_limit']);
     }
     // Build a new image using fetched image data
     $image = new Image($this->storage->readSrc($path), $this->url->phpThumbConfig($options));
     // Process the image and write its data to disk
     $this->storage->writeCrop($crop_path, $image->process($width, $height, $options)->get());
     // Redirect to remote crops ...
     if ($remote_crops) {
         return new RedirectResponse($this->url->pathToUrl($crop_path), 301);
         // ... or echo the image data to the browser
     } else {
         $absolute_path = $this->storage->getLocalCropsDirPath() . '/' . $crop_path;
         return new BinaryFileResponse($absolute_path, 200, ['Content-Type' => $this->getContentType($path)]);
     }
 }
Пример #3
0
 /**
  * Delete just the crops, leave the source image
  *
  * @param string $url URL of src image
  * @return void
  * @see Bkwld\Croppa\Storage::deleteCrops()
  */
 public function reset($url)
 {
     $path = $this->url->relativePath($url);
     $this->storage->deleteCrops($path);
 }