1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-28 16:19:50 +02:00

Merge branch 'feature/jpeg2000'

This commit is contained in:
Oliver Vogel
2023-12-23 10:13:49 +01:00
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
*