1
0
mirror of https://github.com/Intervention/image.git synced 2025-08-24 06:22:57 +02:00

feature/strip encoder parameter (#1421)

Add config option and encoder parameter to strip meta data in the encoding process.

---------

Co-authored-by: Thomas <thomas@sctr.net>
This commit is contained in:
Oliver Vogel
2025-01-18 16:42:14 +01:00
committed by GitHub
parent 49c7cd0890
commit 6b9ce4fc44
25 changed files with 186 additions and 11 deletions

View File

@@ -14,13 +14,16 @@ class Config
* @param bool $autoOrientation * @param bool $autoOrientation
* @param bool $decodeAnimation * @param bool $decodeAnimation
* @param mixed $blendingColor * @param mixed $blendingColor
* @param bool $strip
* @return void * @return void
*/ */
public function __construct( public function __construct(
public bool $autoOrientation = true, public bool $autoOrientation = true,
public bool $decodeAnimation = true, public bool $decodeAnimation = true,
public mixed $blendingColor = 'ffffff', public mixed $blendingColor = 'ffffff',
public bool $strip = false,
) { ) {
//
} }
/** /**

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Encoders; namespace Intervention\Image\Drivers\Imagick\Encoders;
use Imagick; use Imagick;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\AvifEncoder as GenericAvifEncoder; use Intervention\Image\Encoders\AvifEncoder as GenericAvifEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface; use Intervention\Image\Interfaces\EncodedImageInterface;
@@ -18,6 +19,11 @@ class AvifEncoder extends GenericAvifEncoder implements SpecializedInterface
$format = 'AVIF'; $format = 'AVIF';
$compression = Imagick::COMPRESSION_ZIP; $compression = Imagick::COMPRESSION_ZIP;
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setFormat($format); $imagick->setFormat($format);
$imagick->setImageFormat($format); $imagick->setImageFormat($format);

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Encoders; namespace Intervention\Image\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\HeicEncoder as GenericHeicEncoder; use Intervention\Image\Encoders\HeicEncoder as GenericHeicEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface; use Intervention\Image\Interfaces\EncodedImageInterface;
@@ -16,6 +17,11 @@ class HeicEncoder extends GenericHeicEncoder implements SpecializedInterface
{ {
$format = 'HEIC'; $format = 'HEIC';
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setFormat($format); $imagick->setFormat($format);
$imagick->setImageFormat($format); $imagick->setImageFormat($format);

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Encoders; namespace Intervention\Image\Drivers\Imagick\Encoders;
use Imagick; use Imagick;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\Jpeg2000Encoder as GenericJpeg2000Encoder; use Intervention\Image\Encoders\Jpeg2000Encoder as GenericJpeg2000Encoder;
use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ImageInterface;
@@ -18,6 +19,11 @@ class Jpeg2000Encoder extends GenericJpeg2000Encoder implements SpecializedInter
$format = 'JP2'; $format = 'JP2';
$compression = Imagick::COMPRESSION_JPEG; $compression = Imagick::COMPRESSION_JPEG;
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setImageBackgroundColor('white'); $imagick->setImageBackgroundColor('white');
$imagick->setBackgroundColor('white'); $imagick->setBackgroundColor('white');

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Encoders; namespace Intervention\Image\Drivers\Imagick\Encoders;
use Imagick; use Imagick;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\JpegEncoder as GenericJpegEncoder; use Intervention\Image\Encoders\JpegEncoder as GenericJpegEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface; use Intervention\Image\Interfaces\EncodedImageInterface;
@@ -30,6 +31,12 @@ class JpegEncoder extends GenericJpegEncoder implements SpecializedInterface
// possible full transparent colors as black // possible full transparent colors as black
$background->setColorValue(Imagick::COLOR_ALPHA, 1); $background->setColorValue(Imagick::COLOR_ALPHA, 1);
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
/** @var Imagick $imagick */
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setImageBackgroundColor($background); $imagick->setImageBackgroundColor($background);
$imagick->setBackgroundColor($background); $imagick->setBackgroundColor($background);

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Encoders; namespace Intervention\Image\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\TiffEncoder as GenericTiffEncoder; use Intervention\Image\Encoders\TiffEncoder as GenericTiffEncoder;
use Intervention\Image\Interfaces\ImageInterface; use Intervention\Image\Interfaces\ImageInterface;
@@ -16,6 +17,11 @@ class TiffEncoder extends GenericTiffEncoder implements SpecializedInterface
{ {
$format = 'TIFF'; $format = 'TIFF';
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setFormat($format); $imagick->setFormat($format);
$imagick->setImageFormat($format); $imagick->setImageFormat($format);

View File

@@ -6,6 +6,7 @@ namespace Intervention\Image\Drivers\Imagick\Encoders;
use Imagick; use Imagick;
use ImagickPixel; use ImagickPixel;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use Intervention\Image\EncodedImage; use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\WebpEncoder as GenericWebpEncoder; use Intervention\Image\Encoders\WebpEncoder as GenericWebpEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface; use Intervention\Image\Interfaces\EncodedImageInterface;
@@ -19,6 +20,11 @@ class WebpEncoder extends GenericWebpEncoder implements SpecializedInterface
$format = 'WEBP'; $format = 'WEBP';
$compression = Imagick::COMPRESSION_ZIP; $compression = Imagick::COMPRESSION_ZIP;
// strip meta data
if ($this->strip || (is_null($this->strip) && $this->driver()->config()->strip)) {
$image->modify(new StripMetaModifier());
}
$imagick = $image->core()->native(); $imagick = $image->core()->native();
$imagick->setImageBackgroundColor(new ImagickPixel('transparent')); $imagick->setImageBackgroundColor(new ImagickPixel('transparent'));

View File

@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Drivers\Imagick\Modifiers;
use Intervention\Image\Collection;
use Intervention\Image\Interfaces\ImageInterface;
use Intervention\Image\Interfaces\ModifierInterface;
use Intervention\Image\Interfaces\SpecializedInterface;
class StripMetaModifier implements ModifierInterface, SpecializedInterface
{
/**
* {@inheritdoc}
*
* @see Intervention\Image\Interfaces\ModifierInterface::apply()
*/
public function apply(ImageInterface $image): ImageInterface
{
// preserve icc profiles
$profiles = $image->core()->native()->getImageProfiles('icc');
// remove meta data
$image->core()->native()->stripImage();
$image->setExif(new Collection());
if ($profiles !== []) {
// re-apply icc profiles
$image->core()->native()->profileImage("icc", $profiles['icc']);
}
return $image;
}
}

View File

@@ -12,9 +12,13 @@ class AvifEncoder extends SpecializableEncoder
* Create new encoder object * Create new encoder object
* *
* @param int $quality * @param int $quality
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct(public int $quality = self::DEFAULT_QUALITY) public function __construct(
{ public int $quality = self::DEFAULT_QUALITY,
public ?bool $strip = null
) {
//
} }
} }

View File

@@ -10,5 +10,6 @@ class BmpEncoder extends SpecializableEncoder
{ {
public function __construct() public function __construct()
{ {
//
} }
} }

View File

@@ -16,5 +16,6 @@ class GifEncoder extends SpecializableEncoder
*/ */
public function __construct(public bool $interlaced = false) public function __construct(public bool $interlaced = false)
{ {
//
} }
} }

