mirror of
https://github.com/Intervention/image.git
synced 2025-08-20 04:31:24 +02:00
Add quality parameter to driver ambiguous decoders
This commit is contained in:
@@ -7,6 +7,16 @@ use Intervention\Image\Interfaces\ImageInterface;
|
||||
|
||||
class AutoEncoder extends MediaTypeEncoder
|
||||
{
|
||||
/**
|
||||
* Create new encoder instance
|
||||
*
|
||||
* @param int $quality
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(protected int $quality = 75)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
|
@@ -13,9 +13,10 @@ class FileExtensionEncoder extends AutoEncoder
|
||||
* Create new encoder instance to encode to format of given file extension
|
||||
*
|
||||
* @param null|string $extension
|
||||
* @param int $quality
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(protected ?string $extension = null)
|
||||
public function __construct(protected ?string $extension = null, protected int $quality = 75)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -47,13 +48,13 @@ class FileExtensionEncoder extends AutoEncoder
|
||||
}
|
||||
|
||||
return match ($extension) {
|
||||
'webp' => new WebpEncoder(),
|
||||
'avif' => new AvifEncoder(),
|
||||
'jpeg', 'jpg' => new JpegEncoder(),
|
||||
'webp' => new WebpEncoder($this->quality),
|
||||
'avif' => new AvifEncoder($this->quality),
|
||||
'jpeg', 'jpg' => new JpegEncoder($this->quality),
|
||||
'bmp' => new BmpEncoder(),
|
||||
'gif' => new GifEncoder(),
|
||||
'png' => new PngEncoder(),
|
||||
'tiff', 'tif' => new TiffEncoder(),
|
||||
'tiff', 'tif' => new TiffEncoder($this->quality),
|
||||
default => throw new EncoderException('No encoder found for file extension (' . $extension . ').'),
|
||||
};
|
||||
}
|
||||
|
@@ -11,9 +11,10 @@ class FilePathEncoder extends FileExtensionEncoder
|
||||
* Create new encoder instance to encode to format of file extension in given path
|
||||
*
|
||||
* @param null|string $path
|
||||
* @param int $quality
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(protected ?string $path = null)
|
||||
public function __construct(protected ?string $path = null, protected int $quality = 75)
|
||||
{
|
||||
}
|
||||
|
||||
|
@@ -13,9 +13,10 @@ class MediaTypeEncoder implements EncoderInterface
|
||||
* Create new encoder instance to encode given media (mime) type
|
||||
*
|
||||
* @param null|string $type
|
||||
* @param int $quality
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(protected ?string $type = null)
|
||||
public function __construct(protected ?string $type = null, protected int $quality = 75)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -43,13 +44,13 @@ class MediaTypeEncoder implements EncoderInterface
|
||||
protected function encoderByMediaType(string $type): EncoderInterface
|
||||
{
|
||||
return match ($type) {
|
||||
'image/webp' => new WebpEncoder(),
|
||||
'image/avif' => new AvifEncoder(),
|
||||
'image/jpeg' => new JpegEncoder(),
|
||||
'image/webp' => new WebpEncoder($this->quality),
|
||||
'image/avif' => new AvifEncoder($this->quality),
|
||||
'image/jpeg' => new JpegEncoder($this->quality),
|
||||
'image/bmp' => new BmpEncoder(),
|
||||
'image/gif' => new GifEncoder(),
|
||||
'image/png' => new PngEncoder(),
|
||||
'image/tiff' => new TiffEncoder(),
|
||||
'image/tiff' => new TiffEncoder($this->quality),
|
||||
default => throw new EncoderException('No encoder found for media type (' . $type . ').'),
|
||||
};
|
||||
}
|
||||
|
@@ -256,11 +256,11 @@ final class Image implements ImageInterface, Countable
|
||||
*
|
||||
* @see ImageInterface::save()
|
||||
*/
|
||||
public function save(?string $path = null): ImageInterface
|
||||
public function save(?string $path = null, int $quality = 75): ImageInterface
|
||||
{
|
||||
$path = is_null($path) ? $this->origin()->filePath() : $path;
|
||||
|
||||
$this->encodeByPath($path)->save($path);
|
||||
$this->encodeByPath($path, $quality)->save($path);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@@ -766,9 +766,9 @@ final class Image implements ImageInterface, Countable
|
||||
*
|
||||
* @see ImageInterface::encodeByMediaType()
|
||||
*/
|
||||
public function encodeByMediaType(?string $type = null): EncodedImageInterface
|
||||
public function encodeByMediaType(?string $type = null, int $quality = 75): EncodedImageInterface
|
||||
{
|
||||
return $this->encode(new MediaTypeEncoder($type));
|
||||
return $this->encode(new MediaTypeEncoder($type, $quality));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -776,9 +776,9 @@ final class Image implements ImageInterface, Countable
|
||||
*
|
||||
* @see ImageInterface::encodeByExtension()
|
||||
*/
|
||||
public function encodeByExtension(?string $extension = null): EncodedImageInterface
|
||||
public function encodeByExtension(?string $extension = null, int $quality = 75): EncodedImageInterface
|
||||
{
|
||||
return $this->encode(new FileExtensionEncoder($extension));
|
||||
return $this->encode(new FileExtensionEncoder($extension, $quality));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -786,9 +786,9 @@ final class Image implements ImageInterface, Countable
|
||||
*
|
||||
* @see ImageInterface::encodeByPath()
|
||||
*/
|
||||
public function encodeByPath(?string $path = null): EncodedImageInterface
|
||||
public function encodeByPath(?string $path = null, int $quality = 75): EncodedImageInterface
|
||||
{
|
||||
return $this->encode(new FilePathEncoder($path));
|
||||
return $this->encode(new FilePathEncoder($path, $quality));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -74,7 +74,7 @@ interface ImageInterface extends IteratorAggregate, Countable
|
||||
* @param null|string $path
|
||||
* @return ImageInterface
|
||||
*/
|
||||
public function save(?string $path = null): ImageInterface;
|
||||
public function save(?string $path = null, int $quality = 75): ImageInterface;
|
||||
|
||||
/**
|
||||
* Apply given modifier to current image
|
||||
@@ -573,7 +573,7 @@ interface ImageInterface extends IteratorAggregate, Countable
|
||||
* @param null|string $type
|
||||
* @return EncodedImageInterface
|
||||
*/
|
||||
public function encodeByMediaType(?string $type = null): EncodedImageInterface;
|
||||
public function encodeByMediaType(?string $type = null, int $quality = 75): EncodedImageInterface;
|
||||
|
||||
/**
|
||||
* Encode the image into the format represented by the given extension. If no
|
||||
@@ -583,7 +583,7 @@ interface ImageInterface extends IteratorAggregate, Countable
|
||||
* @param null|string $extension
|
||||
* @return EncodedImageInterface
|
||||
*/
|
||||
public function encodeByExtension(?string $extension = null): EncodedImageInterface;
|
||||
public function encodeByExtension(?string $extension = null, int $quality = 75): EncodedImageInterface;
|
||||
|
||||
/**
|
||||
* Encode the image into the format represented by the given extension of
|
||||
@@ -593,7 +593,7 @@ interface ImageInterface extends IteratorAggregate, Countable
|
||||
* @param null|string $path
|
||||
* @return EncodedImageInterface
|
||||
*/
|
||||
public function encodeByPath(?string $path = null): EncodedImageInterface;
|
||||
public function encodeByPath(?string $path = null, int $quality = 75): EncodedImageInterface;
|
||||
|
||||
/**
|
||||
* Encode image to JPEG format
|
||||
|
Reference in New Issue
Block a user