K i[0 dZddlmZdgdgdgddgdgdgddgd gd gddgd gd gddgd gdgddgdgdgddgdgdgddgdgdgddgd gdgdd Zy)u JPEG quality settings equivalent to the Photoshop settings. Can be used when saving JPEG files. The following presets are available by default: ``web_low``, ``web_medium``, ``web_high``, ``web_very_high``, ``web_maximum``, ``low``, ``medium``, ``high``, ``maximum``. More presets can be added to the :py:data:`presets` dict if needed. To apply the preset, specify:: quality="preset_name" To apply only the quantization table:: qtables="preset_name" To apply only the subsampling setting:: subsampling="preset_name" Example:: im.save("image_name.jpg", quality="web_high") Subsampling ----------- Subsampling is the practice of encoding images by implementing less resolution for chroma information than for luma information. (ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and 4:2:0. You can get the subsampling of a JPEG with the :func:`.JpegImagePlugin.get_sampling` function. In JPEG compressed data a JPEG marker is used instead of an EXIF tag. (ref.: https://exiv2.org/tags.html) Quantization tables ------------------- They are values use by the DCT (Discrete cosine transform) to remove *unnecessary* information from the image (the lossy part of the compression). (ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, https://en.wikipedia.org/wiki/JPEG#Quantization) You can get the quantization tables of a JPEG with:: im.quantization This will return a dict with a number of lists. You can pass this dict directly as the qtables argument when saving a JPEG. The quantization table format in presets is a list with sublists. These formats are interchangeable. Libjpeg ref.: https://web.archive.org/web/20120328125543/http://www.jpegcameras.com/libjpeg/libjpeg-3.html ) annotations)@'2.>Dr&r5Ar rrrrrr r rrrrrr r r r rrrr r r r r rrr r r r r r rr r r r r r r r r r r r r r )@r r6r r r rrrr r r rrr+Br r r rrrrr r r r rrrr r r r r r r r r r r r r r r r r r r r r r r r r r r r r ) subsampling quantization)@r rrrrr rrrrrrr rr#/rr rrr"%r$@rrrr"r3r&r&rrr"r%r'r&r&r&rrr#r$r&r&r&r&rrr$r&r&r&r&r&)@r r(rrr"r0r r r(rr"r#rr(r rr"rr rrr(r+rrrrr&rrr"rrr)r&r&r"r"rrr)?r&r&rr#r rr&r&r&r&r)rrr&r&r&r&r&)@r.r- rrrr.r0r- rrr.r0r0r-r2rr*r-r-r-rrr r*rr/r1r2rrrrrrr2rr rrrrrrr3r*rrrrrrr*rrrrr)@r4r!rr"rrrr4rrrrrrrr!rr(rrrrrrrrrrrrrr"rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr)@rrrrr.r0r-rrrrr5r.r0r-rrrrr.r0r4r/rrrr.r0r4r/rr5r5r.r0r1r2rrr.r.r0r4r2rrrr0r0r4r/rrrrr-r-r/rrrrr)@r5r5r0r/r!r r r r5r.r-rr3rrrr0r-r/r3rrrrr/rr3rrrrrr!r3rrrrrrr rrrrrrrr rrrrrrrr rrrrrrr)@r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6r6rr6r6r6r6r6r6rrr6r6r6r6r6rrr5r6r6r6r6rrr5r5r6r6r6rrr5r5r5r6r6rrr5r5r5r5)@r6r6r6rrr5r5r5r6r6r6rr5r5r5r5r6r6r6r5r5r5r5r5rrr5r5r5r5r5r5rr5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5r5)@r r3r3rrr#"r(r3rrr*r"rrrr3rr(rrrrrrr*rrrrrrrr"rrrrrrr#rrrrrrrr7rrrrrrrr(rrrrrrr)@rr*r+rrrr(r(r*rrr3r3rrrr+rr3r3rrrrrr3r3rrrrrrr3rrrrrrrrrrrrrrr(rrrrrrrr(rrrrrrr)@rr1r1rr(rrr(r1r/r/rr r*rrr1r/r2rr*rrrrrrrrrrrr(r r*rrrrrrr*rrrrrrrrrrrrrrr(rrrrrrr)@r!rr!rrrr(r(rr3r3r3r3rrrr!r3r3r3rrrrrr3r3rrrrrrr3rrrrrrrrrrrrrrr(rrrrrrrr(rrrrrrr)@r-r.r.r-r/rrrr.r0r0r-r1r2rrr.r0r0r-r2rrrr-r-r-rrrrrr/r1r2rrrrrrr2rrrrrrrrrrrrrrrrrrrrrr)@r4r4r!rrrr(r(r4rrr3r3rrrr!rr3r3rrrrrr3r3rrrrrrr3rrrrrrrrrrrrrrr(rrrrrrrr(rrrrrrr)@r5r5r0r/r!r r r r5r.r-r2r3rrrr0r-r/r3rrrrr/r2r3rrrrrr!r3rrrrrrr rrrrrrrr rrrrrrrr rrrrrrr) web_low web_mediumweb_high web_very_high web_maximumlowmediumhighmaximumN)__doc__ __future__rpresetsU/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/PIL/JpegPresets.pyrGs ?B#./ @ @. !&./ @ @. &./ @ @. &/0 @ @/ !&./!@!@. &./ @ @. &./ @ @. &./ @ @. &./ @ @. sl rE