Removed qmin and qmax (#17)

This commit is contained in:
Andrew Murray 2025-01-26 03:00:44 +11:00 committed by GitHub
parent 38f0d105e4
commit 1410d23453
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 24 additions and 30 deletions

View File

@ -17,7 +17,7 @@ brew install \
dav1d \
aom \
rav1e \
ninja
svt-av1
if [[ "$ImageOS" == "macos13" ]]; then
brew install --ignore-dependencies libraqm
else

View File

@ -60,10 +60,10 @@ jobs:
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-ghostscript \
mingw-w64-x86_64-lcms2 \
mingw-w64-x86_64-libavif \
mingw-w64-x86_64-libimagequant \
mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-libraqm \
mingw-w64-x86_64-libavif \
mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-libwebp \
mingw-w64-x86_64-openjpeg2 \

View File

@ -1359,14 +1359,8 @@ as 8-bit RGB(A).
The :py:meth:`~PIL.Image.Image.save` method supports the following options:
**quality**
Integer, 1-100, defaults to 75. 0 gives the smallest size and poorest
quality, 100 the largest and best quality. The value of this setting
controls the ``qmin`` and ``qmax`` encoder options.
**qmin** / **qmax**
Integer, 0-63. The quality of images created by an AVIF encoder are
controlled by minimum and maximum quantizer values. The higher these
values are, the worse the quality.
Integer, 0-100, defaults to 75. 0 gives the smallest size and poorest
quality, 100 the largest and best quality.
**subsampling**
If present, sets the subsampling for the encoder. Defaults to ``4:2:0``.
@ -1380,6 +1374,10 @@ The :py:meth:`~PIL.Image.Image.save` method supports the following options:
**speed**
Quality/speed trade-off (0=slower-better, 10=fastest). Defaults to 6.
**max_threads**
Limit the number of active threads used. By default, there is no limit. If the aom
codec is used, there is a maximum of 64.
**range**
YUV range, either "full" or "limited". Defaults to "full"
@ -1392,8 +1390,17 @@ The :py:meth:`~PIL.Image.Image.save` method supports the following options:
For tile encoding, the (log 2) number of tile rows and columns to use.
Valid values are 0-6, default 0.
**autotiling**
Split the image up to allow parallelization. Enabled automatically if "tile_rows"
and "tile_cols" both have their default values of zero. Requires libavif version
**0.11.0** or greater.
**alpha_premultiplied**
Encode the image with premultiplied alpha. Defaults to ``False``
Encode the image with premultiplied alpha. Defaults to ``False``. Requires libavif
version **0.9.0** or greater.
**advanced**
Codec specific options. Requires libavif version **0.8.2** or greater.
**icc_profile**
The ICC Profile to include in the saved file.

View File

@ -170,7 +170,7 @@ Many of Pillow's features require external libraries:
instead of installing libavif through Homebrew directly, you can use
Homebrew to install libavif's build dependencies::
brew install aom dav1d rav1e
brew install aom dav1d rav1e svt-av1
Then see ``depends/install_libavif.sh`` to install libavif.

View File

@ -156,8 +156,6 @@ def _save(
is_single_frame = total == 1
qmin = info.get("qmin", -1)
qmax = info.get("qmax", -1)
quality = info.get("quality", 75)
if not isinstance(quality, int) or quality < 0 or quality > 100:
msg = "Invalid quality setting"
@ -218,8 +216,6 @@ def _save(
im.size[0],
im.size[1],
subsampling,
qmin,
qmax,
quality,
speed,
max_threads,

View File

@ -289,8 +289,8 @@ def pilinfo(out: IO[str] | None = None, supported_formats: bool = True) -> None:
("freetype2", "FREETYPE2"),
("littlecms2", "LITTLECMS2"),
("webp", "WEBP"),
("jpg", "JPEG"),
("avif", "AVIF"),
("jpg", "JPEG"),
("jpg_2000", "OPENJPEG (JPEG2000)"),
("zlib", "ZLIB (PNG/ZIP)"),
("libtiff", "LIBTIFF"),

View File

@ -234,8 +234,6 @@ AvifEncoderNew(PyObject *self_, PyObject *args) {
avifEncoder *encoder;
char *subsampling;
int qmin;
int qmax;
int quality;
int speed;
int exif_orientation;
@ -255,12 +253,10 @@ AvifEncoderNew(PyObject *self_, PyObject *args) {
if (!PyArg_ParseTuple(
args,
"IIsiiiiissiiOOSSiSO",
"IIsiiissiiOOSSiSO",
&width,
&height,
&subsampling,
&qmin,
&qmax,
&quality,
&speed,
&max_threads,
@ -327,17 +323,12 @@ AvifEncoderNew(PyObject *self_, PyObject *args) {
_codec_available("aom", AVIF_CODEC_FLAG_CAN_ENCODE));
encoder->maxThreads = is_aom_encode && max_threads > 64 ? 64 : max_threads;
if (qmin == -1 || qmax == -1) {
#if AVIF_VERSION >= 1000000
encoder->quality = quality;
encoder->quality = quality;
#else
encoder->minQuantizer = normalize_quantize_value(64 - quality);
encoder->maxQuantizer = normalize_quantize_value(100 - quality);
encoder->minQuantizer = normalize_quantize_value(64 - quality);
encoder->maxQuantizer = normalize_quantize_value(100 - quality);
#endif
} else {
encoder->minQuantizer = normalize_quantize_value(qmin);
encoder->maxQuantizer = normalize_quantize_value(qmax);
}
if (strcmp(codec, "auto") == 0) {
encoder->codecChoice = AVIF_CODEC_CHOICE_AUTO;