mirror of
https://github.com/Intervention/image.git
synced 2025-09-02 18:32:56 +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:
@@ -24,11 +24,13 @@ final class ConfigTest extends BaseTestCase
|
||||
autoOrientation: false,
|
||||
decodeAnimation: false,
|
||||
blendingColor: 'f00',
|
||||
strip: true,
|
||||
);
|
||||
$this->assertInstanceOf(Config::class, $config);
|
||||
|
||||
$this->assertFalse($config->autoOrientation);
|
||||
$this->assertFalse($config->decodeAnimation);
|
||||
$this->assertTrue($config->strip);
|
||||
$this->assertEquals('f00', $config->blendingColor);
|
||||
}
|
||||
|
||||
@@ -37,12 +39,14 @@ final class ConfigTest extends BaseTestCase
|
||||
$config = new Config();
|
||||
$this->assertTrue($config->autoOrientation);
|
||||
$this->assertTrue($config->decodeAnimation);
|
||||
$this->assertFalse($config->strip);
|
||||
$this->assertEquals('ffffff', $config->blendingColor);
|
||||
|
||||
$result = $config->setOptions(
|
||||
autoOrientation: false,
|
||||
decodeAnimation: false,
|
||||
blendingColor: 'f00',
|
||||
strip: true,
|
||||
);
|
||||
|
||||
$this->assertFalse($config->autoOrientation);
|
||||
@@ -51,16 +55,19 @@ final class ConfigTest extends BaseTestCase
|
||||
|
||||
$this->assertFalse($result->autoOrientation);
|
||||
$this->assertFalse($result->decodeAnimation);
|
||||
$this->assertTrue($result->strip);
|
||||
$this->assertEquals('f00', $result->blendingColor);
|
||||
|
||||
$result = $config->setOptions(blendingColor: '000');
|
||||
|
||||
$this->assertFalse($config->autoOrientation);
|
||||
$this->assertFalse($config->decodeAnimation);
|
||||
$this->assertTrue($config->strip);
|
||||
$this->assertEquals('000', $config->blendingColor);
|
||||
|
||||
$this->assertFalse($result->autoOrientation);
|
||||
$this->assertFalse($result->decodeAnimation);
|
||||
$this->assertTrue($result->strip);
|
||||
$this->assertEquals('000', $result->blendingColor);
|
||||
}
|
||||
|
||||
@@ -71,13 +78,16 @@ final class ConfigTest extends BaseTestCase
|
||||
'autoOrientation' => false,
|
||||
'decodeAnimation' => false,
|
||||
'blendingColor' => 'f00',
|
||||
'strip' => true,
|
||||
]);
|
||||
|
||||
$this->assertFalse($config->autoOrientation);
|
||||
$this->assertFalse($config->decodeAnimation);
|
||||
$this->assertTrue($config->strip);
|
||||
$this->assertEquals('f00', $config->blendingColor);
|
||||
$this->assertFalse($result->autoOrientation);
|
||||
$this->assertFalse($result->decodeAnimation);
|
||||
$this->assertTrue($result->strip);
|
||||
$this->assertEquals('f00', $result->blendingColor);
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
|
||||
|
||||
use Intervention\Image\Drivers\Imagick\Driver;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\AvifEncoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
|
||||
@@ -17,6 +18,7 @@ final class AvifEncoderTest extends ImagickTestCase
|
||||
{
|
||||
$image = $this->createTestImage(3, 2);
|
||||
$encoder = new AvifEncoder(10);
|
||||
$encoder->setDriver(new Driver());
|
||||
$result = $encoder->encode($image);
|
||||
$this->assertMediaType('image/avif', $result);
|
||||
$this->assertEquals('image/avif', $result->mimetype());
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
|
||||
|
||||
use Intervention\Image\Drivers\Imagick\Driver;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\HeicEncoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
|
||||
@@ -17,6 +18,7 @@ final class HeicEncoderTest extends ImagickTestCase
|
||||
{
|
||||
$image = $this->createTestImage(3, 2);
|
||||
$encoder = new HeicEncoder(75);
|
||||
$encoder->setDriver(new Driver());
|
||||
$result = $encoder->encode($image);
|
||||
$this->assertMediaType('image/heic', $result);
|
||||
$this->assertEquals('image/heic', $result->mimetype());
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
|
||||
|
||||
use Intervention\Image\Drivers\Imagick\Driver;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\Jpeg2000Encoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
|
||||
@@ -17,6 +18,7 @@ final class Jpeg2000EncoderTest extends ImagickTestCase
|
||||
{
|
||||
$image = $this->createTestImage(3, 2);
|
||||
$encoder = new Jpeg2000Encoder(75);
|
||||
$encoder->setDriver(new Driver());
|
||||
$result = $encoder->encode($image);
|
||||
$this->assertMediaType('image/jp2', $result);
|
||||
$this->assertEquals('image/jp2', $result->mimetype());
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
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\Encoders\JpegEncoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
@@ -37,4 +38,34 @@ final class JpegEncoderTest extends ImagickTestCase
|
||||
$this->assertEquals('image/jpeg', $result->mimetype());
|
||||
$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'));
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
|
||||
|
||||
use Intervention\Image\Drivers\Imagick\Driver;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\TiffEncoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
|
||||
@@ -17,6 +18,7 @@ final class TiffEncoderTest extends ImagickTestCase
|
||||
{
|
||||
$image = $this->createTestImage(3, 2);
|
||||
$encoder = new TiffEncoder();
|
||||
$encoder->setDriver(new Driver());
|
||||
$result = $encoder->encode($image);
|
||||
$this->assertMediaType('image/tiff', $result);
|
||||
$this->assertEquals('image/tiff', $result->mimetype());
|
||||
|
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Intervention\Image\Tests\Unit\Drivers\Imagick\Encoders;
|
||||
|
||||
use Intervention\Image\Drivers\Imagick\Driver;
|
||||
use Intervention\Image\Drivers\Imagick\Encoders\WebpEncoder;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
|
||||
@@ -17,6 +18,7 @@ final class WebpEncoderTest extends ImagickTestCase
|
||||
{
|
||||
$image = $this->createTestImage(3, 2);
|
||||
$encoder = new WebpEncoder(75);
|
||||
$encoder->setDriver(new Driver());
|
||||
$result = $encoder->encode($image);
|
||||
$this->assertMediaType('image/webp', $result);
|
||||
$this->assertEquals('image/webp', $result->mimetype());
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user