mirror of
https://github.com/Intervention/image.git
synced 2025-08-20 04:31:24 +02:00
Implement HeicEncoder
This commit is contained in:
25
src/Drivers/Imagick/Encoders/HeicEncoder.php
Normal file
25
src/Drivers/Imagick/Encoders/HeicEncoder.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?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;
|
||||
|
||||
class HeicEncoder extends DriverSpecializedEncoder
|
||||
{
|
||||
public function encode(ImageInterface $image): EncodedImageInterface
|
||||
{
|
||||
$format = 'HEIC';
|
||||
|
||||
$imagick = $image->core()->native();
|
||||
|
||||
$imagick->setFormat($format);
|
||||
$imagick->setImageFormat($format);
|
||||
$imagick->setCompressionQuality($this->quality);
|
||||
$imagick->setImageCompressionQuality($this->quality);
|
||||
|
||||
return new EncodedImage($imagick->getImagesBlob(), 'image/heic');
|
||||
}
|
||||
}
|
@@ -56,6 +56,7 @@ class FileExtensionEncoder extends AutoEncoder
|
||||
'png' => new PngEncoder(),
|
||||
'tiff', 'tif' => new TiffEncoder($this->quality),
|
||||
'jp2', 'j2k', 'jpf', 'jpm', 'jpg2', 'j2c', 'jpc', 'jpx' => new Jpeg2000Encoder($this->quality),
|
||||
'heic', 'heif' => new HeicEncoder($this->quality),
|
||||
default => throw new EncoderException('No encoder found for file extension (' . $extension . ').'),
|
||||
};
|
||||
}
|
||||
|
10
src/Encoders/HeicEncoder.php
Normal file
10
src/Encoders/HeicEncoder.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Intervention\Image\Encoders;
|
||||
|
||||
class HeicEncoder extends AbstractEncoder
|
||||
{
|
||||
public function __construct(public int $quality = 75)
|
||||
{
|
||||
}
|
||||
}
|
@@ -52,6 +52,7 @@ class MediaTypeEncoder implements EncoderInterface
|
||||
'image/png' => new PngEncoder(),
|
||||
'image/tiff' => new TiffEncoder($this->quality),
|
||||
'image/jp2', 'image/jpx', 'image/jpm' => new Jpeg2000Encoder($this->quality),
|
||||
'image/heic', 'image/heif', => new HeicEncoder($this->quality),
|
||||
default => throw new EncoderException('No encoder found for media type (' . $type . ').'),
|
||||
};
|
||||
}
|
||||
|
@@ -16,6 +16,7 @@ use Intervention\Image\Encoders\BmpEncoder;
|
||||
use Intervention\Image\Encoders\FileExtensionEncoder;
|
||||
use Intervention\Image\Encoders\FilePathEncoder;
|
||||
use Intervention\Image\Encoders\GifEncoder;
|
||||
use Intervention\Image\Encoders\HeicEncoder;
|
||||
use Intervention\Image\Encoders\Jpeg2000Encoder;
|
||||
use Intervention\Image\Encoders\JpegEncoder;
|
||||
use Intervention\Image\Encoders\MediaTypeEncoder;
|
||||
@@ -927,6 +928,16 @@ final class Image implements ImageInterface
|
||||
return $this->toTiff($quality);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see ImageInterface::toHeic()
|
||||
*/
|
||||
public function toHeic(int $quality = 75): EncodedImageInterface
|
||||
{
|
||||
return $this->encode(new HeicEncoder($quality));
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone image
|
||||
*
|
||||
|
@@ -655,4 +655,12 @@ interface ImageInterface extends IteratorAggregate, Countable
|
||||
* @return EncodedImageInterface
|
||||
*/
|
||||
public function toTiff(int $quality = 75): EncodedImageInterface;
|
||||
|
||||
/**
|
||||
* Encode image to HEIC format
|
||||
*
|
||||
* @param int $quality
|
||||
* @return EncodedImageInterface
|
||||
*/
|
||||
public function toHeic(int $quality = 75): EncodedImageInterface;
|
||||
}
|
||||
|
Reference in New Issue
Block a user