Skip to content

Commit

Permalink
strip parameter to encoders that support exif
Browse files Browse the repository at this point in the history
  • Loading branch information
deluxetom committed Jan 18, 2025
1 parent 5d64da9 commit 4635ea9
Show file tree
Hide file tree
Showing 14 changed files with 89 additions and 11 deletions.
17 changes: 17 additions & 0 deletions src/Drivers/Imagick/Driver.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,4 +171,21 @@ public static function version(): string

return $matches['version'];
}

/**
* @param Imagick $imagick
*
* @throws \ImagickException
* @return void
*/
public static function stripExifKeepICCProfiles(Imagick $imagick): void
{
$profiles = $imagick->getImageProfiles('icc');

$imagick->stripImage();

if ($profiles !== []) {
$imagick->profileImage("icc", $profiles['icc']);
}
}
}
5 changes: 5 additions & 0 deletions src/Drivers/Imagick/Encoders/AvifEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Intervention\Image\Drivers\Imagick\Encoders;

use Imagick;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\AvifEncoder as GenericAvifEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface;
Expand All @@ -26,6 +27,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setCompressionQuality($this->quality);
$imagick->setImageCompressionQuality($this->quality);

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/avif');
}
}
5 changes: 5 additions & 0 deletions src/Drivers/Imagick/Encoders/HeicEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Intervention\Image\Drivers\Imagick\Encoders;

use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\HeicEncoder as GenericHeicEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface;
Expand All @@ -22,6 +23,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setCompressionQuality($this->quality);
$imagick->setImageCompressionQuality($this->quality);

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/heic');
}
}
5 changes: 5 additions & 0 deletions src/Drivers/Imagick/Encoders/Jpeg2000Encoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Intervention\Image\Drivers\Imagick\Encoders;

use Imagick;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\Jpeg2000Encoder as GenericJpeg2000Encoder;
use Intervention\Image\Interfaces\ImageInterface;
Expand All @@ -28,6 +29,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setCompressionQuality($this->quality);
$imagick->setImageCompressionQuality($this->quality);

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/jp2');
}
}
6 changes: 6 additions & 0 deletions src/Drivers/Imagick/Encoders/JpegEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
namespace Intervention\Image\Drivers\Imagick\Encoders;

use Imagick;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\JpegEncoder as GenericJpegEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface;
Expand All @@ -30,6 +31,7 @@ public function encode(ImageInterface $image): EncodedImageInterface
// possible full transparent colors as black
$background->setColorValue(Imagick::COLOR_ALPHA, 1);

/** @var Imagick $imagick */
$imagick = $image->core()->native();
$imagick->setImageBackgroundColor($background);
$imagick->setBackgroundColor($background);
Expand All @@ -45,6 +47,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setInterlaceScheme(Imagick::INTERLACE_PLANE);
}

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/jpeg');
}
}
5 changes: 5 additions & 0 deletions src/Drivers/Imagick/Encoders/TiffEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Intervention\Image\Drivers\Imagick\Encoders;

use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\TiffEncoder as GenericTiffEncoder;
use Intervention\Image\Interfaces\ImageInterface;
Expand All @@ -24,6 +25,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setCompressionQuality($this->quality);
$imagick->setImageCompressionQuality($this->quality);

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/tiff');
}
}
5 changes: 5 additions & 0 deletions src/Drivers/Imagick/Encoders/WebpEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use Imagick;
use ImagickPixel;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\EncodedImage;
use Intervention\Image\Encoders\WebpEncoder as GenericWebpEncoder;
use Intervention\Image\Interfaces\EncodedImageInterface;
Expand Down Expand Up @@ -36,6 +37,10 @@ public function encode(ImageInterface $image): EncodedImageInterface
$imagick->setOption('webp:lossless', 'true');
}

if ($this->strip) {
Driver::stripExifKeepICCProfiles($imagick);
}

return new EncodedImage($imagick->getImagesBlob(), 'image/webp');
}
}
7 changes: 5 additions & 2 deletions src/Encoders/AvifEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ class AvifEncoder extends SpecializableEncoder
* Create new encoder object
*
* @param int $quality
* @param bool $strip
* @return void
*/
public function __construct(public int $quality = self::DEFAULT_QUALITY)
{
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $strip = false
) {
}
}
7 changes: 5 additions & 2 deletions src/Encoders/HeicEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ class HeicEncoder extends SpecializableEncoder
* Create new encoder object
*
* @param int $quality
* @param bool $strip
* @return void
*/
public function __construct(public int $quality = self::DEFAULT_QUALITY)
{
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $strip = false
) {
}
}
7 changes: 5 additions & 2 deletions src/Encoders/Jpeg2000Encoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ class Jpeg2000Encoder extends SpecializableEncoder
* Create new encoder object
*
* @param int $quality
* @param bool $strip
* @return void
*/
public function __construct(public int $quality = self::DEFAULT_QUALITY)
{
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $strip = false
) {
}
}
4 changes: 3 additions & 1 deletion src/Encoders/JpegEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,13 @@ class JpegEncoder extends SpecializableEncoder
*
* @param int $quality
* @param bool $progressive
* @param bool $strip
* @return void
*/
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $progressive = false
public bool $progressive = false,
public bool $strip = false
) {
}
}
7 changes: 5 additions & 2 deletions src/Encoders/TiffEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ class TiffEncoder extends SpecializableEncoder
* Create new encoder object
*
* @param int $quality
* @param bool $strip
* @return void
*/
public function __construct(public int $quality = self::DEFAULT_QUALITY)
{
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $strip = false
) {
}
}
7 changes: 5 additions & 2 deletions src/Encoders/WebpEncoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ class WebpEncoder extends SpecializableEncoder
* Create new encoder object
*
* @param int $quality
* @param bool $strip
* @return void
*/
public function __construct(public int $quality = self::DEFAULT_QUALITY)
{
public function __construct(
public int $quality = self::DEFAULT_QUALITY,
public bool $strip = false
) {
}
}
13 changes: 13 additions & 0 deletions tests/Unit/Drivers/Imagick/Encoders/JpegEncoderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,17 @@ public function testEncodeProgressive(): void
$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);
}
}

0 comments on commit 4635ea9

Please sign in to comment.