View File

@@ -12,9 +12,13 @@ class HeicEncoder extends SpecializableEncoder
* Create new encoder object * Create new encoder object
* *
* @param int $quality * @param int $quality
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct(public int $quality = self::DEFAULT_QUALITY) public function __construct(
{ public int $quality = self::DEFAULT_QUALITY,
public ?bool $strip = null
) {
//
} }
} }

View File

@@ -12,9 +12,13 @@ class Jpeg2000Encoder extends SpecializableEncoder
* Create new encoder object * Create new encoder object
* *
* @param int $quality * @param int $quality
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct(public int $quality = self::DEFAULT_QUALITY) public function __construct(
{ public int $quality = self::DEFAULT_QUALITY,
public ?bool $strip = null
) {
//
} }
} }

View File

@@ -13,11 +13,14 @@ class JpegEncoder extends SpecializableEncoder
* *
* @param int $quality * @param int $quality
* @param bool $progressive * @param bool $progressive
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct( public function __construct(
public int $quality = self::DEFAULT_QUALITY, public int $quality = self::DEFAULT_QUALITY,
public bool $progressive = false public bool $progressive = false,
public ?bool $strip = null
) { ) {
//
} }
} }

View File

@@ -17,5 +17,6 @@ class PngEncoder extends SpecializableEncoder
*/ */
public function __construct(public bool $interlaced = false, public bool $indexed = false) public function __construct(public bool $interlaced = false, public bool $indexed = false)
{ {
//
} }
} }

View File

@@ -12,9 +12,13 @@ class TiffEncoder extends SpecializableEncoder
* Create new encoder object * Create new encoder object
* *
* @param int $quality * @param int $quality
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct(public int $quality = self::DEFAULT_QUALITY) public function __construct(
{ public int $quality = self::DEFAULT_QUALITY,
public ?bool $strip = null
) {
//
} }
} }

View File

@@ -12,9 +12,12 @@ class WebpEncoder extends SpecializableEncoder
* Create new encoder object * Create new encoder object
* *
* @param int $quality * @param int $quality
* @param null|bool $strip Strip EXIF metadata
* @return void * @return void
*/ */
public function __construct(public int $quality = self::DEFAULT_QUALITY) public function __construct(
{ public int $quality = self::DEFAULT_QUALITY,
public ?bool $strip = null
) {
} }
} }

