1
0
mirror of https://github.com/Intervention/image.git synced 2025-09-08 21:20:46 +02:00

Implement Jpeg2000 encoding with Imagick driver

This commit is contained in:
Oliver Vogel
2023-12-21 21:25:17 +01:00
parent 097bfed504
commit e9ecab2a54
4 changed files with 73 additions and 0 deletions

View File

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

View File

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

View File

@@ -17,6 +17,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\Jpeg2000Encoder;
use Intervention\Image\Encoders\JpegEncoder;
use Intervention\Image\Encoders\MediaTypeEncoder;
use Intervention\Image\Encoders\PngEncoder;
@@ -812,6 +813,27 @@ final class Image implements ImageInterface, Countable
return $this->toJpeg($quality);
}
/**
* {@inheritdoc}
*
* @see ImageInterface::toJpeg()
*/
public function toJpeg2000(int $quality = 75): EncodedImageInterface
{
return $this->encode(new Jpeg2000Encoder($quality));
}
/**
* ALias of self::toJpeg2000()
*
* @param int $quality
* @return EncodedImageInterface
*/
public function toJp2(int $quality = 75): EncodedImageInterface
{
return $this->toJpeg2000($quality);
}
/**
* {@inheritdoc}
*

View File

@@ -603,6 +603,14 @@ interface ImageInterface extends IteratorAggregate, Countable
*/
public function toJpeg(int $quality = 75): EncodedImageInterface;
/**
* Encode image to Jpeg2000 format
*
* @param int $quality
* @return EncodedImageInterface
*/
public function toJpeg2000(int $quality = 75): EncodedImageInterface;
/**
* Encode image to Webp format
*