123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- namespace Drupal\Core\Image;
- use Drupal\Core\ImageToolkit\ImageToolkitInterface;
- /**
- * Defines an image object to represent an image file.
- *
- * @see \Drupal\Core\ImageToolkit\ImageToolkitInterface
- * @see \Drupal\image\ImageEffectInterface
- *
- * @ingroup image
- */
- class Image implements ImageInterface {
- /**
- * Path of the image file.
- *
- * @var string
- */
- protected $source = '';
- /**
- * An image toolkit object.
- *
- * @var \Drupal\Core\ImageToolkit\ImageToolkitInterface
- */
- protected $toolkit;
- /**
- * File size in bytes.
- *
- * @var int
- */
- protected $fileSize;
- /**
- * Constructs a new Image object.
- *
- * @param \Drupal\Core\ImageToolkit\ImageToolkitInterface $toolkit
- * The image toolkit.
- * @param string|null $source
- * (optional) The path to an image file, or NULL to construct the object
- * with no image source.
- */
- public function __construct(ImageToolkitInterface $toolkit, $source = NULL) {
- $this->toolkit = $toolkit;
- if ($source) {
- $this->source = $source;
- $this->getToolkit()->setSource($this->source);
- // Defer image file validity check to the toolkit.
- if ($this->getToolkit()->parseFile()) {
- $this->fileSize = filesize($this->source);
- }
- }
- }
- /**
- * {@inheritdoc}
- */
- public function isValid() {
- return $this->getToolkit()->isValid();
- }
- /**
- * {@inheritdoc}
- */
- public function getHeight() {
- return $this->getToolkit()->getHeight();
- }
- /**
- * {@inheritdoc}
- */
- public function getWidth() {
- return $this->getToolkit()->getWidth();
- }
- /**
- * {@inheritdoc}
- */
- public function getFileSize() {
- return $this->fileSize;
- }
- /**
- * {@inheritdoc}
- */
- public function getMimeType() {
- return $this->getToolkit()->getMimeType();
- }
- /**
- * {@inheritdoc}
- */
- public function getSource() {
- return $this->source;
- }
- /**
- * {@inheritdoc}
- */
- public function getToolkitId() {
- return $this->getToolkit()->getPluginId();
- }
- /**
- * {@inheritdoc}
- */
- public function getToolkit() {
- return $this->toolkit;
- }
- /**
- * {@inheritdoc}
- */
- public function save($destination = NULL) {
- // Return immediately if the image is not valid.
- if (!$this->isValid()) {
- return FALSE;
- }
- $destination = $destination ?: $this->getSource();
- if ($return = $this->getToolkit()->save($destination)) {
- // Clear the cached file size and refresh the image information.
- clearstatcache(TRUE, $destination);
- $this->fileSize = filesize($destination);
- $this->source = $destination;
- if (\Drupal::service('file_system')->chmod($destination)) {
- return $return;
- }
- }
- return FALSE;
- }
- /**
- * {@inheritdoc}
- */
- public function apply($operation, array $arguments = []) {
- return $this->getToolkit()->apply($operation, $arguments);
- }
- /**
- * {@inheritdoc}
- */
- public function createNew($width, $height, $extension = 'png', $transparent_color = '#ffffff') {
- return $this->apply('create_new', ['width' => $width, 'height' => $height, 'extension' => $extension, 'transparent_color' => $transparent_color]);
- }
- /**
- * {@inheritdoc}
- */
- public function convert($extension) {
- return $this->apply('convert', ['extension' => $extension]);
- }
- /**
- * {@inheritdoc}
- */
- public function crop($x, $y, $width, $height = NULL) {
- return $this->apply('crop', ['x' => $x, 'y' => $y, 'width' => $width, 'height' => $height]);
- }
- /**
- * {@inheritdoc}
- */
- public function desaturate() {
- return $this->apply('desaturate', []);
- }
- /**
- * {@inheritdoc}
- */
- public function resize($width, $height) {
- return $this->apply('resize', ['width' => $width, 'height' => $height]);
- }
- /**
- * {@inheritdoc}
- */
- public function rotate($degrees, $background = NULL) {
- return $this->apply('rotate', ['degrees' => $degrees, 'background' => $background]);
- }
- /**
- * {@inheritdoc}
- */
- public function scaleAndCrop($width, $height) {
- return $this->apply('scale_and_crop', ['width' => $width, 'height' => $height]);
- }
- /**
- * {@inheritdoc}
- */
- public function scale($width, $height = NULL, $upscale = FALSE) {
- return $this->apply('scale', ['width' => $width, 'height' => $height, 'upscale' => $upscale]);
- }
- /**
- * Provides a wrapper for drupal_chmod() to allow unit testing.
- *
- * @param string $uri
- * A string containing a URI file, or directory path.
- * @param int $mode
- * Integer value for the permissions. Consult PHP chmod() documentation for
- * more information.
- *
- * @return bool
- * TRUE for success, FALSE in the event of an error.
- *
- * @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
- * Use \Drupal\Core\File\FileSystem::chmod().
- *
- * @see \Drupal\Core\File\FileSystemInterface::chmod()
- * @see https://www.drupal.org/node/2418133
- */
- protected function chmod($uri, $mode = NULL) {
- @trigger_error('chmod() is deprecated in Drupal 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\File\FileSystemInterface::chmod(). See https://www.drupal.org/node/2418133.', E_USER_DEPRECATED);
- return \Drupal::service('file_system')->chmod($uri, $mode);
- }
- }
|