public function transform(ImageInterface $image, ImagineInterface $imagine) { // Imagine comes with a built-in Autorotate filter, but it seems to be simpler to reimplement it // without bothering with the color. $metadata = $image->metadata(); if (!isset($metadata['ifd0.Orientation'])) { return; } $orientation = $metadata['ifd0.Orientation']; if ($orientation == 3) { $image->rotate(180); } elseif ($orientation == 6) { $image->rotate(90); } elseif ($orientation == 8) { $image->rotate(-90); } }
/** * {@inheritdoc} */ public function apply(ImageInterface $image) { $metadata = $image->metadata(); switch (isset($metadata['ifd0.Orientation']) ? $metadata['ifd0.Orientation'] : null) { case 3: $image->rotate(180, $this->getColor($image)); break; case 6: $image->rotate(90, $this->getColor($image)); break; case 8: $image->rotate(-90, $this->getColor($image)); break; default: break; } return $image; }
/** * {@inheritdoc} */ public function apply(ImageInterface $image) { $metadata = $image->metadata(); switch (isset($metadata['ifd0.Orientation']) ? $metadata['ifd0.Orientation'] : null) { case 1: // top-left break; case 2: // top-right $image->flipHorizontally(); break; case 3: // bottom-right $image->rotate(180, $this->getColor($image)); break; case 4: // bottom-left $image->flipHorizontally(); $image->rotate(180, $this->getColor($image)); break; case 5: // left-top $image->flipHorizontally(); $image->rotate(-90, $this->getColor($image)); break; case 6: // right-top $image->rotate(90, $this->getColor($image)); break; case 7: // right-bottom $image->flipHorizontally(); $image->rotate(90, $this->getColor($image)); break; case 8: // left-bottom $image->rotate(-90, $this->getColor($image)); break; default: // Invalid orientation break; } return $image; }
/** * @param ImageInterface $oldsource * @return ImageInterface */ private function preProcessSourceImg(ImageInterface $source) { /** @var MetadataBag $metadata */ $metadata = $source->metadata(); $orientation = $metadata->offsetGet('ifd0.Orientation'); switch ($orientation) { case 3: $source->rotate(180); break; case 6: $source->rotate(90); break; case 8: $source->rotate(-90); break; default: break; } $metadata->offsetSet('ifd0.Orientation', 1); return $source; }
/** * Rotate an image by degrees. * * @param int $degrees * * @return Image */ public function rotate($degrees) { $this->_image->rotate($degrees); return $this; }
/** * Re-orient an image using its embedded Exif profile orientation: * 1. Read the embedded exif data inside the image to determine it's orientation. * 2. Rotate and flip the image accordingly to re-orient it. * 3. Strip the Exif data from the image so that there can be no attempt to 'correct' it again. * * @param string $path * @param ImageInterface $image * @return ImageInterface $image */ protected function autoOrient($path, ImageInterface $image) { $exif = exif_read_data($path); if (isset($exif['Orientation'])) { switch ($exif['Orientation']) { case 2: $image->flipHorizontally(); break; case 3: $image->rotate(180); break; case 4: $image->flipVertically(); break; case 5: $image->flipVertically()->rotate(90); break; case 6: $image->rotate(90); break; case 7: $image->flipHorizontally()->rotate(90); break; case 8: $image->rotate(-90); break; } } return $image->strip(); }
/** * {@inheritdoc} */ public function apply(ImageInterface $image) { return $image->rotate($this->angle, $this->background); }
protected function operationRotate(ImageInterface $image, int $degrees) { $image->rotate($degrees); }
/** * Apply rotate filter * * @param ImageInterface $image An image instance * @param float $degree The rotation degree * @return void */ protected function filterRotate(ImageInterface $image, $degree) { return $image->rotate($degree); }
/** * @param \imagine\image\ImageInterface $image * @param string $filePath * * @return bool */ protected function correctExifRotation($image, $filePath) { if (!function_exists('exif_read_data')) { return false; } $exif = @exif_read_data($filePath); if ($exif === false) { return false; } $orientation = (int) @$exif['Orientation']; if ($orientation < 2 || $orientation > 8) { return false; } switch ($orientation) { case 8: $image->rotate(-90); break; case 3: $image->rotate(180); break; case 6: $image->rotate(90); break; } return true; }
/** * Loads and applies a filter on the given image. * * @param ImageInterface $image * @param array $options * * @return ManipulatorInterface */ public function load(ImageInterface $image, array $options = array()) { $angle = isset($options['angle']) ? (int) $options['angle'] : 0; return 0 === $angle ? $image : $image->rotate($angle); }
/** * @param \Imagine\Image\ImageInterface $image * @param array $options * @return \Imagine\Image\ImageInterface */ protected function applyRotateFilter(ImageInterface $image, $options) { if (isset($options['angle'])) { $angle = (int) $options['angle']; $image->rotate($angle); } return $image; }
/** * Re-orient an image using its embedded Exif profile orientation: * 1. Attempt to read the embedded exif data inside the image to determine it's orientation. * if there is no exif data (i.e an exeption is thrown when trying to read it) then we'll * just return the image as is. * 2. If there is exif data, we'll rotate and flip the image accordingly to re-orient it. * 3. Finally, we'll strip the exif data from the image so that there can be no attempt to 'correct' it again. * * @param string $path * @param ImageInterface $image * * @return ImageInterface $image */ protected function autoOrient($path, ImageInterface $image) { if (function_exists('exif_read_data')) { try { $exif = exif_read_data($path); } catch (ErrorException $e) { return $image; } if (isset($exif['Orientation'])) { switch ($exif['Orientation']) { case 2: $image->flipHorizontally(); break; case 3: $image->rotate(180); break; case 4: $image->flipVertically(); break; case 5: $image->flipVertically()->rotate(90); break; case 6: $image->rotate(90); break; case 7: $image->flipHorizontally()->rotate(90); break; case 8: $image->rotate(-90); break; } } return $image->strip(); } else { return $image; } }
public function rotate(ImageInterface $image, $options = []) { $defaults = ['degrees' => 0]; $options = array_merge($defaults, $options); $image->rotate($options['degrees']); }