View File

@@ -24,11 +24,13 @@ final class ConfigTest extends BaseTestCase
autoOrientation: false, autoOrientation: false,
decodeAnimation: false, decodeAnimation: false,
blendingColor: 'f00', blendingColor: 'f00',
strip: true,
); );
$this->assertInstanceOf(Config::class, $config); $this->assertInstanceOf(Config::class, $config);
$this->assertFalse($config->autoOrientation); $this->assertFalse($config->autoOrientation);
$this->assertFalse($config->decodeAnimation); $this->assertFalse($config->decodeAnimation);
$this->assertTrue($config->strip);
$this->assertEquals('f00', $config->blendingColor); $this->assertEquals('f00', $config->blendingColor);
} }
@@ -37,12 +39,14 @@ final class ConfigTest extends BaseTestCase
$config = new Config(); $config = new Config();
$this->assertTrue($config->autoOrientation); $this->assertTrue($config->autoOrientation);
$this->assertTrue($config->decodeAnimation); $this->assertTrue($config->decodeAnimation);
$this->assertFalse($config->strip);
$this->assertEquals('ffffff', $config->blendingColor); $this->assertEquals('ffffff', $config->blendingColor);
$result = $config->setOptions( $result = $config->setOptions(
autoOrientation: false, autoOrientation: false,
decodeAnimation: false, decodeAnimation: false,
blendingColor: 'f00', blendingColor: 'f00',
strip: true,
); );
$this->assertFalse($config->autoOrientation); $this->assertFalse($config->autoOrientation);
@@ -51,16 +55,19 @@ final class ConfigTest extends BaseTestCase
$this->assertFalse($result->autoOrientation); $this->assertFalse($result->autoOrientation);
$this->assertFalse($result->decodeAnimation); $this->assertFalse($result->decodeAnimation);
$this->assertTrue($result->strip);
$this->assertEquals('f00', $result->blendingColor); $this->assertEquals('f00', $result->blendingColor);
$result = $config->setOptions(blendingColor: '000'); $result = $config->setOptions(blendingColor: '000');
$this->assertFalse($config->autoOrientation); $this->assertFalse($config->autoOrientation);
$this->assertFalse($config->decodeAnimation); $this->assertFalse($config->decodeAnimation);
$this->assertTrue($config->strip);
$this->assertEquals('000', $config->blendingColor); $this->assertEquals('000', $config->blendingColor);
$this->assertFalse($result->autoOrientation); $this->assertFalse($result->autoOrientation);
$this->assertFalse($result->decodeAnimation); $this->assertFalse($result->decodeAnimation);
$this->assertTrue($result->strip);
$this->assertEquals('000', $result->blendingColor); $this->assertEquals('000', $result->blendingColor);
} }
@@ -71,13 +78,16 @@ final class ConfigTest extends BaseTestCase
'autoOrientation' => false, 'autoOrientation' => false,
'decodeAnimation' => false, 'decodeAnimation' => false,
'blendingColor' => 'f00', 'blendingColor' => 'f00',
'strip' => true,
]); ]);
$this->assertFalse($config->autoOrientation); $this->assertFalse($config->autoOrientation);
$this->assertFalse($config->decodeAnimation); $this->assertFalse($config->decodeAnimation);
$this->assertTrue($config->strip);
$this->assertEquals('f00', $config->blendingColor); $this->assertEquals('f00', $config->blendingColor);
$this->assertFalse($result->autoOrientation); $this->assertFalse($result->autoOrientation);
$this->assertFalse($result->decodeAnimation); $this->assertFalse($result->decodeAnimation);
$this->assertTrue($result->strip);
$this->assertEquals('f00', $result->blendingColor); $this->assertEquals('f00', $result->blendingColor);
} }
} }

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\AvifEncoder; use Intervention\Image\Drivers\Imagick\Encoders\AvifEncoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\RequiresPhpExtension;
@@ -17,6 +18,7 @@ final class AvifEncoderTest extends ImagickTestCase
{ {
$image = $this->createTestImage(3, 2); $image = $this->createTestImage(3, 2);
$encoder = new AvifEncoder(10); $encoder = new AvifEncoder(10);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image); $result = $encoder->encode($image);
$this->assertMediaType('image/avif', $result); $this->assertMediaType('image/avif', $result);
$this->assertEquals('image/avif', $result->mimetype()); $this->assertEquals('image/avif', $result->mimetype());

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\HeicEncoder; use Intervention\Image\Drivers\Imagick\Encoders\HeicEncoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\RequiresPhpExtension;
@@ -17,6 +18,7 @@ final class HeicEncoderTest extends ImagickTestCase
{ {
$image = $this->createTestImage(3, 2); $image = $this->createTestImage(3, 2);
$encoder = new HeicEncoder(75); $encoder = new HeicEncoder(75);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image); $result = $encoder->encode($image);
$this->assertMediaType('image/heic', $result); $this->assertMediaType('image/heic', $result);
$this->assertEquals('image/heic', $result->mimetype()); $this->assertEquals('image/heic', $result->mimetype());

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\Jpeg2000Encoder; use Intervention\Image\Drivers\Imagick\Encoders\Jpeg2000Encoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\RequiresPhpExtension;
@@ -17,6 +18,7 @@ final class Jpeg2000EncoderTest extends ImagickTestCase
{ {
$image = $this->createTestImage(3, 2); $image = $this->createTestImage(3, 2);
$encoder = new Jpeg2000Encoder(75); $encoder = new Jpeg2000Encoder(75);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image); $result = $encoder->encode($image);
$this->assertMediaType('image/jp2', $result); $this->assertMediaType('image/jp2', $result);
$this->assertEquals('image/jp2', $result->mimetype()); $this->assertEquals('image/jp2', $result->mimetype());

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Decoders\FilePointerImageDecoder;
use Intervention\Image\Drivers\Imagick\Driver; use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\JpegEncoder; use Intervention\Image\Drivers\Imagick\Encoders\JpegEncoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
@@ -37,4 +38,34 @@ final class JpegEncoderTest extends ImagickTestCase
$this->assertEquals('image/jpeg', $result->mimetype()); $this->assertEquals('image/jpeg', $result->mimetype());
$this->assertTrue($this->isProgressiveJpeg($result)); $this->assertTrue($this->isProgressiveJpeg($result));
} }
public function testEncodeStripExif(): void
{
$image = $this->readTestImage('exif.jpg');
$this->assertEquals('Oliver Vogel', $image->exif('IFD0.Artist'));
$encoder = new JpegEncoder(strip: true);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image);
$this->assertMediaType('image/jpeg', $result);
$this->assertEquals('image/jpeg', $result->mimetype());
$this->assertEmpty(exif_read_data($result->toFilePointer())['IFD0.Artist'] ?? null);
}
public function testEncodeStripExifKeepICCProfiles(): void
{
$image = $this->readTestImage('cmyk.jpg');
$this->assertNotEmpty($image->core()->native()->getImageProfiles('icc'));
$encoder = new JpegEncoder(strip: true);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image);
$decoder = new FilePointerImageDecoder();
$decoder->setDriver(new Driver());
$image = $decoder->decode($result->toFilePointer());
$this->assertNotEmpty($image->core()->native()->getImageProfiles('icc'));
}
} }

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\TiffEncoder; use Intervention\Image\Drivers\Imagick\Encoders\TiffEncoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\RequiresPhpExtension;
@@ -17,6 +18,7 @@ final class TiffEncoderTest extends ImagickTestCase
{ {
$image = $this->createTestImage(3, 2); $image = $this->createTestImage(3, 2);
$encoder = new TiffEncoder(); $encoder = new TiffEncoder();
$encoder->setDriver(new Driver());
$result = $encoder->encode($image); $result = $encoder->encode($image);
$this->assertMediaType('image/tiff', $result); $this->assertMediaType('image/tiff', $result);
$this->assertEquals('image/tiff', $result->mimetype()); $this->assertEquals('image/tiff', $result->mimetype());

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders; namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Drivers\Imagick\Encoders\WebpEncoder; use Intervention\Image\Drivers\Imagick\Encoders\WebpEncoder;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\Attributes\RequiresPhpExtension;
@@ -17,6 +18,7 @@ final class WebpEncoderTest extends ImagickTestCase
{ {
$image = $this->createTestImage(3, 2); $image = $this->createTestImage(3, 2);
$encoder = new WebpEncoder(75); $encoder = new WebpEncoder(75);
$encoder->setDriver(new Driver());
$result = $encoder->encode($image); $result = $encoder->encode($image);
$this->assertMediaType('image/webp', $result); $this->assertMediaType('image/webp', $result);
$this->assertEquals('image/webp', $result->mimetype()); $this->assertEquals('image/webp', $result->mimetype());

View File

@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Modifiers;
use Intervention\Image\Drivers\Imagick\Modifiers\StripMetaModifier;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use Intervention\Image\Tests\ImagickTestCase;
#[RequiresPhpExtension('imagick')]
#[CoversClass(StripMetaModifier::class)]
final class StripMetaModifierTest extends ImagickTestCase
{
public function testApply(): void
{
$image = $this->readTestImage('exif.jpg');
$this->assertEquals('Oliver Vogel', $image->exif('IFD0.Artist'));
$image->modify(new StripMetaModifier());
$this->assertNull($image->exif('IFD0.Artist'));
$result = $image->toJpeg();
$this->assertEmpty(exif_read_data($result->toFilePointer())['IFD0.Artist'] ?? null);
}
}