1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-22 21:42:53 +02:00

Add TIFF encoder for Imagick driver

This commit is contained in:
Oliver Vogel
2023-12-16 19:10:42 +01:00
parent 9ba9a05f35
commit 5b7ee1eb8e
5 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
<?php
namespace Intervention\Image\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\DriverSpecializedEncoder;
use Intervention\Image\EncodedImage;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\EncodedImageInterface;
/**
* @property int $quality
*/
class TiffEncoder extends DriverSpecializedEncoder
{
public function encode(ImageInterface $image): EncodedImageInterface
{
$format = 'TIFF';
$imagick = $image->core()->native();
$imagick->setFormat($format);
$imagick->setImageFormat($format);
$imagick->setCompression($imagick->getImageCompression());
$imagick->setImageCompression($imagick->getImageCompression());
$imagick->setCompressionQuality($this->quality);
$imagick->setImageCompressionQuality($this->quality);
return new EncodedImage($imagick->getImagesBlob(), 'image/tiff');
}
}

View File

@@ -20,6 +20,7 @@ class AutoEncoder implements EncoderInterface
'image/bmp' => new BmpEncoder(), 'image/bmp' => new BmpEncoder(),
'image/gif' => new GifEncoder(), 'image/gif' => new GifEncoder(),
'image/png' => new PngEncoder(), 'image/png' => new PngEncoder(),
'image/tiff' => new TiffEncoder(),
default => throw new EncoderException('No encoder found for media type (' . $type . ').'), default => throw new EncoderException('No encoder found for media type (' . $type . ').'),
} }
); );

View File

@@ -0,0 +1,10 @@
<?php
namespace Intervention\Image\Encoders;
class TiffEncoder extends AbstractEncoder
{
public function __construct(public int $quality = 75)
{
}
}

View File

@@ -17,6 +17,7 @@ use Intervention\Image\Encoders\BmpEncoder;
use Intervention\Image\Encoders\GifEncoder; use Intervention\Image\Encoders\GifEncoder;
use Intervention\Image\Encoders\JpegEncoder; use Intervention\Image\Encoders\JpegEncoder;
use Intervention\Image\Encoders\PngEncoder; use Intervention\Image\Encoders\PngEncoder;
use Intervention\Image\Encoders\TiffEncoder;
use Intervention\Image\Encoders\WebpEncoder; use Intervention\Image\Encoders\WebpEncoder;
use Intervention\Image\Geometry\Factories\CircleFactory; use Intervention\Image\Geometry\Factories\CircleFactory;
use Intervention\Image\Geometry\Factories\EllipseFactory; use Intervention\Image\Geometry\Factories\EllipseFactory;
@@ -824,6 +825,27 @@ final class Image implements ImageInterface, Countable
return $this->encode(new AvifEncoder($quality)); return $this->encode(new AvifEncoder($quality));
} }
/**
* {@inheritdoc}
*
* @see ImageInterface::toTiff()
*/
public function toTiff(int $quality = 75): EncodedImageInterface
{
return $this->encode(new TiffEncoder($quality));
}
/**
* Alias of self::toTiff()
*
* @param int $quality
* @return EncodedImageInterface
*/
public function toTif(int $quality = 75): EncodedImageInterface
{
return $this->toTiff($quality);
}
/** /**
* Clone image * Clone image
* *

View File

@@ -601,4 +601,12 @@ interface ImageInterface extends IteratorAggregate, Countable
* @return EncodedImageInterface * @return EncodedImageInterface
*/ */
public function toAvif(int $quality = 75): EncodedImageInterface; public function toAvif(int $quality = 75): EncodedImageInterface;
/**
* Encode image to TIFF format
*
* @param int $quality
* @return EncodedImageInterface
*/
public function toTiff(int $quality = 75): EncodedImageInterface;
} }