libjpeg-turbo Validation
Port build from safelibs/port-libjpeg-turbo at commit 992bd57c696d (release build-992bd57c696d)
Tests
cjpeg and djpeg round trip Original / libjpeg-turbo / cjpeg-djpeg-roundtrip Passed
jpegtran image transform Original / libjpeg-turbo / jpegtran-transform Passed
Malformed JPEG input handling Original / libjpeg-turbo / malformed-jpeg-handling Passed
Progressive grayscale conversion Original / libjpeg-turbo / progressive-grayscale-conversion Passed
TurboJPEG API compile smoke Original / libjpeg-turbo / turbojpeg-api-smoke Passed
Pillow add mirror JPEG Original / libjpeg-turbo / usage-python3-pil-add-mirror-jpeg Passed
Uses Pillow ImageChops.add on a generated JPEG and its mirrored copy and verifies the summed pixel values before round-tripping.
Pillow add_modulo mirror JPEG Original / libjpeg-turbo / usage-python3-pil-add-modulo-mirror-jpeg Passed
Uses Pillow ImageChops.add_modulo on a generated JPEG and its mirrored copy and verifies the modular per-channel sums before round-tripping.
python PIL autocontrast JPEG Original / libjpeg-turbo / usage-python3-pil-autocontrast-jpeg Passed
Pillow splits JPEG bands Original / libjpeg-turbo / usage-python3-pil-band-split-jpeg Passed
Pillow blend mirror JPEG Original / libjpeg-turbo / usage-python3-pil-blend-mirror-jpeg Passed
Blends a generated JPEG with its mirrored copy in Pillow and verifies the blended pixel average before round-tripping.
Pillow blend alpha zero JPEG Original / libjpeg-turbo / usage-python3-pil-blend-zero-mirror-jpeg Passed
Uses Pillow Image.blend with alpha zero on a generated JPEG and verifies the result equals the original image pixel-for-pixel before round-tripping.
python PIL border expand JPEG Original / libjpeg-turbo / usage-python3-pil-border-expand-jpeg Passed
python PIL canvas paste JPEG Original / libjpeg-turbo / usage-python3-pil-canvas-paste-jpeg Passed
Pillow handles CMYK JPEG Original / libjpeg-turbo / usage-python3-pil-cmyk-jpeg Passed
Pillow composite halves JPEG Original / libjpeg-turbo / usage-python3-pil-composite-halves-jpeg Passed
Composites a generated JPEG with its mirrored copy through a half-image mask in Pillow and verifies left and right pixels come from different sources.
python PIL contain JPEG Original / libjpeg-turbo / usage-python3-pil-contain-jpeg Passed
Pillow converts RGB JPEG to CMYK Original / libjpeg-turbo / usage-python3-pil-convert-rgb-to-cmyk-jpeg Passed
Reads an RGB JPEG with Pillow, calls Image.convert("CMYK"), saves the CMYK image as JPEG, and verifies the reopened image reports CMYK mode and four bands.
Pillow crops JPEG Original / libjpeg-turbo / usage-python3-pil-crop-jpeg Passed
Pillow darker mirror JPEG Original / libjpeg-turbo / usage-python3-pil-darker-mirror-jpeg Passed
Uses Pillow ImageChops.darker on a generated JPEG and its mirrored copy and verifies the per-channel minima before round-tripping.
Pillow difference mirror JPEG Original / libjpeg-turbo / usage-python3-pil-difference-mirror-jpeg Passed
Uses Pillow ImageChops.difference on a generated JPEG and its mirrored copy and verifies the absolute per-channel difference values before round-tripping.
Pillow ImageChops difference between identical JPEGs Original / libjpeg-turbo / usage-python3-pil-difference-zero-jpeg Passed
Saves a JPEG twice with identical settings and verifies ImageChops.difference yields an all-zero image (extrema (0,0) per band).
Pillow duplicate darker JPEG Original / libjpeg-turbo / usage-python3-pil-duplicate-darker-jpeg Passed
Uses Pillow ImageChops.darker on a generated JPEG against its own copy and verifies the result equals the original pixel values before round-tripping.
Pillow Image.entropy on JPEG Original / libjpeg-turbo / usage-python3-pil-entropy-jpeg Passed
Saves a high-variance JPEG and a flat JPEG with Pillow, reopens both and verifies Image.entropy returns a finite non-negative value and that the high-variance image has strictly greater entropy than the flat image.
python PIL equalize JPEG Original / libjpeg-turbo / usage-python3-pil-equalize-jpeg Passed
Pillow reads JPEG metadata Original / libjpeg-turbo / usage-python3-pil-exifless-jpeg Passed
python PIL blur filter JPEG Original / libjpeg-turbo / usage-python3-pil-filter-blur-jpeg Passed
python PIL fit JPEG Original / libjpeg-turbo / usage-python3-pil-fit-jpeg Passed
Pillow grayscale darker mirror JPEG Original / libjpeg-turbo / usage-python3-pil-flatten-l-mirror-jpeg Passed
Converts a generated JPEG to L mode and darker-merges with its mirrored copy, verifying the minimum luminance value before round-tripping.
Pillow flips JPEG vertically Original / libjpeg-turbo / usage-python3-pil-flip-topbottom-jpeg Passed
Pillow flip twice identity JPEG Original / libjpeg-turbo / usage-python3-pil-flip-twice-identity-jpeg Passed
Flips a generated JPEG twice with ImageOps.flip and verifies the result matches the original pixel-for-pixel before round-tripping.
Pillow Image.fromarray (np-like) JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-fromarray-jpeg-roundtrip Passed
Builds an image from a bytes subclass exposing __array_interface__ via Image.fromarray, saves as JPEG, and verifies the roundtrip via PIL and file magic.
Pillow Image.frombytes round-trips JPEG Original / libjpeg-turbo / usage-python3-pil-frombytes-jpeg Passed
Decodes a JPEG with Pillow into raw RGB bytes via Image.tobytes, reconstructs the image with Image.frombytes, saves the result back as JPEG and verifies the round-tripped image preserves mode and dimensions.
Pillow Image.getbbox on JPEG Original / libjpeg-turbo / usage-python3-pil-getbbox-jpeg Passed
Saves a JPEG with a non-zero rectangular region on a black canvas, reopens it with Pillow and checks Image.getbbox returns the bounding box of non-zero pixels.
python PIL getextrema JPEG Original / libjpeg-turbo / usage-python3-pil-getextrema-jpeg Passed
Pillow grayscale add JPEG Original / libjpeg-turbo / usage-python3-pil-grayscale-add-jpeg Passed
Converts a generated JPEG to L mode and adds its mirrored copy with ImageChops.add, verifying the saturated luminance sum before saving.
Pillow grayscale jpeg Original / libjpeg-turbo / usage-python3-pil-grayscale-jpeg Passed
python PIL histogram JPEG Original / libjpeg-turbo / usage-python3-pil-histogram-jpeg Passed
Pillow histogram length 768 for RGB JPEG Original / libjpeg-turbo / usage-python3-pil-histogram-rgb-length-jpeg Passed
Loads an RGB JPEG and verifies Image.histogram() returns 768 entries (256 per channel) and that the totals sum to width*height per band.
Pillow Image.copy isolation on JPEG Original / libjpeg-turbo / usage-python3-pil-image-copy-isolation-jpeg Passed
Opens a JPEG, copies it, mutates the copy via putpixel, and verifies the original buffer is unaffected and roundtrips identically.
Pillow Image.copy then paste subimage on JPEG Original / libjpeg-turbo / usage-python3-pil-image-copy-paste-jpeg Passed
Opens a JPEG, copies it, pastes a smaller solid color subimage into the copy at a known offset, saves to JPEG, and verifies the pasted region matches the patch color while the untouched region matches the original background.
Pillow ImageColor.getrgb parsing for JPEG fill Original / libjpeg-turbo / usage-python3-pil-imagecolor-getrgb-jpeg Passed
Uses ImageColor.getrgb to parse common color string forms (named, hex short, hex long, rgb function), creates a JPEG filled with each parsed color, and verifies a roundtrip getpixel matches the parsed RGB tuple.
Pillow ImageDraw.ellipse on JPEG Original / libjpeg-turbo / usage-python3-pil-imagedraw-ellipse-jpeg Passed
Opens a JPEG, draws a filled ellipse with ImageDraw.ellipse, saves the result back to JPEG, and verifies the ellipse interior is the fill color while a corner outside the ellipse stays near the original background.
Pillow ImageDraw line on JPEG Original / libjpeg-turbo / usage-python3-pil-imagedraw-line-jpeg Passed
Opens a JPEG, draws a colored line with ImageDraw.line, saves back to JPEG, and verifies dimensions, format, and that pixels along the line differ from the surrounding background.
Pillow ImageDraw.point individual pixels on JPEG Original / libjpeg-turbo / usage-python3-pil-imagedraw-point-pixels-jpeg Passed
Opens a JPEG, plots individual pixels with ImageDraw.point at known coordinates using a distinctive color, saves to JPEG, and verifies that plotted coordinates differ from the surrounding background while unplotted pixels remain near the background.
Pillow ImageDraw.rectangle outline and fill on JPEG Original / libjpeg-turbo / usage-python3-pil-imagedraw-rectangle-outline-fill-jpeg Passed
Opens a JPEG, draws a rectangle with both outline and fill colors via ImageDraw.rectangle, saves the result back to JPEG, and verifies an interior pixel matches the fill color and an edge pixel matches the outline color.
Pillow ImageDraw JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-imagedraw-roundtrip-jpeg Passed
Draws a filled rectangle on a JPEG via ImageDraw, saves, and verifies the painted pixel value roundtrips.
Pillow ImageDraw.text on JPEG Original / libjpeg-turbo / usage-python3-pil-imagedraw-text-jpeg Passed
Renders text onto a JPEG with ImageDraw using the default font and verifies that drawn pixels darken the canvas after JPEG roundtrip.
Pillow ImageEnhance.Brightness JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-imageenhance-brightness-jpeg Passed
Applies ImageEnhance.Brightness factor 1.0 (identity) and 0.0 (black) to a JPEG and verifies behavior plus a JPEG roundtrip.
Pillow ImageEnhance.Color factor 0.0 yields grayscale Original / libjpeg-turbo / usage-python3-pil-imageenhance-color-zero-jpeg Passed
Applies ImageEnhance.Color(0.0) to an RGB JPEG and verifies all three channels collapse to the same per-pixel luminance, surviving a JPEG roundtrip.
Pillow ImageEnhance.Contrast factor 0.0 collapses to uniform gray Original / libjpeg-turbo / usage-python3-pil-imageenhance-contrast-zero-jpeg Passed
Applies ImageEnhance.Contrast(0.0) to a JPEG and verifies the result is a uniform gray image whose mean equals the source mean after a JPEG roundtrip.
Pillow ImageEnhance.Sharpness JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-imageenhance-sharpness-jpeg Passed
Applies ImageEnhance.Sharpness with identity, blur, and sharpen factors to a JPEG and verifies that 1.0 is closest to the source while 0.0 and 2.0 each diverge in opposing directions, surviving a JPEG roundtrip.
Pillow ImageMath.eval expression on JPEG Original / libjpeg-turbo / usage-python3-pil-imagemath-eval-jpeg Passed
Loads a JPEG, splits its R and G bands, evaluates a per-pixel expression with ImageMath.eval, and verifies the resulting band roundtrips through JPEG.
Pillow ImageOps.cover on JPEG Original / libjpeg-turbo / usage-python3-pil-imageops-cover-jpeg Passed
Opens a JPEG, calls ImageOps.cover to fit a target box while preserving aspect ratio, saves to JPEG, and verifies the resulting image fully covers the target dimensions in at least one axis.
Pillow ImageOps.crop border removal on JPEG Original / libjpeg-turbo / usage-python3-pil-imageops-crop-border-jpeg Passed
Opens a JPEG, calls ImageOps.crop with a uniform border value to remove pixels from each edge, saves to JPEG, and verifies the resulting size shrinks by twice the border in each axis.
Pillow ImageOps.invert RGB JPEG Original / libjpeg-turbo / usage-python3-pil-imageops-invert-rgb-jpeg Passed
Applies ImageOps.invert to an RGB JPEG and verifies a representative pixel inverts via 255 minus channel.
Pillow ImageOps.scale on JPEG Original / libjpeg-turbo / usage-python3-pil-imageops-scale-jpeg Passed
Opens a JPEG, applies ImageOps.scale with a 2.0 factor, saves the result back to JPEG, and verifies the output size doubles in both dimensions.
Pillow ImageStat stddev on JPEG Original / libjpeg-turbo / usage-python3-pil-imagestat-stddev-jpeg Passed
Decodes a JPEG with Pillow and verifies ImageStat per-channel mean and stddev match a manual computation.
Pillow invert generated JPEG Original / libjpeg-turbo / usage-python3-pil-invert-generated-jpeg Passed
Uses Pillow ImageOps.invert on a generated JPEG and verifies the inverted channel values before round-tripping.
Pillow invert mirror lighter JPEG Original / libjpeg-turbo / usage-python3-pil-invert-mirror-mirror-jpeg Passed
Inverts a mirrored JPEG with ImageOps.invert and lighter-merges with the original, verifying the per-channel lighter pixel values before round-tripping.
Pillow JPEG arithmetic coding rejected Original / libjpeg-turbo / usage-python3-pil-jpeg-arithmetic-coding-rejected Passed
Asks Pillow to encode JPEG with arithmetic=True and confirms libjpeg-turbo refuses (no arith encoder), so Pillow raises an exception.
Pillow baseline vs progressive JPEG SOF marker Original / libjpeg-turbo / usage-python3-pil-jpeg-baseline-vs-progressive-size Passed
Saves the same image as baseline and progressive JPEG via Pillow and confirms the SOF0 marker appears for baseline and SOF2 for progressive.
Pillow JPEG BytesIO open Original / libjpeg-turbo / usage-python3-pil-jpeg-bytesio-open-batch11 Passed
Pillow CMYK JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-cmyk-roundtrip-batch11 Passed
Pillow JPEG comment roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-comment-roundtrip Passed
Pillow JPEG DPI roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-dpi-roundtrip-batch11 Passed
Pillow JPEG draft load Original / libjpeg-turbo / usage-python3-pil-jpeg-draft-load-batch11 Passed
Pillow JPEG draft 1/2 scaled decode Original / libjpeg-turbo / usage-python3-pil-jpeg-draft-scale-ratio Passed
Decodes a 64x64 JPEG with Pillow draft mode at scale 1/2 and verifies libjpeg-turbo returns a 32x32 raster via DCT scaling.
Pillow JPEG EXIF orientation Original / libjpeg-turbo / usage-python3-pil-jpeg-exif-orientation-batch11 Passed
Pillow JPEG exif_transpose rotate Original / libjpeg-turbo / usage-python3-pil-jpeg-exif-transpose-rotate Passed
Embeds EXIF Orientation=6 in a JPEG and verifies ImageOps.exif_transpose rotates dimensions accordingly.
Pillow JPEG bands Original / libjpeg-turbo / usage-python3-pil-jpeg-getbands-batch11 Passed
Pillow JPEG getexif orientation roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-getexif-orientation-write Passed
Saves a JPEG with an explicit EXIF blob carrying ImageDescription and Orientation tags via Pillow and verifies getexif() returns the same tag values on reopen.
Pillow grayscale JPEG SOF component count Original / libjpeg-turbo / usage-python3-pil-jpeg-grayscale-sof-components Passed
Saves an L-mode JPEG via Pillow and verifies the SOF0 marker declares exactly one component (Nf=1) for grayscale.
Pillow JPEG ICC profile roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-icc-profile-roundtrip Passed
Saves a JPEG with a synthetic icc_profile bytes payload and verifies Pillow re-exposes the same bytes via info on reopen.
Pillow JPEG ImageFile.MAXBLOCK bump Original / libjpeg-turbo / usage-python3-pil-jpeg-imagefile-maxblock-bump Passed
Saves a 384x384 JPEG with a long ICC payload after raising ImageFile.MAXBLOCK so Pillow can hand the libjpeg-turbo encoder a single contiguous output buffer.
Pillow JPEG info dpi Original / libjpeg-turbo / usage-python3-pil-jpeg-info-dpi Passed
Pillow JPEG progressive flag Original / libjpeg-turbo / usage-python3-pil-jpeg-info-progressive Passed
Pillow grayscale JPEG roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-l-mode-roundtrip-batch11 Passed
Pillow optimized JPEG save Original / libjpeg-turbo / usage-python3-pil-jpeg-optimize-save-batch11 Passed
Pillow progressive JPEG info Original / libjpeg-turbo / usage-python3-pil-jpeg-progressive-info-batch11 Passed
Pillow JPEG qtables=keep roundtrip Original / libjpeg-turbo / usage-python3-pil-jpeg-qtables-keep-roundtrip Passed
Reencodes a JPEG with qtables=keep via Pillow and verifies the quantization tables match the source byte-for-byte.
Pillow JPEG quality 95 vs 40 size delta Original / libjpeg-turbo / usage-python3-pil-jpeg-quality-size-delta Passed
Encodes the same noisy 256x256 image at quality=95 and quality=40 with Pillow and asserts the high-quality output is materially larger, exercising libjpeg-turbo's quantization scaling.
Pillow JPEG quantization table Original / libjpeg-turbo / usage-python3-pil-jpeg-quantization-table-batch11 Passed
Pillow JPEG restart marker interval Original / libjpeg-turbo / usage-python3-pil-jpeg-restart-marker-interval Passed
Saves a JPEG with restart_marker=8 via Pillow and verifies an RST/DRI structure is encoded by scanning the byte stream for 0xFFDD or 0xFFD0-D7.
Pillow JPEG 4:4:4 vs 4:2:0 size Original / libjpeg-turbo / usage-python3-pil-jpeg-subsampling-444-vs-420-size Passed
Saves the same image at the same quality with subsampling=0 (4:4:4) and subsampling=2 (4:2:0) via Pillow and asserts the 4:4:4 output is larger, confirming libjpeg-turbo honors the chroma subsampling selector.
Pillow JPEG subsampling keep Original / libjpeg-turbo / usage-python3-pil-jpeg-subsampling-keep Passed
Saves a JPEG with subsampling=0 via Pillow and verifies the chroma layout via JpegImagePlugin.get_sampling.
Pillow JPEG tile decoder descriptor Original / libjpeg-turbo / usage-python3-pil-jpeg-tile-decoder-info Passed
Opens a JPEG with Pillow without forcing a load and verifies im.tile advertises a single ('jpeg', ...) decoder tile spanning the full image, the wiring Pillow uses to drive libjpeg-turbo.
Pillow JPEG to PNG Original / libjpeg-turbo / usage-python3-pil-jpeg-to-png Passed
Pillow JpegImagePlugin.MARKER table inspection Original / libjpeg-turbo / usage-python3-pil-jpegimageplugin-marker-jpeg Passed
Loads the JpegImagePlugin.MARKER table and verifies a JPEG's actual SOI/SOF/DQT/DHT/EOI marker bytes match the table's known marker IDs.
python PIL L mode JPEG Original / libjpeg-turbo / usage-python3-pil-l-mode-jpeg Passed
Pillow lighter mirror JPEG Original / libjpeg-turbo / usage-python3-pil-lighter-mirror-jpeg Passed
Uses Pillow ImageChops.lighter on a generated JPEG and its mirrored copy and verifies the per-channel maxima before round-tripping.
Pillow opens JPEG from memory Original / libjpeg-turbo / usage-python3-pil-memory-open-jpeg Passed
Pillow mirrors JPEG Original / libjpeg-turbo / usage-python3-pil-mirror-jpeg Passed
Pillow mirror twice identity JPEG Original / libjpeg-turbo / usage-python3-pil-mirror-twice-identity-jpeg Passed
Mirrors a generated JPEG twice with ImageOps.mirror and verifies the result matches the original pixel-for-pixel before round-tripping.
Pillow multiply mirror JPEG Original / libjpeg-turbo / usage-python3-pil-multiply-mirror-jpeg Passed
Uses Pillow ImageChops.multiply on a generated JPEG and its mirrored copy and verifies the multiplied pixel values before round-tripping.
python PIL offset JPEG Original / libjpeg-turbo / usage-python3-pil-offset-jpeg Passed
Pillow open jpeg Original / libjpeg-turbo / usage-python3-pil-open-jpeg Passed
Pillow optimized JPEG Original / libjpeg-turbo / usage-python3-pil-optimize-jpeg Passed
python PIL pad JPEG Original / libjpeg-turbo / usage-python3-pil-pad-jpeg Passed
Pillow pastes JPEG onto canvas Original / libjpeg-turbo / usage-python3-pil-paste-canvas-jpeg Passed
Pillow Image.point lambda 255-x JPEG Original / libjpeg-turbo / usage-python3-pil-point-invert-jpeg Passed
Applies Image.point with a 255-x lookup to invert a JPEG and verifies pixel values match the manual inversion.
Pillow Image.point mode change to 1 Original / libjpeg-turbo / usage-python3-pil-point-mode-1-jpeg Passed
Loads a grayscale JPEG, applies Image.point with a threshold lookup and explicit mode "1", and verifies the result is a 1-bit Pillow image with the expected size.
Pillow point offset JPEG Original / libjpeg-turbo / usage-python3-pil-point-offset-jpeg Passed
Applies a point-wise channel offset to a JPEG with Pillow and verifies the transformed image remains decodable.
python PIL posterize JPEG Original / libjpeg-turbo / usage-python3-pil-posterize-jpeg Passed
Pillow progressive JPEG load Original / libjpeg-turbo / usage-python3-pil-progressive-jpeg Passed
Pillow saves JPEG quality Original / libjpeg-turbo / usage-python3-pil-quality-jpeg Passed
python PIL quantize JPEG Original / libjpeg-turbo / usage-python3-pil-quantize-jpeg Passed
Pillow exposes JFIF version on JPEG load Original / libjpeg-turbo / usage-python3-pil-r10-jpeg-jfif-version Passed
Saves a JPEG with Pillow then reopens and asserts info['jfif'], info['jfif_version'], and info['jfif_unit'] are populated as expected for a JFIF/APP0 marker.
Pillow JPEG keep_rgb encodes component IDs as R G B Original / libjpeg-turbo / usage-python3-pil-r10-jpeg-keep-rgb-component-ids Passed
Saves a JPEG with keep_rgb=True via Pillow and parses the SOF0 marker to confirm the three component IDs are 0x52, 0x47, 0x42 ('R', 'G', 'B') instead of the default 1, 2, 3 (YCbCr).
Pillow LOAD_TRUNCATED_IMAGES decodes a truncated JPEG Original / libjpeg-turbo / usage-python3-pil-r10-jpeg-load-truncated-flag Passed
Saves a JPEG, drops the trailing bytes (no EOI), then decodes once with ImageFile.LOAD_TRUNCATED_IMAGES=True and once without. The flagged decode succeeds and produces an image with the expected dimensions; the unflagged decode raises OSError.
Pillow JPEG byte stream begins with SOI and ends with EOI Original / libjpeg-turbo / usage-python3-pil-r10-jpeg-soi-eoi-markers Passed
Saves a JPEG via Pillow and validates the byte stream framing: opens with FFD8 (SOI) and the trailing two bytes are FFD9 (EOI).
Pillow Image.thumbnail with reducing_gap downsizes JPEG Original / libjpeg-turbo / usage-python3-pil-r10-jpeg-thumbnail-reducing-gap Passed
Loads a 256x192 JPEG and calls Image.thumbnail((64, 64), reducing_gap=2.0). Confirms the resulting image fits inside the box, preserves aspect ratio, and roundtrips back to a valid JPEG.
Pillow reports format=JPEG after opening a saved JPEG Original / libjpeg-turbo / usage-python3-pil-r11-jpeg-format-attribute Passed
Saves a synthetic RGB image with Pillow as JPEG, reopens it, and asserts that Image.format equals "JPEG" — confirming the JpegImagePlugin probe correctly identifies the file by its SOI marker rather than its filename suffix.
ImageChops.add of a JPEG with itself preserves geometry through encode Original / libjpeg-turbo / usage-python3-pil-r11-jpeg-imagechops-add-roundtrip Passed
Loads a JPEG, calls ImageChops.add(im, im, scale=2) to combine the image with itself, saves the result as JPEG, reopens it, and asserts the geometry, mode, and JPEG format survive the channel arithmetic plus encode/decode roundtrip.
ImageOps.expand grows a JPEG by symmetric border on every side Original / libjpeg-turbo / usage-python3-pil-r11-jpeg-imageops-expand-border Passed
Loads a JPEG, expands it by an explicit pixel border using ImageOps.expand with a black fill, re-saves as JPEG, and asserts the new dimensions equal the original plus 2 * border on each axis.
ImageOps.invert on a JPEG roundtrips through libjpeg encode and decode Original / libjpeg-turbo / usage-python3-pil-r11-jpeg-imageops-invert-roundtrip Passed
Opens a saved JPEG, applies ImageOps.invert to flip every channel, re-saves as JPEG, reopens the inverted file, and asserts the geometry and mode are preserved across the encode/decode cycle.
Pillow im.tile lists the jpeg decoder before load Original / libjpeg-turbo / usage-python3-pil-r11-jpeg-tile-decoder-name Passed
Opens a saved JPEG without calling load() and asserts that im.tile is a non-empty list whose first entry's decoder name is "jpeg" — confirming Pillow wires the libjpeg-turbo decoder for files identified as JPEG.
Pillow JPEG comment= argument round-trips through info["comment"] Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-comment-roundtrip Passed
Saves a JPEG with a custom comment via Pillow's comment= argument and reopens to confirm im.info["comment"] equals the same bytes, exercising the COM (FFFE) marker writer and reader.
Pillow JPEG save of an L-mode image reloads as L-mode JPEG Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-grayscale-mode-l-roundtrip Passed
Builds an 8-bit grayscale (L-mode) Pillow image, saves it as JPEG, and reopens to confirm the reloaded image still reports mode == "L" and the SOF marker advertises a single component.
Pillow JPEG save optimize=True is no larger than the unoptimized save Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-optimize-shrinks-output Passed
Saves the same Pillow image twice at quality=80 with optimize=True and optimize=False, and asserts the optimized output is no larger than the unoptimized one (and both are valid JPEGs).
Pillow JPEG progressive=True writes an SOF2 (FFC2) marker Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-progressive-marker-sof2 Passed
Saves a JPEG with Pillow progressive=True and confirms the byte stream contains an SOF2 (FFC2) marker (progressive-mode start-of-frame) and not the SOF0 (FFC0) baseline marker.
Pillow JPEG save quality=10 yields a smaller file than quality=95 Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-quality-low-vs-high-size Passed
Saves the same Pillow image at quality=10 and quality=95 and asserts the low-quality file is strictly smaller, exercising the libjpeg-turbo lossy quality scale via Pillow's encoder.
Pillow JPEG subsampling=0 (4:4:4) reports 4:4:4 on reload Original / libjpeg-turbo / usage-python3-pil-r12-jpeg-subsampling-keyword-444 Passed
Saves a JPEG with subsampling=0 (which Pillow maps to 4:4:4 / no chroma subsampling) and re-opens to confirm JpegImagePlugin.get_sampling returns the (1,1,1,1,1,1) tuple corresponding to 4:4:4.
Pillow JPEG save of a CMYK image writes a 4-component SOF marker Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-cmyk-four-components Passed
Builds a CMYK Pillow image, saves as JPEG, and parses the SOF marker to confirm Nf == 4 components, exercising the libjpeg-turbo 4-channel CMYK encode path.
Pillow JPEG draft mode shrinks a 64x32 image to no more than half size Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-draft-half-load Passed
Saves a 64x32 JPEG via Pillow then reopens with Image.draft("RGB", (32, 16)) before load() and asserts the loaded image's width and height are at most 32x16, exercising the libjpeg-turbo DCT-domain scale-down path.
Pillow JPEG exif= argument round-trips through info["exif"] Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-exif-roundtrip-bytes Passed
Builds a minimal Exif blob via PIL.Image.Exif, saves a JPEG with that exif=... payload, and asserts the reopened JPEG exposes the same Orientation tag value through info["exif"]/getexif(), exercising the APP1 Exif marker writer/reader.
Pillow JPEG icc_profile= writes an APP2 ICC_PROFILE segment Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-icc-profile-app2-marker Passed
Saves a JPEG via Pillow with a synthetic icc_profile bytes payload and asserts the encoded byte stream contains the APP2 marker followed by the "ICC_PROFILE" identifier, exercising the libjpeg-turbo APP2 ICC writer.
Pillow JPEG default save emits a JFIF APP0 segment Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-jfif-app0-marker Passed
Saves a default RGB JPEG via Pillow and asserts the encoded byte stream contains the APP0 marker (FFE0) followed by the "JFIF" identifier, exercising libjpeg-turbo's default JFIF header writer.
Pillow JPEG subsampling=1 (4:2:2) reports 4:2:2 on reload Original / libjpeg-turbo / usage-python3-pil-r13-jpeg-subsampling-keyword-422 Passed
Saves a JPEG with subsampling=1 (Pillow's 4:2:2 mode) and re-opens to confirm JpegImagePlugin.get_sampling returns 1, exercising the libjpeg-turbo chroma 4:2:2 sampling factor encode/decode path.
Pillow JPEG exif=Orientation=6 round-trips through im.getexif() Original / libjpeg-turbo / usage-python3-pil-r14-jpeg-exif-orientation-roundtrip-six Passed
Saves a JPEG with an Exif Orientation tag (0x0112) set to 6 and re-opens to confirm im.getexif()[0x0112] == 6 on read-back, exercising the libjpeg-turbo APP1 Exif segment writer/reader.
Pillow JPEG save of an L-mode image writes a 1-component SOF marker Original / libjpeg-turbo / usage-python3-pil-r14-jpeg-l-mode-sof-one-component Passed
Builds a Pillow L-mode (grayscale) image, saves as JPEG, and parses the SOF marker to confirm Nf == 1 component, exercising the libjpeg-turbo Y-only single-channel encode path.
Pillow JPEG save optimize=True yields a no-larger file than default Original / libjpeg-turbo / usage-python3-pil-r14-jpeg-optimize-vs-default-monotonic-size Passed
Saves the same Pillow image as JPEG twice — once with optimize=True and once without — and asserts the optimised output is no larger than the default output, exercising libjpeg-turbo's optimise-Huffman path through Pillow.
Pillow JPEG save quality=95 emits a JFIF APP0 marker Original / libjpeg-turbo / usage-python3-pil-r14-jpeg-quality-95-jfif-app0-marker Passed
Saves an RGB JPEG via Pillow at quality=95 and confirms the encoded byte stream contains the FFE0 APP0 marker followed by the literal "JFIF\0" identifier, exercising libjpeg-turbo's JFIF header writer at high quality.
Pillow Image.thumbnail then JPEG save shrinks geometry below the cap Original / libjpeg-turbo / usage-python3-pil-r14-jpeg-thumbnail-resamples-and-saves Passed
Loads a 96x72 RGB JPEG, calls Image.thumbnail((48, 48)) (which preserves aspect ratio while capping each axis), saves the result as JPEG, and asserts the reloaded image has width<=48 and height<=48 with both dimensions strictly less than the source, exercising the Pillow resample-then-encode pipeline.
Pillow JPEG save comment= round-trips through im.info["comment"] Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-comment-roundtrip-info Passed
Saves an RGB JPEG via Pillow with comment=b"hello-r15" and re-opens to confirm im.info["comment"] equals the original bytes, exercising libjpeg-turbo's COM segment writer/reader through Pillow.
Pillow JPEG save dpi=(150, 150) round-trips through im.info["dpi"] Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-dpi-roundtrip-150x150 Passed
Saves an RGB JPEG via Pillow with dpi=(150, 150) and re-opens to confirm im.info["dpi"] returns a 2-tuple whose values are within 1 unit of (150, 150), exercising libjpeg-turbo's JFIF density field writer/reader through Pillow.
Pillow JPEG save progressive=True writes an SOF2 (FFC2) marker with no SOF0 Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-progressive-true-sof2-marker Passed
Saves an RGB JPEG via Pillow with progressive=True and confirms the encoded byte stream contains the FFC2 SOF2 marker but no FFC0 SOF0 marker, exercising libjpeg-turbo's progressive Huffman encoder path through Pillow.
Pillow JPEG save quality=1 yields a strictly smaller file than quality=95 Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-quality-zero-vs-default-monotonic-size Passed
Saves the same Pillow image as JPEG twice — once at quality=1 and once at quality=95 — and asserts the q1 output is strictly smaller than the q95 output, exercising libjpeg-turbo's quality-driven byte-size monotonicity at the low extreme.
Pillow JPEG save of an RGB image writes a 3-component SOF marker Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-rgb-mode-three-components Passed
Builds an RGB Pillow image, saves as JPEG, and parses the SOF marker to confirm Nf == 3 components, exercising the libjpeg-turbo standard YCbCr-derived 3-channel encode path.
Pillow JPEG save begins with SOI (FFD8) and ends with EOI (FFD9) Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-soi-eoi-bracket Passed
Saves an RGB JPEG via Pillow at quality=85 and asserts the encoded byte stream begins with the FFD8 SOI marker and ends with the FFD9 EOI marker, exercising the libjpeg-turbo stream-bracketing invariant.
Pillow JPEG subsampling=0 (4:4:4) reports 4:4:4 on reload Original / libjpeg-turbo / usage-python3-pil-r15-jpeg-subsampling-keyword-444 Passed
Saves a JPEG with subsampling=0 (Pillow's 4:4:4 mode) and re-opens to confirm JpegImagePlugin.get_sampling returns 0, exercising the libjpeg-turbo no-chroma-subsampling encode/decode path.
Pillow Image.frombytes mode "L" saves a single-component JPEG re-read in mode L Original / libjpeg-turbo / usage-python3-pil-r16-jpeg-fromarray-monochrome-l-mode Passed
Builds a 32x24 grayscale buffer with Pillow's frombytes for mode "L", saves as JPEG, and asserts the re-decoded image has format=JPEG and mode=L (single-component / one-band) with the original dimensions, exercising libjpeg-turbo's grayscale-only encode and decode paths through Pillow.
Pillow JPEG save quality=95 yields a strictly larger file than quality=75 Original / libjpeg-turbo / usage-python3-pil-r16-jpeg-quality-delta-95-vs-75 Passed
Saves the same RGB image via Pillow at quality=75 and quality=95 and asserts the quality-95 file is strictly larger than the quality-75 file, exercising libjpeg-turbo's quantisation table scaling through Pillow's quality keyword.
Pillow JPEG save subsampling=1 (4:2:2) writes a decodable RGB image Original / libjpeg-turbo / usage-python3-pil-r16-jpeg-subsampling-keyword-422 Passed
Saves a small RGB JPEG via Pillow with subsampling=1 (4:2:2) and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's 4:2:2 chroma-subsampling encoder path through Pillow.
Pillow Image.thumbnail then JPEG save yields a smaller file than the source JPEG Original / libjpeg-turbo / usage-python3-pil-r16-jpeg-thumbnail-shrinks-bytes Passed
Saves a 256x192 RGB image as JPEG, opens it, calls im.thumbnail((64,48)), saves the resized image to a new JPEG, and asserts the thumbnail's byte size is strictly less than the source JPEG byte size and dimensions are no larger than the requested bounds.
Pillow Image.convert("L") then save JPEG re-decodes in mode L Original / libjpeg-turbo / usage-python3-pil-r17-jpeg-convert-l-roundtrip-mode Passed
Builds a 32x20 RGB image with Pillow, converts to mode "L" via convert("L"), saves as JPEG, and asserts the re-decoded image has format=JPEG, mode=L, and the original dimensions, exercising libjpeg-turbo's grayscale encode path through Pillow's convert("L") path (distinct from frombytes-mode-L which constructs from scratch).
Pillow getbbox on a solid-color JPEG returns the full image rectangle Original / libjpeg-turbo / usage-python3-pil-r17-jpeg-getbbox-solid-color Passed
Saves a 32x24 solid-non-black RGB color (140,90,200) JPEG via Pillow and asserts the reopened image's getbbox() is exactly (0, 0, 32, 24), exercising libjpeg-turbo decode of a uniform color image where every pixel is non-zero so the bounding box covers the full canvas.
Pillow ImageOps.expand border=5 increases JPEG dimensions by exactly 10 Original / libjpeg-turbo / usage-python3-pil-r17-jpeg-imageops-expand-border-dims Passed
Saves an RGB JPEG, reopens it, calls ImageOps.expand with border=5, re-encodes as JPEG, and asserts the resulting image's dimensions are width+10 and height+10 (5 pixels added on each side), exercising libjpeg-turbo decode/encode bracketing a Pillow border-expand operation.
Pillow JPEG save progressive=True writes a JPEG that re-decodes to the original mode and size Original / libjpeg-turbo / usage-python3-pil-r17-jpeg-progressive-true-decodable Passed
Saves a 48x32 RGB image via Pillow with progressive=True and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's progressive encoder path through Pillow's progressive keyword (a decode-the-encoded round-trip distinct from SOF2-marker tests).
Pillow JPEG save subsampling=0 (4:4:4) writes a decodable RGB image Original / libjpeg-turbo / usage-python3-pil-r17-jpeg-subsampling-zero-444 Passed
Saves a small RGB JPEG via Pillow with subsampling=0 (4:4:4 — no chroma decimation) and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's 4:4:4 chroma path through Pillow's subsampling keyword (distinct from the r16 4:2:2 subsampling=1 test).
Pillow getbands on an RGB JPEG returns the three-tuple R, G, B Original / libjpeg-turbo / usage-python3-pil-r18-jpeg-getbands-rgb-three Passed
Saves a small RGB image as JPEG via Pillow and asserts the reopened image's getbands() returns exactly the tuple ("R", "G", "B") and len(getbands()) is 3, exercising libjpeg-turbo's three-component decode through Pillow's band introspection (distinct from L-mode getbands coverage).
Pillow getextrema on a solid-127 grayscale JPEG returns a near-127 tight range Original / libjpeg-turbo / usage-python3-pil-r18-jpeg-getextrema-mid-grey-single-band Passed
Saves a 24x24 mode-L grayscale JPEG filled with byte 127 via Pillow at quality=95, reopens it, and asserts getextrema() returns a single tuple (min, max) where both values lie in [120, 134] (libjpeg-turbo quantisation drift around the original 127), exercising Pillow's getextrema reflection through libjpeg-turbo grayscale decode.
Pillow histogram on a grayscale JPEG returns a 256-bucket list summing to the pixel count Original / libjpeg-turbo / usage-python3-pil-r18-jpeg-histogram-l-mode-length-256 Passed
Saves a 32x16 mode-L grayscale JPEG via Pillow with quality=90, reopens it, asserts histogram() length is exactly 256 and the sum of all bins equals W*H=512 (the pixel count), exercising libjpeg-turbo's grayscale decode followed by Pillow's histogram introspection on a single-band image.
Pillow JPEG save dpi=(72,72) round-trips through info["dpi"] Original / libjpeg-turbo / usage-python3-pil-r18-jpeg-info-dpi-roundtrip-72-72 Passed
Saves a small RGB JPEG via Pillow with dpi=(72,72), reopens it, and asserts im.info["dpi"] equals (72, 72) (round-tripped through the JFIF APP0 density fields), exercising libjpeg-turbo's JFIF marker writing with explicit DPI distinct from the r15 (150,150) coverage.
Pillow JPEG save quality=1 produces a strictly smaller file than quality=95 Original / libjpeg-turbo / usage-python3-pil-r18-jpeg-quality-keyword-1-vs-95-monotonic Passed
Saves the same 48x32 RGB image twice via Pillow, once with quality=1 and once with quality=95, and asserts the quality=1 file is strictly smaller in bytes than the quality=95 file, exercising libjpeg-turbo's quantisation-table scaling through Pillow's quality keyword (a different size-pair than r9 1-vs-95 which only checked strict size monotonicity at the same dims).
Pillow getbands on a grayscale L-mode JPEG returns the single-tuple L Original / libjpeg-turbo / usage-python3-pil-r19-jpeg-getbands-l-mode-single Passed
Saves a grayscale L-mode JPEG via Pillow and asserts the reopened image's getbands() returns exactly the tuple ("L",) and im.mode is "L", exercising libjpeg-turbo's single-component grayscale decode through Pillow's band introspection (distinct from the r18 RGB band coverage).
Pillow JPEG save progressive=True round-trips info["progressive"] truthy Original / libjpeg-turbo / usage-python3-pil-r19-jpeg-progressive-roundtrip-info Passed
Saves an RGB JPEG via Pillow with progressive=True, reopens it, and asserts im.info.get("progressive") is truthy and im.info.get("progression") is also truthy on the reopened progressive JPEG, exercising libjpeg-turbo's progressive-mode SOF2 marker round-trip through Pillow's info introspection.
Pillow rotate 90 with expand on a JPEG swaps width and height Original / libjpeg-turbo / usage-python3-pil-r19-jpeg-rotate-90-dims-swap Passed
Saves a 48x24 RGB JPEG via Pillow, opens it, calls rotate(90, expand=True), saves the rotated image as JPEG, and asserts the reopened rotated image's .size equals (24, 48) exactly, exercising libjpeg-turbo encode/decode bracketed around a 90-degree rotation that exchanges the axes.
Pillow resize to half dims on a JPEG produces exact target dims on reopen Original / libjpeg-turbo / usage-python3-pil-r19-jpeg-size-after-resize-half Passed
Saves a 64x32 RGB JPEG via Pillow, resizes the reopened image to (32, 16) with the default resampler, saves it as JPEG again, and asserts the second reopened image's .size equals (32, 16) exactly, exercising libjpeg-turbo encode/decode bracketed around Pillow's resize operation at a power-of-two downscale.
Pillow JPEG decode then tobytes/frombytes reconstructs an identical RGB image Original / libjpeg-turbo / usage-python3-pil-r19-jpeg-tobytes-frombytes-roundtrip Passed
Saves a 32x16 RGB JPEG via Pillow at quality=95, reopens it, dumps the pixel bytes via tobytes(), reconstructs a fresh Image via Image.frombytes("RGB", size, data), and asserts the two images have identical pixel buffers and identical sizes, exercising libjpeg-turbo decode followed by Pillow's raw-byte round-trip without re-encoding.
Pillow JPEG draft("RGB", (32,32)) on a 64x64 source halves the decoded dims Original / libjpeg-turbo / usage-python3-pil-r20-jpeg-draft-half-size-decode-dims Passed
Saves a 64x64 RGB JPEG, reopens it, calls im.draft("RGB", (32,32)) before im.load(), and asserts the resulting size is (32,32) (libjpeg-turbo's DCT scale-by-half decode path), exercising the draft-mode size-scaling decode invocation through Pillow.
Pillow Image.getchannel("R") on a decoded RGB JPEG returns mode L same size Original / libjpeg-turbo / usage-python3-pil-r20-jpeg-getchannel-r-mode-l Passed
Saves an RGB JPEG, decodes it via Pillow, calls im.getchannel("R"), and asserts the returned channel image has mode "L" and the same size as the source, exercising libjpeg-turbo decode followed by Pillow's per-channel band-projection method.
Pillow JPEG save with optimize=True is not larger than save without optimize Original / libjpeg-turbo / usage-python3-pil-r20-jpeg-save-optimize-no-larger Passed
Saves the same RGB image as JPEG at quality=85 twice — once with optimize=False and once with optimize=True — and asserts the optimized file size is less than or equal to the unoptimized size, exercising libjpeg-turbo's optimized Huffman table generation path through Pillow's optimize flag.
Pillow Image.thumbnail on a 100x60 JPEG yields dims fitting within 32x32 Original / libjpeg-turbo / usage-python3-pil-r20-jpeg-thumbnail-shrinks-dimensions Passed
Saves a 100x60 RGB JPEG via Pillow, reopens it, calls im.thumbnail((32,32)), and asserts both width and height are <= 32 and at least one dimension equals 32 (the aspect-preserving bound), exercising libjpeg-turbo decode followed by Pillow's thumbnail in-place rescaling.
Pillow Image.transpose FLIP_LEFT_RIGHT swaps leftmost and rightmost JPEG columns Original / libjpeg-turbo / usage-python3-pil-r20-jpeg-transpose-flip-left-right-pixels Passed
Saves an RGB JPEG with a deterministic column-dependent pattern, decodes it, applies transpose(Image.FLIP_LEFT_RIGHT), and asserts pixel (0,y) of the flipped image equals pixel (W-1,y) of the source for several rows (allowing ~4 unit drift per channel for JPEG compression), exercising libjpeg-turbo decode followed by Pillow's horizontal-flip pixel mapping.
Pillow Image.tobytes after JPEG decode returns exactly W*H*3 bytes for RGB Original / libjpeg-turbo / usage-python3-pil-r21-jpeg-load-then-tobytes-length-rgb Passed
Encodes a 50x30 RGB image as JPEG, re-opens it via Pillow, calls tobytes() on the decoded image and asserts the resulting byte string length equals 50*30*3 = 4500 - locking in libjpeg-turbo's full-decode raw byte output length matching the expected 3-byte-per-pixel packed RGB layout.
Pillow Image.paste with an L-mode mask blends a JPEG-decoded overlay onto a base Original / libjpeg-turbo / usage-python3-pil-r21-jpeg-paste-with-mask-quarter Passed
Decodes a previously-saved JPEG overlay via PIL, pastes it onto a solid RGB base with an L-mode 128-value mask covering a centered quarter, encodes the result as JPEG, and asserts the final image size remains 64x64 and that the centered region's pixel red channel is strictly between the base red value 10 and the overlay red value 200 - locking in libjpeg-turbo's encode/decode path through PIL's Image.paste with a non-trivial alpha mask.
Pillow opens a progressive RGB JPEG and reports im.layers == 3 Original / libjpeg-turbo / usage-python3-pil-r21-jpeg-progressive-layers-three Passed
Encodes a 40x32 RGB image as a progressive JPEG via Pillow, re-opens it, and asserts the JpegImageFile attribute "layers" equals 3 (one per RGB component) and the info["progressive"] flag is truthy - locking in libjpeg-turbo's per-component layer accounting reported on progressive decoder open, a property not previously asserted.
Pillow JPEG save comment kwarg appears in info["comment"] after re-open Original / libjpeg-turbo / usage-python3-pil-r21-jpeg-save-comment-info-roundtrip Passed
Encodes a small RGB image with Pillow's JPEG save comment=b"r21-comment-marker" kwarg, re-opens the result and asserts im.info["comment"] equals that exact byte string AND that the saved file contains a COM (FFFE) marker byte sequence in its first 8 KiB - locking in libjpeg-turbo's COM marker emission via Pillow's comment kwarg and the corresponding info["comment"] decode path.
Pillow's JPEG tile descriptor reports decoder name jpeg and full-image extents Original / libjpeg-turbo / usage-python3-pil-r21-jpeg-tile-decoder-extents Passed
Encodes a 56x40 RGB JPEG, re-opens it through Pillow, and asserts the JpegImageFile.tile list has exactly one entry whose decoder name is "jpeg" and whose extents tuple is (0, 0, 56, 40) covering the full image - locking in libjpeg-turbo's single-tile lazy-decoder descriptor used by Pillow to defer the actual decode pass.
Pillow getbands on L-mode JPEG Original / libjpeg-turbo / usage-python3-pil-r9-jpeg-getbands-l-mode Passed
Saves a grayscale L-mode JPEG and verifies getbands returns a single-band tuple ('L',) on reload.
Pillow getpixel on solid JPEG Original / libjpeg-turbo / usage-python3-pil-r9-jpeg-getpixel-roundtrip Passed
Encodes a uniformly-colored JPEG at high quality and confirms getpixel returns a pixel within tolerance of the encoded color.
Pillow JPEG q=1 smaller than q=95 Original / libjpeg-turbo / usage-python3-pil-r9-jpeg-quality-1-vs-95-size Passed
Saves the same source image at JPEG quality 1 and 95 with Pillow and verifies q=1 produces a strictly smaller file than q=95.
Pillow rotate JPEG 90 swaps dimensions Original / libjpeg-turbo / usage-python3-pil-r9-jpeg-rotate-90-dimensions Passed
Rotates a non-square JPEG by 90 degrees with expand=True and verifies the resulting image dimensions are swapped.
Pillow Image.thumbnail shrinks JPEG in-place Original / libjpeg-turbo / usage-python3-pil-r9-jpeg-thumbnail-shrink Passed
Calls Image.thumbnail on a 64x32 JPEG and verifies the result is shrunk to fit within an 8x8 box while preserving aspect ratio.
Pillow Image.verify on JPEG Original / libjpeg-turbo / usage-python3-pil-r9-verify-jpeg Passed
Runs Image.verify() against a freshly-encoded JPEG and confirms it returns without raising and reports the file format as JPEG.
python PIL red channel JPEG Original / libjpeg-turbo / usage-python3-pil-red-channel-jpeg Passed
Pillow resizes JPEG Original / libjpeg-turbo / usage-python3-pil-resize-jpeg Passed
Pillow rotates JPEG 270 degrees Original / libjpeg-turbo / usage-python3-pil-rotate-270-jpeg Passed
python PIL rotate expand JPEG Original / libjpeg-turbo / usage-python3-pil-rotate-expand-jpeg Passed
Pillow rotates JPEG Original / libjpeg-turbo / usage-python3-pil-rotate-jpeg Passed
Pillow screen mirror JPEG Original / libjpeg-turbo / usage-python3-pil-screen-mirror-jpeg Passed
Uses Pillow ImageChops.screen on a generated JPEG and its mirrored copy and verifies the screened pixel values before round-tripping.
python PIL solarize JPEG Original / libjpeg-turbo / usage-python3-pil-solarize-jpeg Passed
python PIL split merge JPEG Original / libjpeg-turbo / usage-python3-pil-split-merge-jpeg Passed
python PIL stat mean JPEG Original / libjpeg-turbo / usage-python3-pil-stat-mean-jpeg Passed
Pillow subtract mirror JPEG Original / libjpeg-turbo / usage-python3-pil-subtract-mirror-jpeg Passed
Uses Pillow ImageChops.subtract on mirrored and original generated JPEGs and verifies the non-negative channel differences before round-tripping.
Pillow subtract_modulo mirror JPEG Original / libjpeg-turbo / usage-python3-pil-subtract-modulo-mirror-jpeg Passed
Uses Pillow ImageChops.subtract_modulo on a generated JPEG and its mirrored copy and verifies the modular per-channel differences before round-tripping.
Pillow thumbnail jpeg Original / libjpeg-turbo / usage-python3-pil-thumbnail-jpeg Passed
Pillow tobytes raw on JPEG Original / libjpeg-turbo / usage-python3-pil-tobytes-raw-jpeg Passed
Loads a JPEG with Pillow and verifies Image.tobytes("raw") returns width*height*channels bytes matching the image mode.
Pillow transpose FLIP_LEFT_RIGHT JPEG Original / libjpeg-turbo / usage-python3-pil-transpose-flip-lr-jpeg Passed
Applies Image.transpose(FLIP_LEFT_RIGHT) on a JPEG-loaded image, round-trips the result through JPEG, and verifies horizontal pixel mirroring on a mid-gray asymmetric stripe.
Pillow transpose jpeg Original / libjpeg-turbo / usage-python3-pil-transpose-jpeg Passed
Pillow transpose ROTATE_90 on JPEG Original / libjpeg-turbo / usage-python3-pil-transpose-rotate90-jpeg Passed
Rotates a JPEG 90 degrees with Image.transpose(Image.ROTATE_90), saves, and verifies dimension swap and JPEG roundtrip.
python PIL transpose JPEG Original / libjpeg-turbo / usage-python3-pil-transpose-swap-jpeg Passed
Pillow transverse generated JPEG Original / libjpeg-turbo / usage-python3-pil-transverse-generated-jpeg Passed
Applies Pillow transverse transpose to a generated JPEG and verifies both the swapped dimensions and mapped corner pixels before round-tripping.
vips abs absolute value on JPEG-derived image Original / libjpeg-turbo / usage-vips-abs-jpeg Passed
Subtracts a constant from a JPEG via vips linear, takes the absolute value with vips abs, and verifies the result roundtrips back to JPEG with the expected dimensions.
vips arrayjoin two JPEGs side by side Original / libjpeg-turbo / usage-vips-arrayjoin-jpeg Passed
Encodes two PPMs as JPEGs via cjpeg, joins them horizontally with vips arrayjoin across=2, writes the joined image as a JPEG, and verifies the joined dimensions equal the sum of the input widths and the original height.
vips bandbool and JPEG Original / libjpeg-turbo / usage-vips-bandbool-and-jpeg Passed
Reduces a JPEG's RGB bands with vips bandbool boolean :and and verifies the output is a single-band image with matching width and height.
vips bandmean JPEG Original / libjpeg-turbo / usage-vips-bandmean-jpeg Passed
vips colourspace b-w JPEG Original / libjpeg-turbo / usage-vips-colourspace-bw-jpeg Passed
Converts an RGB JPEG to grayscale via vips colourspace b-w and verifies the output is a single-band JPEG.
vips composite two jpegs Original / libjpeg-turbo / usage-vips-composite-jpeg Passed
vips copy jpeg png Original / libjpeg-turbo / usage-vips-copy-jpeg-png Passed
vips copies JPEG to PPM Original / libjpeg-turbo / usage-vips-copy-ppm-jpeg Passed
vips crops JPEG Original / libjpeg-turbo / usage-vips-crop-jpeg Passed
vips embeds JPEG Original / libjpeg-turbo / usage-vips-embed-jpeg Passed
vips embed extend mirror JPEG Original / libjpeg-turbo / usage-vips-embed-mirror-jpeg Passed
Embeds a JPEG into a larger canvas using vips embed --extend mirror and verifies the resulting dimensions and band count via vipsheader -a.
vips embed JPEG on white background Original / libjpeg-turbo / usage-vips-embed-white-bg-jpeg Passed
Embeds a JPEG into a larger canvas with a white background via vips embed and verifies the canvas size and the white border pixels.
vips extract JPEG band Original / libjpeg-turbo / usage-vips-extract-band-jpeg Passed
vips extracts JPEG strip Original / libjpeg-turbo / usage-vips-extract-strip-jpeg Passed
Extracts a one-pixel-high strip from a JPEG with vips and verifies the cropped output dimensions.
vips flips JPEG Original / libjpeg-turbo / usage-vips-flip-jpeg Passed
vips vertical flip JPEG Original / libjpeg-turbo / usage-vips-flip-vertical-jpeg Passed
vips gravity centre JPEG placement Original / libjpeg-turbo / usage-vips-gravity-centre-jpeg Passed
Places a small JPEG into a larger canvas using vips gravity with direction "centre" and verifies the resulting image dimensions match the requested canvas size.
vips header jpeg Original / libjpeg-turbo / usage-vips-header-jpeg Passed
vips inverts JPEG Original / libjpeg-turbo / usage-vips-invert-jpeg Passed
Inverts a JPEG with vips invert and verifies the output dimensions, file magic, and a representative pixel via Pillow.
vips JPEG to TIFF Original / libjpeg-turbo / usage-vips-jpeg-to-tiff Passed
vips jpegload shrink-on-load 2x Original / libjpeg-turbo / usage-vips-jpegload-shrink-on-load Passed
Loads a 64x32 JPEG via vips jpegload with shrink=2 and confirms libjpeg-turbo's DCT-domain shrink returns a 32x16 image without a separate resize step.
vips jpegsave roundtrip Original / libjpeg-turbo / usage-vips-jpegsave-buffer-roundtrip Passed
Encodes a PPM with vips jpegsave at Q=75 and verifies JPEG SOI/EOI bytes plus JFIF or Exif marker.
vips CMYK JPEG roundtrip Original / libjpeg-turbo / usage-vips-jpegsave-cmyk-roundtrip Passed
Converts an RGB JPEG to CMYK via vips colourspace, saves it as a 4-channel JPEG, and verifies vipsheader reports 4 bands cmyk after reload — exercising libjpeg-turbo's CMYK encode/decode paths.
vips jpegsave --interlace SOF2 marker Original / libjpeg-turbo / usage-vips-jpegsave-interlace-sof2 Passed
Saves a JPEG via vips with --interlace and verifies the encoder emits an SOF2 (progressive) frame header instead of SOF0, exercising libjpeg-turbo's progressive path.
vips jpegsave --keep none strips metadata Original / libjpeg-turbo / usage-vips-jpegsave-keep-none-strip Passed
Resaves a JPEG that carries an Exif APP1 block via vips jpegsave --keep none and verifies the Exif marker is gone in the output, while a default save retains it.
vips jpegsave no chroma subsample Original / libjpeg-turbo / usage-vips-jpegsave-no-subsample Passed
Encodes a JPEG with vips jpegsave --no-subsample and confirms the SOF0 component sampling factors all read 1x1 (4:4:4) instead of the default 4:2:0.
vips jpegsave optimize-coding shrinks bytes Original / libjpeg-turbo / usage-vips-jpegsave-optimize-coding Passed
Encodes the same JPEG twice with vips jpegsave at Q=85 — once with --no-optimize-coding, once with --optimize-coding — and confirms the optimised output is no larger and remains a valid JPEG.
vips saves JPEG quality Original / libjpeg-turbo / usage-vips-jpegsave-quality Passed
vips jpegsave --restart-interval DRI marker Original / libjpeg-turbo / usage-vips-jpegsave-restart-interval-dri Passed
Saves a JPEG via vips with --restart-interval 8 and verifies the resulting stream contains a DRI (FFDD) marker plus at least one RST0..RST7 marker, the wire-level restart structure libjpeg-turbo emits.
vips linear JPEG transform Original / libjpeg-turbo / usage-vips-linear-jpeg Passed
vips linear multiply scalar JPEG Original / libjpeg-turbo / usage-vips-multiply-scalar-jpeg Passed
Multiplies a JPEG by a positive scalar constant via vips linear (the supported way to do scalar multiplication; math2_const has no multiply member), writes the result as a JPEG, and verifies the output dimensions and per-pixel values approximately equal the input scaled by the scalar.
vips affine identity transform preserves JPEG dimensions Original / libjpeg-turbo / usage-vips-r10-affine-identity-jpeg Passed
Applies the identity affine matrix (1, 0, 0, 1) to a JPEG via vips affine and verifies the result has the same dimensions and decodes back as a valid JPEG with vipsheader.
vips avg of a solid-color JPEG approximates the source value Original / libjpeg-turbo / usage-vips-r10-avg-solid-color-jpeg Passed
Encodes a solid mid-gray (128) JPEG at high quality, then computes the mean pixel value via vips avg. The mean must be within 2 of 128 once decoded back through libjpeg-turbo.
vips jpegsave strip removes metadata Original / libjpeg-turbo / usage-vips-r10-jpegsave-strip-metadata Passed
Loads a JPEG that contains a custom comment, re-saves it with vips jpegsave --strip, and verifies the output binary contains no JPEG comment marker (FFFE) and is materially smaller than the metadata-bearing input of the same pixels.
vips sharpen on a JPEG produces a valid JPEG Original / libjpeg-turbo / usage-vips-r10-sharpen-jpeg Passed
Loads a JPEG, applies vips sharpen with a small sigma, re-encodes the result with jpegsave, and verifies the output is a JPEG with the original dimensions.
vipsthumbnail --smartcrop centre crops a JPEG to a square Original / libjpeg-turbo / usage-vips-r10-vipsthumbnail-crop-centre-jpeg Passed
Generates a 100x60 JPEG, then runs vipsthumbnail with size 32x32 and --smartcrop centre. Verifies the output JPEG is exactly 32x32 (the crop fills the box) and decodes back through vipsheader.
vips bandjoin recombines three single-band channels into an RGB JPEG Original / libjpeg-turbo / usage-vips-r11-bandjoin-rgb-jpeg Passed
Splits a JPEG into its three colour bands with extract_band, then bandjoins them back into a 3-band image saved as JPEG, asserting the joined output has 3 bands and the original geometry via vipsheader.
vips cast to uchar preserves JPEG geometry and band count Original / libjpeg-turbo / usage-vips-r11-cast-uchar-jpeg Passed
Loads a JPEG and runs vips cast with the uchar target type, then re-encodes as JPEG, asserting the output keeps the same width, height, and band count via vipsheader and is still recognised as JPEG by file(1).
vips extract_area carves a rectangular subregion out of a JPEG Original / libjpeg-turbo / usage-vips-r11-extract-area-jpeg Passed
Loads a JPEG and uses vips extract_area to extract a rectangular subregion at a given offset and size, asserting the resulting JPEG matches the requested width and height via vipsheader.
vips gaussblur smooths a JPEG and preserves geometry Original / libjpeg-turbo / usage-vips-r11-gaussblur-jpeg Passed
Loads a JPEG, runs vips gaussblur with a small sigma to apply a Gaussian smoothing kernel, re-encodes as JPEG, and asserts the output keeps the original width, height, and band count via vipsheader.
vips wrap shifts a JPEG with toroidal offset preserving geometry Original / libjpeg-turbo / usage-vips-r11-wrap-offset-jpeg Passed
Loads a JPEG and applies vips wrap with explicit x/y offsets to perform a toroidal pixel shift, then re-encodes as JPEG and asserts the output keeps the original width, height, and band count via vipsheader.
vips jpegsave --interlace writes an SOF2 progressive marker Original / libjpeg-turbo / usage-vips-r12-jpegsave-interlace-progressive-marker Passed
Saves a JPEG via vips jpegsave with --interlace and confirms the byte stream contains the SOF2 (FFC2) progressive start-of-frame marker rather than the SOF0 (FFC0) baseline marker.
vips jpegsave --no-subsample emits a 4:4:4 SOF0 component table Original / libjpeg-turbo / usage-vips-r12-jpegsave-no-subsample-444 Passed
Saves a JPEG via vips jpegsave with --no-subsample (chroma subsampling disabled) and parses the SOF0 marker to confirm all three components advertise a 1:1 horizontal/vertical sampling factor (0x11), corresponding to 4:4:4.
vips jpegsave --Q 10 yields a smaller file than --Q 95 Original / libjpeg-turbo / usage-vips-r12-jpegsave-q-low-vs-high-size Passed
Encodes a synthetic PPM through vips jpegsave at --Q 10 and --Q 95 and asserts the low-Q file is strictly smaller, exercising the libjpeg-turbo lossy quality scale via vips.
vips jpegsave --trellis-quant produces a valid JPEG at the original size Original / libjpeg-turbo / usage-vips-r12-jpegsave-trellis-quant-roundtrip Passed
Saves a JPEG via vips jpegsave with --trellis-quant (trellis quantisation enabled) and verifies the output is recognised by file(1) and reloads through vipsheader at the original geometry.
vips jpegload reports 3 bands for an RGB JPEG Original / libjpeg-turbo / usage-vips-r13-jpegload-roundtrip-bands-three Passed
Builds an RGB JPEG via cjpeg, loads it with vips jpegload, and asserts vipsheader reports a bands=3 RGB header, exercising the standard libjpeg-turbo 3-component decode path.
vips jpegsave --profile attaches an ICC profile that survives the resave Original / libjpeg-turbo / usage-vips-r13-jpegsave-keep-icc-roundtrip Passed
Builds a JPEG carrying no profile via Pillow, then resaves it with "vips jpegsave --profile <icc>" (an sRGB profile) and asserts the resaved file contains the APP2 ICC_PROFILE identifier in its byte stream, exercising explicit profile embedding through the libjpeg-turbo encoder. (Vips jpegsave --keep icc does not always pull the Pillow-written profile — pass it explicitly via --profile to test the encoder's APP2 emission.)
vips jpegsave --overshoot-deringing produces a valid JPEG at the original size Original / libjpeg-turbo / usage-vips-r13-jpegsave-overshoot-deringing-roundtrip Passed
Saves a JPEG via vips jpegsave with --overshoot-deringing (a mozjpeg-style ringing-mitigation flag) and confirms the output is a syntactically valid JPEG that vipsheader reloads at the input geometry.
vips jpegsave --quant-table 0 emits a valid JPEG at the source size Original / libjpeg-turbo / usage-vips-r13-jpegsave-quant-table-zero-roundtrip Passed
Saves a JPEG via vips jpegsave with --quant-table 0 (the standard JPEG annex-K table set) and verifies the output is recognised as a JPEG with the original geometry, exercising the named-quant-table selector path.
vips jpegload reports bands=1 for a grayscale JPEG Original / libjpeg-turbo / usage-vips-r14-jpegload-bands-one-grayscale Passed
Builds a grayscale JPEG via cjpeg from a PGM source, loads it with vips jpegload, and asserts vipsheader reports a 1-band single-channel header, exercising the libjpeg-turbo grayscale (Y-only) decode path through vips.
vips jpegsave --Q 20 yields a smaller JPEG than --Q 90 Original / libjpeg-turbo / usage-vips-r14-jpegsave-q-low-vs-high-monotonic-size Passed
Encodes the same PPM through vips jpegsave at --Q 20 and --Q 90 and asserts the low-Q output is strictly smaller than the high-Q output, exercising libjpeg-turbo's quality-driven byte-size monotonicity through vips.
vips jpegsave --quant-table 3 emits a JPEG carrying a DQT marker Original / libjpeg-turbo / usage-vips-r14-jpegsave-quant-table-three-roundtrip Passed
Saves a JPEG via vips jpegsave with --quant-table 3 (a non-default named table) and confirms the output contains a DQT (FFDB) marker plus reloads at the original geometry, exercising the named-quant-table encoder selector.
vips jpegsave --restart-interval 0 emits a JPEG without a DRI marker Original / libjpeg-turbo / usage-vips-r14-jpegsave-restart-interval-zero-no-dri Passed
Saves a JPEG via vips jpegsave with --restart-interval 0 (the default off-state) and confirms the resulting stream has no DRI (FFDD) marker, exercising the negative path for the restart-interval encoder option.
vips jpegsave --trellis-quant emits a valid JPEG at original geometry Original / libjpeg-turbo / usage-vips-r14-jpegsave-trellis-quant-flag-roundtrip Passed
Saves a JPEG via vips jpegsave with --trellis-quant (a mozjpeg-style trellis quantisation flag) and confirms the output is a syntactically valid JPEG with SOI/EOI markers and reloads at the input dimensions, exercising the trellis-quant encoder option.
vips jpegload --shrink 4 quarters both JPEG dimensions Original / libjpeg-turbo / usage-vips-r15-jpegload-shrink-four-quarters-dimensions Passed
Saves a 64x48 JPEG via cjpeg from a PPM source and runs it through vips jpegload --shrink 4, then asserts vipsheader reports width=16 and height=12 (each axis quartered), exercising the libjpeg-turbo DCT-domain integer scale-down path through vips.
vips jpegsave --interlace emits a JPEG carrying an SOF2 (FFC2) progressive marker Original / libjpeg-turbo / usage-vips-r15-jpegsave-interlace-sof2-marker Passed
Saves a JPEG via vips jpegsave with --interlace and confirms the output stream contains the FFC2 SOF2 marker, exercising libjpeg-turbo's progressive Huffman encoder path through vips.
vips jpegsave --optimize-coding yields a no-larger file than the default Original / libjpeg-turbo / usage-vips-r15-jpegsave-optimize-coding-no-larger Passed
Encodes the same PPM through vips jpegsave with and without --optimize-coding at constant Q and asserts the optimised output is no larger than the default, exercising libjpeg-turbo's optimise-Huffman path through vips.
vips copy from JPEG to JPEG preserves width and height Original / libjpeg-turbo / usage-vips-r16-copy-jpeg-jpeg-preserves-dims Passed
Encodes a 56x40 PPM via vips jpegsave, then runs vips copy from JPEG to JPEG and asserts the output is JPEG-typed with vipsheader reporting the same width and height as the input, exercising libjpeg-turbo's decode-encode round-trip through vips copy without geometry changes.
vips extract_area pulls a 32x24 subregion at (8,8) out of a 64x48 JPEG Original / libjpeg-turbo / usage-vips-r16-extract-area-half-subregion-jpeg Passed
Encodes a 64x48 PPM as JPEG via vips jpegsave then runs vips extract_area with offset (8,8) and size 32x24 into a new JPEG, asserting the output is JPEG-typed and vipsheader reports width: 32 and height: 24, exercising libjpeg-turbo's decode plus vips's crop into a re-encode.
vips gravity centre into 48x36 canvas yields the requested dimensions Original / libjpeg-turbo / usage-vips-r16-gravity-larger-canvas-correct-dims Passed
Encodes a 24x18 PPM as JPEG then runs vips gravity centre 48 36 into a PNG output, asserting vipsheader reports the canvas dimensions 48x36 and the result is loadable by Pillow as a 48x36 image, exercising libjpeg-turbo decode followed by vips canvas placement.
vips jpegload --shrink 2 halves a 80x40 JPEG to 40x20 via DCT-domain shrink Original / libjpeg-turbo / usage-vips-r16-jpegload-shrink-on-load-two-half-dims Passed
Encodes a generated 80x40 RGB image through vips jpegsave, decodes via vips jpegload --shrink 2, and asserts the resulting image is reported as 40x20 in vipsheader, exercising libjpeg-turbo's shrink-on-load DCT decoder.
vips jpegsave Q=10 emits a strictly smaller file than Q=90 for the same PPM Original / libjpeg-turbo / usage-vips-r16-jpegsave-q-low-vs-high-monotonic Passed
Encodes the same generated PPM through vips jpegsave at Q=10 and Q=90 and asserts the Q=90 output is strictly larger than the Q=10 output, exercising libjpeg-turbo's quantisation scale via the vips --Q control.
vips avg on a solid-128 JPEG returns a value close to 128 Original / libjpeg-turbo / usage-vips-r17-avg-solid-color-equals-input-value Passed
Encodes a 16x16 solid-gray-128 PGM as a grayscale JPEG, then runs vips avg on it and asserts the printed numeric average is between 120 and 136 inclusive (libjpeg-turbo quantisation introduces small drift around the original 128), exercising the avg reducer over a uniform image.
vips colourspace srgb to b-w on a JPEG yields a single-band image Original / libjpeg-turbo / usage-vips-r17-colourspace-srgb-to-bw-one-band Passed
Encodes a 24x16 RGB PPM as JPEG, then runs vips colourspace from srgb to b-w with explicit source-space sRGB, asserting vipsheader reports 1 band and the original dimensions, exercising libjpeg-turbo decode followed by vips colourspace conversion through the srgb-to-bw route.
vips embed centers a small JPEG in a larger canvas with correct dims Original / libjpeg-turbo / usage-vips-r17-embed-centered-larger-canvas-dims Passed
Encodes a 20x16 PPM as JPEG then runs vips embed at offset (10, 8) into a 40x32 canvas, asserting vipsheader reports the canvas dimensions 40x32 and the output is a JPEG-typed file, exercising libjpeg-turbo decode followed by vips embed canvas placement (distinct from r16 gravity which uses the gravity operator).
vips deviate on a solid-gray JPEG returns a small positive standard deviation Original / libjpeg-turbo / usage-vips-r18-deviate-uniform-jpeg-near-zero Passed
Encodes a 16x16 solid-gray-128 PGM as a grayscale JPEG via vips jpegsave then runs vips deviate on it and asserts the printed standard deviation, truncated to an integer, is less than 8 (libjpeg-turbo introduces only small per-pixel drift on a uniform image), exercising the vips deviate reducer on a near-uniform input.
vips extract_band 0 on an RGB JPEG yields a single-band intermediate Original / libjpeg-turbo / usage-vips-r18-extract-band-zero-single-band-jpeg Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave then runs vips extract_band selecting band 0 with n=1, writing to .v output, and asserts vipsheader reports 1 band and the original dimensions, exercising libjpeg-turbo decode followed by vips extract_band on band index 0 (distinct from existing extract-band-jpeg coverage that selects a different band).
vips invert applied twice via .v intermediates preserves dimensions Original / libjpeg-turbo / usage-vips-r18-invert-then-invert-roundtrip-jpeg Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave, runs vips invert twice through .v intermediate files, and asserts vipsheader reports the original 24x16 dimensions and 3 bands on the final output, exercising libjpeg-turbo decode followed by two successive vips invert operations.
vips max on a solid-200 grayscale JPEG returns a value close to 200 Original / libjpeg-turbo / usage-vips-r18-max-solid-color-jpeg Passed
Encodes a 16x16 solid-gray-200 PGM as a grayscale JPEG via vips jpegsave then runs vips max on it and asserts the printed numeric maximum is in the inclusive range [192, 208] (libjpeg-turbo quantisation drift around 200), exercising the vips max reducer over a uniform JPEG image.
vips min on a solid-64 grayscale JPEG returns a value close to 64 Original / libjpeg-turbo / usage-vips-r18-min-solid-color-jpeg Passed
Encodes a 16x16 solid-gray-64 PGM as a grayscale JPEG via vips jpegsave then runs vips min on it and asserts the printed numeric minimum is in the inclusive range [56, 72] (libjpeg-turbo quantisation drift around 64), exercising the vips min reducer over a uniform JPEG image.
vips avg on a solid-32 grayscale JPEG returns a value close to 32 Original / libjpeg-turbo / usage-vips-r19-avg-solid-32-jpeg Passed
Encodes a 16x16 solid-gray-32 PGM as a grayscale JPEG via vips jpegsave then runs vips avg on it and asserts the printed numeric average is in the inclusive range [24, 40] (libjpeg-turbo quantisation drift around the original 32), exercising the vips avg reducer at a low-luma fixture distinct from r10/r17 mid-grey coverage.
vips extract_area cropping the top-left quadrant of a JPEG yields half dims Original / libjpeg-turbo / usage-vips-r19-extract-area-quadrant-dims Passed
Encodes a 40x24 RGB PPM as JPEG via vips jpegsave, runs vips extract_area to crop the top-left 20x12 region into a .v intermediate, and asserts vipsheader reports the cropped dimensions 20x12 and 3 bands on the result, exercising libjpeg-turbo decode followed by vips extract_area on a fixed rectangle.
vips flip horizontal applied twice via .v intermediates preserves dims Original / libjpeg-turbo / usage-vips-r19-flip-horizontal-then-horizontal-dims Passed
Encodes a 32x20 RGB PPM as JPEG via vips jpegsave, runs vips flip --direction horizontal twice through .v intermediates, and asserts vipsheader reports the original 32x20 dimensions and 3 bands on the final output, exercising libjpeg-turbo decode followed by two successive vips horizontal flips.
vips jpegsave --Q 1 produces a strictly smaller file than --Q 95 Original / libjpeg-turbo / usage-vips-r19-jpegsave-q1-vs-q95-smaller Passed
Builds a 48x32 RGB PPM with deterministic pseudo-random bytes, saves it as JPEG via vips jpegsave at --Q 1 and --Q 95 respectively, and asserts the --Q 1 output file is strictly smaller in bytes than the --Q 95 output, exercising libjpeg-turbo's quantisation-table scaling through vips jpegsave's --Q control.
vipsheader on a 24x16 RGB JPEG reports 24x16 and 3 bands Original / libjpeg-turbo / usage-vips-r19-vipsheader-rgb-jpeg-three-bands Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave, runs vipsheader on the resulting JPEG, and asserts the captured header line contains the literal "24x16" dimensions token and the "3 bands" band-count token, exercising libjpeg-turbo decode through vipsheader's metadata report on an RGB fixture.
vips extract_area on a JPEG yields a sub-image of exactly the requested dims Original / libjpeg-turbo / usage-vips-r20-extract-area-strip-roundtrip-jpeg Passed
Encodes a 64x32 PPM to JPEG via vips jpegsave then runs vips extract_area to pull a 20x10 region at offset (5,4), saves it back to JPEG, and asserts vipsheader -f width/height report (20,10), exercising libjpeg-turbo decode followed by vips' bounded sub-region extraction and re-encode.
vips flatten on a 4-band PAM saved as JPEG yields a 3-band JPEG Original / libjpeg-turbo / usage-vips-r20-flatten-rgba-to-jpeg-three-bands Passed
Builds a 24x16 PAM with TUPLTYPE RGB_ALPHA, runs vips flatten to composite alpha against white, and saves the result as JPEG; opens the output via vipsheader -f bands and asserts the band count is exactly 3, exercising libjpeg-turbo's RGB encode path after vips' alpha-flatten conversion.
vips jpegsave to .jpg target then vipsheader reports the correct width Original / libjpeg-turbo / usage-vips-r20-jpegsave-buffer-via-stdout-then-decode Passed
Builds a 48x32 PPM, encodes it via vips jpegsave at default quality, then runs vipsheader -f width on the produced .jpg and asserts the width equals 48, exercising libjpeg-turbo's encode followed by an immediate libjpeg-turbo decode through vipsheader.
vips jpegsave default (no --optimize-coding) is not smaller than --optimize-coding Original / libjpeg-turbo / usage-vips-r20-jpegsave-no-optimize-coding-not-smaller Passed
Encodes the same PPM to JPEG via vips jpegsave twice at Q=85 — once with the default optimize-coding=false and once with --optimize-coding (true) — and asserts the default-mode output size is greater than or equal to the optimize-coding output size, exercising libjpeg-turbo's Huffman optimization toggle through vips' boolean flag.
vips rot d90 then rot d270 on a JPEG restores original (W,H) dimensions Original / libjpeg-turbo / usage-vips-r20-rot90-then-rot270-restores-dims Passed
Encodes a 40x24 PPM to JPEG via vips jpegsave, rotates by 90 degrees, rotates the result by 270 degrees, and asserts the final image's (width,height) match the source (40,24), exercising libjpeg-turbo encode/decode through a vips rotate-and-back round-trip.
vips bandfold on an RGB JPEG folds the width into the band axis Original / libjpeg-turbo / usage-vips-r21-bandfold-jpeg-band-count Passed
Encodes a 32x16 RGB JPEG, decodes/transforms it through vips bandfold, writes the result to a .v file, and asserts vipsheader reports the bands count equals 32*3 = 96 and the width equals 1 - locking in libjpeg-turbo's RGB decode followed by vips's bandfold reshape that converts horizontal pixels into additional bands.
vips colourspace srgb to lab on a JPEG produces a 3-band FLOAT image Original / libjpeg-turbo / usage-vips-r21-colourspace-srgb-to-lab-format-float Passed
Encodes an sRGB 40x32 RGB JPEG, runs vips colourspace target lab to convert to CIELAB, writes the result to a .v file, and asserts vipsheader reports bands=3 and format containing "FLOAT" - locking in libjpeg-turbo's RGB decode feeding vips's CIELAB colour-space conversion which outputs a floating-point representation.
vips falsecolour from a single-band JPEG emits a 3-band JPEG result Original / libjpeg-turbo / usage-vips-r21-falsecolour-from-jpeg-three-bands Passed
Encodes a grayscale 48x32 JPEG via Pillow's L-mode, decodes/transforms it through vips falsecolour, encodes the result back to JPEG, and asserts the produced file has exactly 3 bands - locking in libjpeg-turbo's grayscale decode path feeding vips's false-colour LUT expansion to RGB.
vips hist_find on a JPEG yields a 256x1 histogram image with 3 bands Original / libjpeg-turbo / usage-vips-r21-hist-find-from-jpeg-256x1 Passed
Encodes a 64x48 RGB JPEG, decodes it through vips hist_find, asserts the resulting .v image is exactly 256x1 with 3 bands and that the format string emitted by vipsheader -f format equals VIPS_FORMAT_UINT - locking in libjpeg-turbo's RGB decode followed by vips's per-channel histogram synthesis at its standard 256-bin layout.
vipsthumbnail -s 32x32 on a 96x64 JPEG fits within the 32x32 bounding box Original / libjpeg-turbo / usage-vips-r21-vipsthumbnail-explicit-dimensions Passed
Encodes a 96x64 RGB JPEG via Pillow, runs vipsthumbnail -s 32x32 -o output, then asserts vipsheader reports the resulting JPEG's width is exactly 32 and the height is no more than 32 - locking in vipsthumbnail's WIDTHxHEIGHT bounding-box semantics (existing tests covered scalar size and a different -s ratio).
vips rot 90 swaps JPEG dimensions Original / libjpeg-turbo / usage-vips-r9-affine-rotate-jpeg Passed
Applies vips rot d90 to a non-square JPEG and verifies the resulting JPEG header reports dimensions swapped relative to the source.
vips jpegload reports 3 bands for RGB JPEG Original / libjpeg-turbo / usage-vips-r9-jpegload-bands-rgb Passed
Loads an RGB JPEG with vips jpegload and uses vipsheader to verify the image reports exactly three bands.
vips jpegsave q=90 larger than q=10 Original / libjpeg-turbo / usage-vips-r9-jpegsave-q90-vs-q10-size Passed
Encodes the same source image with vips jpegsave at Q=10 and Q=90 and verifies the higher-quality output is strictly larger on disk.
vips jpegsave with trellis quantisation produces valid JPEG Original / libjpeg-turbo / usage-vips-r9-jpegsave-trellis-quant Passed
Encodes a small image via vips jpegsave with --trellis-quant and confirms the output JPEG decodes back through vipsheader with the expected dimensions.
vips reduce jpeg Original / libjpeg-turbo / usage-vips-reduce-jpeg Passed
vips reduceh JPEG horizontal-only reduction Original / libjpeg-turbo / usage-vips-reduceh-jpeg Passed
Reduces a JPEG horizontally only via vips reduceh and verifies the width shrinks while the height is unchanged.
vips reducev JPEG vertical-only reduction Original / libjpeg-turbo / usage-vips-reducev-jpeg Passed
Reduces a JPEG vertically only via vips reducev and verifies the height shrinks while the width is unchanged.
vips relational_const less threshold on JPEG Original / libjpeg-turbo / usage-vips-relational-const-threshold-jpeg Passed
Encodes a mid-gray PPM as JPEG via cjpeg, applies vips relational_const with the less operator and a threshold of 200 to produce a uchar mask that is 255 wherever the pixel value is below 200, and verifies the mask has matching dimensions and the expected band count.
vips replicate tiles JPEG Original / libjpeg-turbo / usage-vips-replicate-tile-jpeg Passed
Replicates a JPEG into a 2x3 tile grid with vips and verifies the output dimensions via vipsheader -a.
vips doubles JPEG size Original / libjpeg-turbo / usage-vips-resize-double-jpeg Passed
vips rotates JPEG 180 Original / libjpeg-turbo / usage-vips-rot180-jpeg Passed
vips rotates JPEG 270 degrees Original / libjpeg-turbo / usage-vips-rot270-jpeg Passed
vips rotates JPEG Original / libjpeg-turbo / usage-vips-rotate-jpeg Passed
vips shrink-on-load JPEG Original / libjpeg-turbo / usage-vips-shrink-jpeg Passed
vips smartcrop JPEG Original / libjpeg-turbo / usage-vips-smartcrop-jpeg Passed
Crops a JPEG to a smaller window via vips smartcrop and verifies the output dimensions and JPEG magic.
vips smartcrop interesting=low JPEG Original / libjpeg-turbo / usage-vips-smartcrop-low-jpeg Passed
Crops a JPEG to a smaller window using vips smartcrop with interesting=low (the least salient region) and verifies the output JPEG has the requested dimensions and JPEG magic.
vips stats jpeg Original / libjpeg-turbo / usage-vips-stats-jpeg Passed
vips subsample 2x JPEG Original / libjpeg-turbo / usage-vips-subsample-2x-jpeg Passed
Subsamples a JPEG by integer factors of 2 in x and y via vips subsample and verifies the output halves the dimensions reported by vipsheader -a.
vips thumbnail jpeg Original / libjpeg-turbo / usage-vips-thumbnail-jpeg Passed
vipsheader all metadata jpeg Original / libjpeg-turbo / usage-vips-vipsheader-all-jpeg Passed
vipsheader -f single field on JPEG Original / libjpeg-turbo / usage-vips-vipsheader-format-jpeg Passed
Uses vipsheader -f to fetch individual header fields (width, height, bands, vips-loader) from a JPEG one at a time and verifies each matches the expected value with no other output present.
vips zoom 2x JPEG Original / libjpeg-turbo / usage-vips-zoom-2x-jpeg Passed
Zooms a JPEG by an integer factor of 2 with vips zoom and verifies that the output width and height doubled via vipsheader -a.
vips rot d90 rotates JPEG by 90 degrees Original / libjpeg-turbo / usage-vipsedit-orientation-jpeg Passed
Saves a JPEG via cjpeg with non-square dimensions (4x3), runs vips rot d90 to rotate it 90 degrees clockwise, and verifies vipsheader reports swapped dimensions (3x4) on the rotated output while the file remains a valid JPEG.
vipsthumbnail --linear JPEG output Original / libjpeg-turbo / usage-vipsthumbnail-linear-jpeg Passed
Generates a JPEG thumbnail with vipsthumbnail --linear (linear-light shrink) at a 16-pixel size and confirms the output is a JPEG whose long edge equals 16, exercising libjpeg-turbo's decode + re-encode through the linear pipeline.
CVE-2017-15232 libjpeg-turbo regression Original / libjpeg-turbo / cve-2017-15232 Passed
Asserts that djpeg with color-quantization enabled handles a small JPEG without crashing during scanline output, the historic surface for the jpeg_skip_scanlines NULL dereference.
CVE-2018-1152 libjpeg-turbo regression Original / libjpeg-turbo / cve-2018-1152 Passed
Asserts that tjLoadImage rejects a malformed BMP whose width drives bytes-per-row arithmetic to overflow without raising a divide-by-zero floating-point exception.
CVE-2018-11813 libjpeg-turbo regression Original / libjpeg-turbo / cve-2018-11813 Passed
Asserts that cjpeg's Targa reader handles an input whose Targa header is valid but whose pixel data is truncated without entering a large output-amplification loop.
CVE-2019-13960 libjpeg-turbo regression Original / libjpeg-turbo / cve-2019-13960 Passed
Asserts that djpeg rejects a truncated progressive JPEG payload in bounded time instead of consuming excessive memory while parsing crafted progressive-scan structure.
CVE-2020-35538 libjpeg-turbo regression Original / libjpeg-turbo / cve-2020-35538 Passed
Asserts that djpeg decodes a 4:2:0 subsampled JPEG with merged upsampling and color conversion enabled without crashing during scanline copy, the surface that triggered the jpeg_skip_scanlines NULL dereference.
CVE-2021-20205 libjpeg-turbo regression Original / libjpeg-turbo / cve-2021-20205 Passed
Asserts that cjpeg's GIF reader rejects a malformed GIF whose declared image width is zero without raising a divide-by-zero exception during conversion.
cjpeg and djpeg round trip Port / libjpeg-turbo / cjpeg-djpeg-roundtrip Passed
jpegtran image transform Port / libjpeg-turbo / jpegtran-transform Passed
Malformed JPEG input handling Port / libjpeg-turbo / malformed-jpeg-handling Passed
Progressive grayscale conversion Port / libjpeg-turbo / progressive-grayscale-conversion Passed
TurboJPEG API compile smoke Port / libjpeg-turbo / turbojpeg-api-smoke Passed
Pillow add mirror JPEG Port / libjpeg-turbo / usage-python3-pil-add-mirror-jpeg Passed
Uses Pillow ImageChops.add on a generated JPEG and its mirrored copy and verifies the summed pixel values before round-tripping.
Pillow add_modulo mirror JPEG Port / libjpeg-turbo / usage-python3-pil-add-modulo-mirror-jpeg Passed
Uses Pillow ImageChops.add_modulo on a generated JPEG and its mirrored copy and verifies the modular per-channel sums before round-tripping.
python PIL autocontrast JPEG Port / libjpeg-turbo / usage-python3-pil-autocontrast-jpeg Passed
Pillow splits JPEG bands Port / libjpeg-turbo / usage-python3-pil-band-split-jpeg Passed
Pillow blend mirror JPEG Port / libjpeg-turbo / usage-python3-pil-blend-mirror-jpeg Passed
Blends a generated JPEG with its mirrored copy in Pillow and verifies the blended pixel average before round-tripping.
Pillow blend alpha zero JPEG Port / libjpeg-turbo / usage-python3-pil-blend-zero-mirror-jpeg Passed
Uses Pillow Image.blend with alpha zero on a generated JPEG and verifies the result equals the original image pixel-for-pixel before round-tripping.
python PIL border expand JPEG Port / libjpeg-turbo / usage-python3-pil-border-expand-jpeg Passed
python PIL canvas paste JPEG Port / libjpeg-turbo / usage-python3-pil-canvas-paste-jpeg Passed
Pillow handles CMYK JPEG Port / libjpeg-turbo / usage-python3-pil-cmyk-jpeg Passed
Pillow composite halves JPEG Port / libjpeg-turbo / usage-python3-pil-composite-halves-jpeg Passed
Composites a generated JPEG with its mirrored copy through a half-image mask in Pillow and verifies left and right pixels come from different sources.
python PIL contain JPEG Port / libjpeg-turbo / usage-python3-pil-contain-jpeg Passed
Pillow converts RGB JPEG to CMYK Port / libjpeg-turbo / usage-python3-pil-convert-rgb-to-cmyk-jpeg Passed
Reads an RGB JPEG with Pillow, calls Image.convert("CMYK"), saves the CMYK image as JPEG, and verifies the reopened image reports CMYK mode and four bands.
Pillow crops JPEG Port / libjpeg-turbo / usage-python3-pil-crop-jpeg Passed
Pillow darker mirror JPEG Port / libjpeg-turbo / usage-python3-pil-darker-mirror-jpeg Passed
Uses Pillow ImageChops.darker on a generated JPEG and its mirrored copy and verifies the per-channel minima before round-tripping.
Pillow difference mirror JPEG Port / libjpeg-turbo / usage-python3-pil-difference-mirror-jpeg Passed
Uses Pillow ImageChops.difference on a generated JPEG and its mirrored copy and verifies the absolute per-channel difference values before round-tripping.
Pillow ImageChops difference between identical JPEGs Port / libjpeg-turbo / usage-python3-pil-difference-zero-jpeg Passed
Saves a JPEG twice with identical settings and verifies ImageChops.difference yields an all-zero image (extrema (0,0) per band).
Pillow duplicate darker JPEG Port / libjpeg-turbo / usage-python3-pil-duplicate-darker-jpeg Passed
Uses Pillow ImageChops.darker on a generated JPEG against its own copy and verifies the result equals the original pixel values before round-tripping.
Pillow Image.entropy on JPEG Port / libjpeg-turbo / usage-python3-pil-entropy-jpeg Passed
Saves a high-variance JPEG and a flat JPEG with Pillow, reopens both and verifies Image.entropy returns a finite non-negative value and that the high-variance image has strictly greater entropy than the flat image.
python PIL equalize JPEG Port / libjpeg-turbo / usage-python3-pil-equalize-jpeg Passed
Pillow reads JPEG metadata Port / libjpeg-turbo / usage-python3-pil-exifless-jpeg Passed
python PIL blur filter JPEG Port / libjpeg-turbo / usage-python3-pil-filter-blur-jpeg Passed
python PIL fit JPEG Port / libjpeg-turbo / usage-python3-pil-fit-jpeg Passed
Pillow grayscale darker mirror JPEG Port / libjpeg-turbo / usage-python3-pil-flatten-l-mirror-jpeg Passed
Converts a generated JPEG to L mode and darker-merges with its mirrored copy, verifying the minimum luminance value before round-tripping.
Pillow flips JPEG vertically Port / libjpeg-turbo / usage-python3-pil-flip-topbottom-jpeg Passed
Pillow flip twice identity JPEG Port / libjpeg-turbo / usage-python3-pil-flip-twice-identity-jpeg Passed
Flips a generated JPEG twice with ImageOps.flip and verifies the result matches the original pixel-for-pixel before round-tripping.
Pillow Image.fromarray (np-like) JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-fromarray-jpeg-roundtrip Passed
Builds an image from a bytes subclass exposing __array_interface__ via Image.fromarray, saves as JPEG, and verifies the roundtrip via PIL and file magic.
Pillow Image.frombytes round-trips JPEG Port / libjpeg-turbo / usage-python3-pil-frombytes-jpeg Passed
Decodes a JPEG with Pillow into raw RGB bytes via Image.tobytes, reconstructs the image with Image.frombytes, saves the result back as JPEG and verifies the round-tripped image preserves mode and dimensions.
Pillow Image.getbbox on JPEG Port / libjpeg-turbo / usage-python3-pil-getbbox-jpeg Passed
Saves a JPEG with a non-zero rectangular region on a black canvas, reopens it with Pillow and checks Image.getbbox returns the bounding box of non-zero pixels.
python PIL getextrema JPEG Port / libjpeg-turbo / usage-python3-pil-getextrema-jpeg Passed
Pillow grayscale add JPEG Port / libjpeg-turbo / usage-python3-pil-grayscale-add-jpeg Passed
Converts a generated JPEG to L mode and adds its mirrored copy with ImageChops.add, verifying the saturated luminance sum before saving.
Pillow grayscale jpeg Port / libjpeg-turbo / usage-python3-pil-grayscale-jpeg Passed
python PIL histogram JPEG Port / libjpeg-turbo / usage-python3-pil-histogram-jpeg Passed
Pillow histogram length 768 for RGB JPEG Port / libjpeg-turbo / usage-python3-pil-histogram-rgb-length-jpeg Passed
Loads an RGB JPEG and verifies Image.histogram() returns 768 entries (256 per channel) and that the totals sum to width*height per band.
Pillow Image.copy isolation on JPEG Port / libjpeg-turbo / usage-python3-pil-image-copy-isolation-jpeg Passed
Opens a JPEG, copies it, mutates the copy via putpixel, and verifies the original buffer is unaffected and roundtrips identically.
Pillow Image.copy then paste subimage on JPEG Port / libjpeg-turbo / usage-python3-pil-image-copy-paste-jpeg Passed
Opens a JPEG, copies it, pastes a smaller solid color subimage into the copy at a known offset, saves to JPEG, and verifies the pasted region matches the patch color while the untouched region matches the original background.
Pillow ImageColor.getrgb parsing for JPEG fill Port / libjpeg-turbo / usage-python3-pil-imagecolor-getrgb-jpeg Passed
Uses ImageColor.getrgb to parse common color string forms (named, hex short, hex long, rgb function), creates a JPEG filled with each parsed color, and verifies a roundtrip getpixel matches the parsed RGB tuple.
Pillow ImageDraw.ellipse on JPEG Port / libjpeg-turbo / usage-python3-pil-imagedraw-ellipse-jpeg Passed
Opens a JPEG, draws a filled ellipse with ImageDraw.ellipse, saves the result back to JPEG, and verifies the ellipse interior is the fill color while a corner outside the ellipse stays near the original background.
Pillow ImageDraw line on JPEG Port / libjpeg-turbo / usage-python3-pil-imagedraw-line-jpeg Passed
Opens a JPEG, draws a colored line with ImageDraw.line, saves back to JPEG, and verifies dimensions, format, and that pixels along the line differ from the surrounding background.
Pillow ImageDraw.point individual pixels on JPEG Port / libjpeg-turbo / usage-python3-pil-imagedraw-point-pixels-jpeg Passed
Opens a JPEG, plots individual pixels with ImageDraw.point at known coordinates using a distinctive color, saves to JPEG, and verifies that plotted coordinates differ from the surrounding background while unplotted pixels remain near the background.
Pillow ImageDraw.rectangle outline and fill on JPEG Port / libjpeg-turbo / usage-python3-pil-imagedraw-rectangle-outline-fill-jpeg Passed
Opens a JPEG, draws a rectangle with both outline and fill colors via ImageDraw.rectangle, saves the result back to JPEG, and verifies an interior pixel matches the fill color and an edge pixel matches the outline color.
Pillow ImageDraw JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-imagedraw-roundtrip-jpeg Passed
Draws a filled rectangle on a JPEG via ImageDraw, saves, and verifies the painted pixel value roundtrips.
Pillow ImageDraw.text on JPEG Port / libjpeg-turbo / usage-python3-pil-imagedraw-text-jpeg Passed
Renders text onto a JPEG with ImageDraw using the default font and verifies that drawn pixels darken the canvas after JPEG roundtrip.
Pillow ImageEnhance.Brightness JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-imageenhance-brightness-jpeg Passed
Applies ImageEnhance.Brightness factor 1.0 (identity) and 0.0 (black) to a JPEG and verifies behavior plus a JPEG roundtrip.
Pillow ImageEnhance.Color factor 0.0 yields grayscale Port / libjpeg-turbo / usage-python3-pil-imageenhance-color-zero-jpeg Passed
Applies ImageEnhance.Color(0.0) to an RGB JPEG and verifies all three channels collapse to the same per-pixel luminance, surviving a JPEG roundtrip.
Pillow ImageEnhance.Contrast factor 0.0 collapses to uniform gray Port / libjpeg-turbo / usage-python3-pil-imageenhance-contrast-zero-jpeg Passed
Applies ImageEnhance.Contrast(0.0) to a JPEG and verifies the result is a uniform gray image whose mean equals the source mean after a JPEG roundtrip.
Pillow ImageEnhance.Sharpness JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-imageenhance-sharpness-jpeg Passed
Applies ImageEnhance.Sharpness with identity, blur, and sharpen factors to a JPEG and verifies that 1.0 is closest to the source while 0.0 and 2.0 each diverge in opposing directions, surviving a JPEG roundtrip.
Pillow ImageMath.eval expression on JPEG Port / libjpeg-turbo / usage-python3-pil-imagemath-eval-jpeg Passed
Loads a JPEG, splits its R and G bands, evaluates a per-pixel expression with ImageMath.eval, and verifies the resulting band roundtrips through JPEG.
Pillow ImageOps.cover on JPEG Port / libjpeg-turbo / usage-python3-pil-imageops-cover-jpeg Passed
Opens a JPEG, calls ImageOps.cover to fit a target box while preserving aspect ratio, saves to JPEG, and verifies the resulting image fully covers the target dimensions in at least one axis.
Pillow ImageOps.crop border removal on JPEG Port / libjpeg-turbo / usage-python3-pil-imageops-crop-border-jpeg Passed
Opens a JPEG, calls ImageOps.crop with a uniform border value to remove pixels from each edge, saves to JPEG, and verifies the resulting size shrinks by twice the border in each axis.
Pillow ImageOps.invert RGB JPEG Port / libjpeg-turbo / usage-python3-pil-imageops-invert-rgb-jpeg Passed
Applies ImageOps.invert to an RGB JPEG and verifies a representative pixel inverts via 255 minus channel.
Pillow ImageOps.scale on JPEG Port / libjpeg-turbo / usage-python3-pil-imageops-scale-jpeg Passed
Opens a JPEG, applies ImageOps.scale with a 2.0 factor, saves the result back to JPEG, and verifies the output size doubles in both dimensions.
Pillow ImageStat stddev on JPEG Port / libjpeg-turbo / usage-python3-pil-imagestat-stddev-jpeg Passed
Decodes a JPEG with Pillow and verifies ImageStat per-channel mean and stddev match a manual computation.
Pillow invert generated JPEG Port / libjpeg-turbo / usage-python3-pil-invert-generated-jpeg Passed
Uses Pillow ImageOps.invert on a generated JPEG and verifies the inverted channel values before round-tripping.
Pillow invert mirror lighter JPEG Port / libjpeg-turbo / usage-python3-pil-invert-mirror-mirror-jpeg Passed
Inverts a mirrored JPEG with ImageOps.invert and lighter-merges with the original, verifying the per-channel lighter pixel values before round-tripping.
Pillow JPEG arithmetic coding rejected Port / libjpeg-turbo / usage-python3-pil-jpeg-arithmetic-coding-rejected Passed
Asks Pillow to encode JPEG with arithmetic=True and confirms libjpeg-turbo refuses (no arith encoder), so Pillow raises an exception.
Pillow baseline vs progressive JPEG SOF marker Port / libjpeg-turbo / usage-python3-pil-jpeg-baseline-vs-progressive-size Passed
Saves the same image as baseline and progressive JPEG via Pillow and confirms the SOF0 marker appears for baseline and SOF2 for progressive.
Pillow JPEG BytesIO open Port / libjpeg-turbo / usage-python3-pil-jpeg-bytesio-open-batch11 Passed
Pillow CMYK JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-cmyk-roundtrip-batch11 Passed
Pillow JPEG comment roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-comment-roundtrip Passed
Pillow JPEG DPI roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-dpi-roundtrip-batch11 Passed
Pillow JPEG draft load Port / libjpeg-turbo / usage-python3-pil-jpeg-draft-load-batch11 Passed
Pillow JPEG draft 1/2 scaled decode Port / libjpeg-turbo / usage-python3-pil-jpeg-draft-scale-ratio Passed
Decodes a 64x64 JPEG with Pillow draft mode at scale 1/2 and verifies libjpeg-turbo returns a 32x32 raster via DCT scaling.
Pillow JPEG EXIF orientation Port / libjpeg-turbo / usage-python3-pil-jpeg-exif-orientation-batch11 Passed
Pillow JPEG exif_transpose rotate Port / libjpeg-turbo / usage-python3-pil-jpeg-exif-transpose-rotate Passed
Embeds EXIF Orientation=6 in a JPEG and verifies ImageOps.exif_transpose rotates dimensions accordingly.
Pillow JPEG bands Port / libjpeg-turbo / usage-python3-pil-jpeg-getbands-batch11 Passed
Pillow JPEG getexif orientation roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-getexif-orientation-write Passed
Saves a JPEG with an explicit EXIF blob carrying ImageDescription and Orientation tags via Pillow and verifies getexif() returns the same tag values on reopen.
Pillow grayscale JPEG SOF component count Port / libjpeg-turbo / usage-python3-pil-jpeg-grayscale-sof-components Passed
Saves an L-mode JPEG via Pillow and verifies the SOF0 marker declares exactly one component (Nf=1) for grayscale.
Pillow JPEG ICC profile roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-icc-profile-roundtrip Passed
Saves a JPEG with a synthetic icc_profile bytes payload and verifies Pillow re-exposes the same bytes via info on reopen.
Pillow JPEG ImageFile.MAXBLOCK bump Port / libjpeg-turbo / usage-python3-pil-jpeg-imagefile-maxblock-bump Passed
Saves a 384x384 JPEG with a long ICC payload after raising ImageFile.MAXBLOCK so Pillow can hand the libjpeg-turbo encoder a single contiguous output buffer.
Pillow JPEG info dpi Port / libjpeg-turbo / usage-python3-pil-jpeg-info-dpi Passed
Pillow JPEG progressive flag Port / libjpeg-turbo / usage-python3-pil-jpeg-info-progressive Passed
Pillow grayscale JPEG roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-l-mode-roundtrip-batch11 Passed
Pillow optimized JPEG save Port / libjpeg-turbo / usage-python3-pil-jpeg-optimize-save-batch11 Passed
Pillow progressive JPEG info Port / libjpeg-turbo / usage-python3-pil-jpeg-progressive-info-batch11 Passed
Pillow JPEG qtables=keep roundtrip Port / libjpeg-turbo / usage-python3-pil-jpeg-qtables-keep-roundtrip Passed
Reencodes a JPEG with qtables=keep via Pillow and verifies the quantization tables match the source byte-for-byte.
Pillow JPEG quality 95 vs 40 size delta Port / libjpeg-turbo / usage-python3-pil-jpeg-quality-size-delta Passed
Encodes the same noisy 256x256 image at quality=95 and quality=40 with Pillow and asserts the high-quality output is materially larger, exercising libjpeg-turbo's quantization scaling.
Pillow JPEG quantization table Port / libjpeg-turbo / usage-python3-pil-jpeg-quantization-table-batch11 Passed
Pillow JPEG restart marker interval Port / libjpeg-turbo / usage-python3-pil-jpeg-restart-marker-interval Passed
Saves a JPEG with restart_marker=8 via Pillow and verifies an RST/DRI structure is encoded by scanning the byte stream for 0xFFDD or 0xFFD0-D7.
Pillow JPEG 4:4:4 vs 4:2:0 size Port / libjpeg-turbo / usage-python3-pil-jpeg-subsampling-444-vs-420-size Passed
Saves the same image at the same quality with subsampling=0 (4:4:4) and subsampling=2 (4:2:0) via Pillow and asserts the 4:4:4 output is larger, confirming libjpeg-turbo honors the chroma subsampling selector.
Pillow JPEG subsampling keep Port / libjpeg-turbo / usage-python3-pil-jpeg-subsampling-keep Passed
Saves a JPEG with subsampling=0 via Pillow and verifies the chroma layout via JpegImagePlugin.get_sampling.
Pillow JPEG tile decoder descriptor Port / libjpeg-turbo / usage-python3-pil-jpeg-tile-decoder-info Passed
Opens a JPEG with Pillow without forcing a load and verifies im.tile advertises a single ('jpeg', ...) decoder tile spanning the full image, the wiring Pillow uses to drive libjpeg-turbo.
Pillow JPEG to PNG Port / libjpeg-turbo / usage-python3-pil-jpeg-to-png Passed
Pillow JpegImagePlugin.MARKER table inspection Port / libjpeg-turbo / usage-python3-pil-jpegimageplugin-marker-jpeg Passed
Loads the JpegImagePlugin.MARKER table and verifies a JPEG's actual SOI/SOF/DQT/DHT/EOI marker bytes match the table's known marker IDs.
python PIL L mode JPEG Port / libjpeg-turbo / usage-python3-pil-l-mode-jpeg Passed
Pillow lighter mirror JPEG Port / libjpeg-turbo / usage-python3-pil-lighter-mirror-jpeg Passed
Uses Pillow ImageChops.lighter on a generated JPEG and its mirrored copy and verifies the per-channel maxima before round-tripping.
Pillow opens JPEG from memory Port / libjpeg-turbo / usage-python3-pil-memory-open-jpeg Passed
Pillow mirrors JPEG Port / libjpeg-turbo / usage-python3-pil-mirror-jpeg Passed
Pillow mirror twice identity JPEG Port / libjpeg-turbo / usage-python3-pil-mirror-twice-identity-jpeg Passed
Mirrors a generated JPEG twice with ImageOps.mirror and verifies the result matches the original pixel-for-pixel before round-tripping.
Pillow multiply mirror JPEG Port / libjpeg-turbo / usage-python3-pil-multiply-mirror-jpeg Passed
Uses Pillow ImageChops.multiply on a generated JPEG and its mirrored copy and verifies the multiplied pixel values before round-tripping.
python PIL offset JPEG Port / libjpeg-turbo / usage-python3-pil-offset-jpeg Passed
Pillow open jpeg Port / libjpeg-turbo / usage-python3-pil-open-jpeg Passed
Pillow optimized JPEG Port / libjpeg-turbo / usage-python3-pil-optimize-jpeg Passed
python PIL pad JPEG Port / libjpeg-turbo / usage-python3-pil-pad-jpeg Passed
Pillow pastes JPEG onto canvas Port / libjpeg-turbo / usage-python3-pil-paste-canvas-jpeg Passed
Pillow Image.point lambda 255-x JPEG Port / libjpeg-turbo / usage-python3-pil-point-invert-jpeg Passed
Applies Image.point with a 255-x lookup to invert a JPEG and verifies pixel values match the manual inversion.
Pillow Image.point mode change to 1 Port / libjpeg-turbo / usage-python3-pil-point-mode-1-jpeg Passed
Loads a grayscale JPEG, applies Image.point with a threshold lookup and explicit mode "1", and verifies the result is a 1-bit Pillow image with the expected size.
Pillow point offset JPEG Port / libjpeg-turbo / usage-python3-pil-point-offset-jpeg Passed
Applies a point-wise channel offset to a JPEG with Pillow and verifies the transformed image remains decodable.
python PIL posterize JPEG Port / libjpeg-turbo / usage-python3-pil-posterize-jpeg Passed
Pillow progressive JPEG load Port / libjpeg-turbo / usage-python3-pil-progressive-jpeg Passed
Pillow saves JPEG quality Port / libjpeg-turbo / usage-python3-pil-quality-jpeg Passed
python PIL quantize JPEG Port / libjpeg-turbo / usage-python3-pil-quantize-jpeg Passed
Pillow exposes JFIF version on JPEG load Port / libjpeg-turbo / usage-python3-pil-r10-jpeg-jfif-version Passed
Saves a JPEG with Pillow then reopens and asserts info['jfif'], info['jfif_version'], and info['jfif_unit'] are populated as expected for a JFIF/APP0 marker.
Pillow JPEG keep_rgb encodes component IDs as R G B Port / libjpeg-turbo / usage-python3-pil-r10-jpeg-keep-rgb-component-ids Passed
Saves a JPEG with keep_rgb=True via Pillow and parses the SOF0 marker to confirm the three component IDs are 0x52, 0x47, 0x42 ('R', 'G', 'B') instead of the default 1, 2, 3 (YCbCr).
Pillow LOAD_TRUNCATED_IMAGES decodes a truncated JPEG Port / libjpeg-turbo / usage-python3-pil-r10-jpeg-load-truncated-flag Passed
Saves a JPEG, drops the trailing bytes (no EOI), then decodes once with ImageFile.LOAD_TRUNCATED_IMAGES=True and once without. The flagged decode succeeds and produces an image with the expected dimensions; the unflagged decode raises OSError.
Pillow JPEG byte stream begins with SOI and ends with EOI Port / libjpeg-turbo / usage-python3-pil-r10-jpeg-soi-eoi-markers Passed
Saves a JPEG via Pillow and validates the byte stream framing: opens with FFD8 (SOI) and the trailing two bytes are FFD9 (EOI).
Pillow Image.thumbnail with reducing_gap downsizes JPEG Port / libjpeg-turbo / usage-python3-pil-r10-jpeg-thumbnail-reducing-gap Passed
Loads a 256x192 JPEG and calls Image.thumbnail((64, 64), reducing_gap=2.0). Confirms the resulting image fits inside the box, preserves aspect ratio, and roundtrips back to a valid JPEG.
Pillow reports format=JPEG after opening a saved JPEG Port / libjpeg-turbo / usage-python3-pil-r11-jpeg-format-attribute Passed
Saves a synthetic RGB image with Pillow as JPEG, reopens it, and asserts that Image.format equals "JPEG" — confirming the JpegImagePlugin probe correctly identifies the file by its SOI marker rather than its filename suffix.
ImageChops.add of a JPEG with itself preserves geometry through encode Port / libjpeg-turbo / usage-python3-pil-r11-jpeg-imagechops-add-roundtrip Passed
Loads a JPEG, calls ImageChops.add(im, im, scale=2) to combine the image with itself, saves the result as JPEG, reopens it, and asserts the geometry, mode, and JPEG format survive the channel arithmetic plus encode/decode roundtrip.
ImageOps.expand grows a JPEG by symmetric border on every side Port / libjpeg-turbo / usage-python3-pil-r11-jpeg-imageops-expand-border Passed
Loads a JPEG, expands it by an explicit pixel border using ImageOps.expand with a black fill, re-saves as JPEG, and asserts the new dimensions equal the original plus 2 * border on each axis.
ImageOps.invert on a JPEG roundtrips through libjpeg encode and decode Port / libjpeg-turbo / usage-python3-pil-r11-jpeg-imageops-invert-roundtrip Passed
Opens a saved JPEG, applies ImageOps.invert to flip every channel, re-saves as JPEG, reopens the inverted file, and asserts the geometry and mode are preserved across the encode/decode cycle.
Pillow im.tile lists the jpeg decoder before load Port / libjpeg-turbo / usage-python3-pil-r11-jpeg-tile-decoder-name Passed
Opens a saved JPEG without calling load() and asserts that im.tile is a non-empty list whose first entry's decoder name is "jpeg" — confirming Pillow wires the libjpeg-turbo decoder for files identified as JPEG.
Pillow JPEG comment= argument round-trips through info["comment"] Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-comment-roundtrip Passed
Saves a JPEG with a custom comment via Pillow's comment= argument and reopens to confirm im.info["comment"] equals the same bytes, exercising the COM (FFFE) marker writer and reader.
Pillow JPEG save of an L-mode image reloads as L-mode JPEG Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-grayscale-mode-l-roundtrip Passed
Builds an 8-bit grayscale (L-mode) Pillow image, saves it as JPEG, and reopens to confirm the reloaded image still reports mode == "L" and the SOF marker advertises a single component.
Pillow JPEG save optimize=True is no larger than the unoptimized save Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-optimize-shrinks-output Passed
Saves the same Pillow image twice at quality=80 with optimize=True and optimize=False, and asserts the optimized output is no larger than the unoptimized one (and both are valid JPEGs).
Pillow JPEG progressive=True writes an SOF2 (FFC2) marker Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-progressive-marker-sof2 Passed
Saves a JPEG with Pillow progressive=True and confirms the byte stream contains an SOF2 (FFC2) marker (progressive-mode start-of-frame) and not the SOF0 (FFC0) baseline marker.
Pillow JPEG save quality=10 yields a smaller file than quality=95 Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-quality-low-vs-high-size Passed
Saves the same Pillow image at quality=10 and quality=95 and asserts the low-quality file is strictly smaller, exercising the libjpeg-turbo lossy quality scale via Pillow's encoder.
Pillow JPEG subsampling=0 (4:4:4) reports 4:4:4 on reload Port / libjpeg-turbo / usage-python3-pil-r12-jpeg-subsampling-keyword-444 Passed
Saves a JPEG with subsampling=0 (which Pillow maps to 4:4:4 / no chroma subsampling) and re-opens to confirm JpegImagePlugin.get_sampling returns the (1,1,1,1,1,1) tuple corresponding to 4:4:4.
Pillow JPEG save of a CMYK image writes a 4-component SOF marker Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-cmyk-four-components Passed
Builds a CMYK Pillow image, saves as JPEG, and parses the SOF marker to confirm Nf == 4 components, exercising the libjpeg-turbo 4-channel CMYK encode path.
Pillow JPEG draft mode shrinks a 64x32 image to no more than half size Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-draft-half-load Passed
Saves a 64x32 JPEG via Pillow then reopens with Image.draft("RGB", (32, 16)) before load() and asserts the loaded image's width and height are at most 32x16, exercising the libjpeg-turbo DCT-domain scale-down path.
Pillow JPEG exif= argument round-trips through info["exif"] Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-exif-roundtrip-bytes Passed
Builds a minimal Exif blob via PIL.Image.Exif, saves a JPEG with that exif=... payload, and asserts the reopened JPEG exposes the same Orientation tag value through info["exif"]/getexif(), exercising the APP1 Exif marker writer/reader.
Pillow JPEG icc_profile= writes an APP2 ICC_PROFILE segment Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-icc-profile-app2-marker Passed
Saves a JPEG via Pillow with a synthetic icc_profile bytes payload and asserts the encoded byte stream contains the APP2 marker followed by the "ICC_PROFILE" identifier, exercising the libjpeg-turbo APP2 ICC writer.
Pillow JPEG default save emits a JFIF APP0 segment Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-jfif-app0-marker Passed
Saves a default RGB JPEG via Pillow and asserts the encoded byte stream contains the APP0 marker (FFE0) followed by the "JFIF" identifier, exercising libjpeg-turbo's default JFIF header writer.
Pillow JPEG subsampling=1 (4:2:2) reports 4:2:2 on reload Port / libjpeg-turbo / usage-python3-pil-r13-jpeg-subsampling-keyword-422 Passed
Saves a JPEG with subsampling=1 (Pillow's 4:2:2 mode) and re-opens to confirm JpegImagePlugin.get_sampling returns 1, exercising the libjpeg-turbo chroma 4:2:2 sampling factor encode/decode path.
Pillow JPEG exif=Orientation=6 round-trips through im.getexif() Port / libjpeg-turbo / usage-python3-pil-r14-jpeg-exif-orientation-roundtrip-six Passed
Saves a JPEG with an Exif Orientation tag (0x0112) set to 6 and re-opens to confirm im.getexif()[0x0112] == 6 on read-back, exercising the libjpeg-turbo APP1 Exif segment writer/reader.
Pillow JPEG save of an L-mode image writes a 1-component SOF marker Port / libjpeg-turbo / usage-python3-pil-r14-jpeg-l-mode-sof-one-component Passed
Builds a Pillow L-mode (grayscale) image, saves as JPEG, and parses the SOF marker to confirm Nf == 1 component, exercising the libjpeg-turbo Y-only single-channel encode path.
Pillow JPEG save optimize=True yields a no-larger file than default Port / libjpeg-turbo / usage-python3-pil-r14-jpeg-optimize-vs-default-monotonic-size Passed
Saves the same Pillow image as JPEG twice — once with optimize=True and once without — and asserts the optimised output is no larger than the default output, exercising libjpeg-turbo's optimise-Huffman path through Pillow.
Pillow JPEG save quality=95 emits a JFIF APP0 marker Port / libjpeg-turbo / usage-python3-pil-r14-jpeg-quality-95-jfif-app0-marker Passed
Saves an RGB JPEG via Pillow at quality=95 and confirms the encoded byte stream contains the FFE0 APP0 marker followed by the literal "JFIF\0" identifier, exercising libjpeg-turbo's JFIF header writer at high quality.
Pillow Image.thumbnail then JPEG save shrinks geometry below the cap Port / libjpeg-turbo / usage-python3-pil-r14-jpeg-thumbnail-resamples-and-saves Passed
Loads a 96x72 RGB JPEG, calls Image.thumbnail((48, 48)) (which preserves aspect ratio while capping each axis), saves the result as JPEG, and asserts the reloaded image has width<=48 and height<=48 with both dimensions strictly less than the source, exercising the Pillow resample-then-encode pipeline.
Pillow JPEG save comment= round-trips through im.info["comment"] Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-comment-roundtrip-info Passed
Saves an RGB JPEG via Pillow with comment=b"hello-r15" and re-opens to confirm im.info["comment"] equals the original bytes, exercising libjpeg-turbo's COM segment writer/reader through Pillow.
Pillow JPEG save dpi=(150, 150) round-trips through im.info["dpi"] Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-dpi-roundtrip-150x150 Passed
Saves an RGB JPEG via Pillow with dpi=(150, 150) and re-opens to confirm im.info["dpi"] returns a 2-tuple whose values are within 1 unit of (150, 150), exercising libjpeg-turbo's JFIF density field writer/reader through Pillow.
Pillow JPEG save progressive=True writes an SOF2 (FFC2) marker with no SOF0 Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-progressive-true-sof2-marker Passed
Saves an RGB JPEG via Pillow with progressive=True and confirms the encoded byte stream contains the FFC2 SOF2 marker but no FFC0 SOF0 marker, exercising libjpeg-turbo's progressive Huffman encoder path through Pillow.
Pillow JPEG save quality=1 yields a strictly smaller file than quality=95 Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-quality-zero-vs-default-monotonic-size Passed
Saves the same Pillow image as JPEG twice — once at quality=1 and once at quality=95 — and asserts the q1 output is strictly smaller than the q95 output, exercising libjpeg-turbo's quality-driven byte-size monotonicity at the low extreme.
Pillow JPEG save of an RGB image writes a 3-component SOF marker Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-rgb-mode-three-components Passed
Builds an RGB Pillow image, saves as JPEG, and parses the SOF marker to confirm Nf == 3 components, exercising the libjpeg-turbo standard YCbCr-derived 3-channel encode path.
Pillow JPEG save begins with SOI (FFD8) and ends with EOI (FFD9) Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-soi-eoi-bracket Passed
Saves an RGB JPEG via Pillow at quality=85 and asserts the encoded byte stream begins with the FFD8 SOI marker and ends with the FFD9 EOI marker, exercising the libjpeg-turbo stream-bracketing invariant.
Pillow JPEG subsampling=0 (4:4:4) reports 4:4:4 on reload Port / libjpeg-turbo / usage-python3-pil-r15-jpeg-subsampling-keyword-444 Passed
Saves a JPEG with subsampling=0 (Pillow's 4:4:4 mode) and re-opens to confirm JpegImagePlugin.get_sampling returns 0, exercising the libjpeg-turbo no-chroma-subsampling encode/decode path.
Pillow Image.frombytes mode "L" saves a single-component JPEG re-read in mode L Port / libjpeg-turbo / usage-python3-pil-r16-jpeg-fromarray-monochrome-l-mode Passed
Builds a 32x24 grayscale buffer with Pillow's frombytes for mode "L", saves as JPEG, and asserts the re-decoded image has format=JPEG and mode=L (single-component / one-band) with the original dimensions, exercising libjpeg-turbo's grayscale-only encode and decode paths through Pillow.
Pillow JPEG save quality=95 yields a strictly larger file than quality=75 Port / libjpeg-turbo / usage-python3-pil-r16-jpeg-quality-delta-95-vs-75 Passed
Saves the same RGB image via Pillow at quality=75 and quality=95 and asserts the quality-95 file is strictly larger than the quality-75 file, exercising libjpeg-turbo's quantisation table scaling through Pillow's quality keyword.
Pillow JPEG save subsampling=1 (4:2:2) writes a decodable RGB image Port / libjpeg-turbo / usage-python3-pil-r16-jpeg-subsampling-keyword-422 Passed
Saves a small RGB JPEG via Pillow with subsampling=1 (4:2:2) and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's 4:2:2 chroma-subsampling encoder path through Pillow.
Pillow Image.thumbnail then JPEG save yields a smaller file than the source JPEG Port / libjpeg-turbo / usage-python3-pil-r16-jpeg-thumbnail-shrinks-bytes Passed
Saves a 256x192 RGB image as JPEG, opens it, calls im.thumbnail((64,48)), saves the resized image to a new JPEG, and asserts the thumbnail's byte size is strictly less than the source JPEG byte size and dimensions are no larger than the requested bounds.
Pillow Image.convert("L") then save JPEG re-decodes in mode L Port / libjpeg-turbo / usage-python3-pil-r17-jpeg-convert-l-roundtrip-mode Passed
Builds a 32x20 RGB image with Pillow, converts to mode "L" via convert("L"), saves as JPEG, and asserts the re-decoded image has format=JPEG, mode=L, and the original dimensions, exercising libjpeg-turbo's grayscale encode path through Pillow's convert("L") path (distinct from frombytes-mode-L which constructs from scratch).
Pillow getbbox on a solid-color JPEG returns the full image rectangle Port / libjpeg-turbo / usage-python3-pil-r17-jpeg-getbbox-solid-color Passed
Saves a 32x24 solid-non-black RGB color (140,90,200) JPEG via Pillow and asserts the reopened image's getbbox() is exactly (0, 0, 32, 24), exercising libjpeg-turbo decode of a uniform color image where every pixel is non-zero so the bounding box covers the full canvas.
Pillow ImageOps.expand border=5 increases JPEG dimensions by exactly 10 Port / libjpeg-turbo / usage-python3-pil-r17-jpeg-imageops-expand-border-dims Passed
Saves an RGB JPEG, reopens it, calls ImageOps.expand with border=5, re-encodes as JPEG, and asserts the resulting image's dimensions are width+10 and height+10 (5 pixels added on each side), exercising libjpeg-turbo decode/encode bracketing a Pillow border-expand operation.
Pillow JPEG save progressive=True writes a JPEG that re-decodes to the original mode and size Port / libjpeg-turbo / usage-python3-pil-r17-jpeg-progressive-true-decodable Passed
Saves a 48x32 RGB image via Pillow with progressive=True and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's progressive encoder path through Pillow's progressive keyword (a decode-the-encoded round-trip distinct from SOF2-marker tests).
Pillow JPEG save subsampling=0 (4:4:4) writes a decodable RGB image Port / libjpeg-turbo / usage-python3-pil-r17-jpeg-subsampling-zero-444 Passed
Saves a small RGB JPEG via Pillow with subsampling=0 (4:4:4 — no chroma decimation) and asserts the output is a JPEG that re-decodes as RGB with the original dimensions, exercising libjpeg-turbo's 4:4:4 chroma path through Pillow's subsampling keyword (distinct from the r16 4:2:2 subsampling=1 test).
Pillow getbands on an RGB JPEG returns the three-tuple R, G, B Port / libjpeg-turbo / usage-python3-pil-r18-jpeg-getbands-rgb-three Passed
Saves a small RGB image as JPEG via Pillow and asserts the reopened image's getbands() returns exactly the tuple ("R", "G", "B") and len(getbands()) is 3, exercising libjpeg-turbo's three-component decode through Pillow's band introspection (distinct from L-mode getbands coverage).
Pillow getextrema on a solid-127 grayscale JPEG returns a near-127 tight range Port / libjpeg-turbo / usage-python3-pil-r18-jpeg-getextrema-mid-grey-single-band Passed
Saves a 24x24 mode-L grayscale JPEG filled with byte 127 via Pillow at quality=95, reopens it, and asserts getextrema() returns a single tuple (min, max) where both values lie in [120, 134] (libjpeg-turbo quantisation drift around the original 127), exercising Pillow's getextrema reflection through libjpeg-turbo grayscale decode.
Pillow histogram on a grayscale JPEG returns a 256-bucket list summing to the pixel count Port / libjpeg-turbo / usage-python3-pil-r18-jpeg-histogram-l-mode-length-256 Passed
Saves a 32x16 mode-L grayscale JPEG via Pillow with quality=90, reopens it, asserts histogram() length is exactly 256 and the sum of all bins equals W*H=512 (the pixel count), exercising libjpeg-turbo's grayscale decode followed by Pillow's histogram introspection on a single-band image.
Pillow JPEG save dpi=(72,72) round-trips through info["dpi"] Port / libjpeg-turbo / usage-python3-pil-r18-jpeg-info-dpi-roundtrip-72-72 Passed
Saves a small RGB JPEG via Pillow with dpi=(72,72), reopens it, and asserts im.info["dpi"] equals (72, 72) (round-tripped through the JFIF APP0 density fields), exercising libjpeg-turbo's JFIF marker writing with explicit DPI distinct from the r15 (150,150) coverage.
Pillow JPEG save quality=1 produces a strictly smaller file than quality=95 Port / libjpeg-turbo / usage-python3-pil-r18-jpeg-quality-keyword-1-vs-95-monotonic Passed
Saves the same 48x32 RGB image twice via Pillow, once with quality=1 and once with quality=95, and asserts the quality=1 file is strictly smaller in bytes than the quality=95 file, exercising libjpeg-turbo's quantisation-table scaling through Pillow's quality keyword (a different size-pair than r9 1-vs-95 which only checked strict size monotonicity at the same dims).
Pillow getbands on a grayscale L-mode JPEG returns the single-tuple L Port / libjpeg-turbo / usage-python3-pil-r19-jpeg-getbands-l-mode-single Passed
Saves a grayscale L-mode JPEG via Pillow and asserts the reopened image's getbands() returns exactly the tuple ("L",) and im.mode is "L", exercising libjpeg-turbo's single-component grayscale decode through Pillow's band introspection (distinct from the r18 RGB band coverage).
Pillow JPEG save progressive=True round-trips info["progressive"] truthy Port / libjpeg-turbo / usage-python3-pil-r19-jpeg-progressive-roundtrip-info Passed
Saves an RGB JPEG via Pillow with progressive=True, reopens it, and asserts im.info.get("progressive") is truthy and im.info.get("progression") is also truthy on the reopened progressive JPEG, exercising libjpeg-turbo's progressive-mode SOF2 marker round-trip through Pillow's info introspection.
Pillow rotate 90 with expand on a JPEG swaps width and height Port / libjpeg-turbo / usage-python3-pil-r19-jpeg-rotate-90-dims-swap Passed
Saves a 48x24 RGB JPEG via Pillow, opens it, calls rotate(90, expand=True), saves the rotated image as JPEG, and asserts the reopened rotated image's .size equals (24, 48) exactly, exercising libjpeg-turbo encode/decode bracketed around a 90-degree rotation that exchanges the axes.
Pillow resize to half dims on a JPEG produces exact target dims on reopen Port / libjpeg-turbo / usage-python3-pil-r19-jpeg-size-after-resize-half Passed
Saves a 64x32 RGB JPEG via Pillow, resizes the reopened image to (32, 16) with the default resampler, saves it as JPEG again, and asserts the second reopened image's .size equals (32, 16) exactly, exercising libjpeg-turbo encode/decode bracketed around Pillow's resize operation at a power-of-two downscale.
Pillow JPEG decode then tobytes/frombytes reconstructs an identical RGB image Port / libjpeg-turbo / usage-python3-pil-r19-jpeg-tobytes-frombytes-roundtrip Passed
Saves a 32x16 RGB JPEG via Pillow at quality=95, reopens it, dumps the pixel bytes via tobytes(), reconstructs a fresh Image via Image.frombytes("RGB", size, data), and asserts the two images have identical pixel buffers and identical sizes, exercising libjpeg-turbo decode followed by Pillow's raw-byte round-trip without re-encoding.
Pillow JPEG draft("RGB", (32,32)) on a 64x64 source halves the decoded dims Port / libjpeg-turbo / usage-python3-pil-r20-jpeg-draft-half-size-decode-dims Passed
Saves a 64x64 RGB JPEG, reopens it, calls im.draft("RGB", (32,32)) before im.load(), and asserts the resulting size is (32,32) (libjpeg-turbo's DCT scale-by-half decode path), exercising the draft-mode size-scaling decode invocation through Pillow.
Pillow Image.getchannel("R") on a decoded RGB JPEG returns mode L same size Port / libjpeg-turbo / usage-python3-pil-r20-jpeg-getchannel-r-mode-l Passed
Saves an RGB JPEG, decodes it via Pillow, calls im.getchannel("R"), and asserts the returned channel image has mode "L" and the same size as the source, exercising libjpeg-turbo decode followed by Pillow's per-channel band-projection method.
Pillow JPEG save with optimize=True is not larger than save without optimize Port / libjpeg-turbo / usage-python3-pil-r20-jpeg-save-optimize-no-larger Passed
Saves the same RGB image as JPEG at quality=85 twice — once with optimize=False and once with optimize=True — and asserts the optimized file size is less than or equal to the unoptimized size, exercising libjpeg-turbo's optimized Huffman table generation path through Pillow's optimize flag.
Pillow Image.thumbnail on a 100x60 JPEG yields dims fitting within 32x32 Port / libjpeg-turbo / usage-python3-pil-r20-jpeg-thumbnail-shrinks-dimensions Passed
Saves a 100x60 RGB JPEG via Pillow, reopens it, calls im.thumbnail((32,32)), and asserts both width and height are <= 32 and at least one dimension equals 32 (the aspect-preserving bound), exercising libjpeg-turbo decode followed by Pillow's thumbnail in-place rescaling.
Pillow Image.transpose FLIP_LEFT_RIGHT swaps leftmost and rightmost JPEG columns Port / libjpeg-turbo / usage-python3-pil-r20-jpeg-transpose-flip-left-right-pixels Passed
Saves an RGB JPEG with a deterministic column-dependent pattern, decodes it, applies transpose(Image.FLIP_LEFT_RIGHT), and asserts pixel (0,y) of the flipped image equals pixel (W-1,y) of the source for several rows (allowing ~4 unit drift per channel for JPEG compression), exercising libjpeg-turbo decode followed by Pillow's horizontal-flip pixel mapping.
Pillow Image.tobytes after JPEG decode returns exactly W*H*3 bytes for RGB Port / libjpeg-turbo / usage-python3-pil-r21-jpeg-load-then-tobytes-length-rgb Passed
Encodes a 50x30 RGB image as JPEG, re-opens it via Pillow, calls tobytes() on the decoded image and asserts the resulting byte string length equals 50*30*3 = 4500 - locking in libjpeg-turbo's full-decode raw byte output length matching the expected 3-byte-per-pixel packed RGB layout.
Pillow Image.paste with an L-mode mask blends a JPEG-decoded overlay onto a base Port / libjpeg-turbo / usage-python3-pil-r21-jpeg-paste-with-mask-quarter Passed
Decodes a previously-saved JPEG overlay via PIL, pastes it onto a solid RGB base with an L-mode 128-value mask covering a centered quarter, encodes the result as JPEG, and asserts the final image size remains 64x64 and that the centered region's pixel red channel is strictly between the base red value 10 and the overlay red value 200 - locking in libjpeg-turbo's encode/decode path through PIL's Image.paste with a non-trivial alpha mask.
Pillow opens a progressive RGB JPEG and reports im.layers == 3 Port / libjpeg-turbo / usage-python3-pil-r21-jpeg-progressive-layers-three Passed
Encodes a 40x32 RGB image as a progressive JPEG via Pillow, re-opens it, and asserts the JpegImageFile attribute "layers" equals 3 (one per RGB component) and the info["progressive"] flag is truthy - locking in libjpeg-turbo's per-component layer accounting reported on progressive decoder open, a property not previously asserted.
Pillow JPEG save comment kwarg appears in info["comment"] after re-open Port / libjpeg-turbo / usage-python3-pil-r21-jpeg-save-comment-info-roundtrip Passed
Encodes a small RGB image with Pillow's JPEG save comment=b"r21-comment-marker" kwarg, re-opens the result and asserts im.info["comment"] equals that exact byte string AND that the saved file contains a COM (FFFE) marker byte sequence in its first 8 KiB - locking in libjpeg-turbo's COM marker emission via Pillow's comment kwarg and the corresponding info["comment"] decode path.
Pillow's JPEG tile descriptor reports decoder name jpeg and full-image extents Port / libjpeg-turbo / usage-python3-pil-r21-jpeg-tile-decoder-extents Passed
Encodes a 56x40 RGB JPEG, re-opens it through Pillow, and asserts the JpegImageFile.tile list has exactly one entry whose decoder name is "jpeg" and whose extents tuple is (0, 0, 56, 40) covering the full image - locking in libjpeg-turbo's single-tile lazy-decoder descriptor used by Pillow to defer the actual decode pass.
Pillow getbands on L-mode JPEG Port / libjpeg-turbo / usage-python3-pil-r9-jpeg-getbands-l-mode Passed
Saves a grayscale L-mode JPEG and verifies getbands returns a single-band tuple ('L',) on reload.
Pillow getpixel on solid JPEG Port / libjpeg-turbo / usage-python3-pil-r9-jpeg-getpixel-roundtrip Passed
Encodes a uniformly-colored JPEG at high quality and confirms getpixel returns a pixel within tolerance of the encoded color.
Pillow JPEG q=1 smaller than q=95 Port / libjpeg-turbo / usage-python3-pil-r9-jpeg-quality-1-vs-95-size Passed
Saves the same source image at JPEG quality 1 and 95 with Pillow and verifies q=1 produces a strictly smaller file than q=95.
Pillow rotate JPEG 90 swaps dimensions Port / libjpeg-turbo / usage-python3-pil-r9-jpeg-rotate-90-dimensions Passed
Rotates a non-square JPEG by 90 degrees with expand=True and verifies the resulting image dimensions are swapped.
Pillow Image.thumbnail shrinks JPEG in-place Port / libjpeg-turbo / usage-python3-pil-r9-jpeg-thumbnail-shrink Passed
Calls Image.thumbnail on a 64x32 JPEG and verifies the result is shrunk to fit within an 8x8 box while preserving aspect ratio.
Pillow Image.verify on JPEG Port / libjpeg-turbo / usage-python3-pil-r9-verify-jpeg Passed
Runs Image.verify() against a freshly-encoded JPEG and confirms it returns without raising and reports the file format as JPEG.
python PIL red channel JPEG Port / libjpeg-turbo / usage-python3-pil-red-channel-jpeg Passed
Pillow resizes JPEG Port / libjpeg-turbo / usage-python3-pil-resize-jpeg Passed
Pillow rotates JPEG 270 degrees Port / libjpeg-turbo / usage-python3-pil-rotate-270-jpeg Passed
python PIL rotate expand JPEG Port / libjpeg-turbo / usage-python3-pil-rotate-expand-jpeg Passed
Pillow rotates JPEG Port / libjpeg-turbo / usage-python3-pil-rotate-jpeg Passed
Pillow screen mirror JPEG Port / libjpeg-turbo / usage-python3-pil-screen-mirror-jpeg Passed
Uses Pillow ImageChops.screen on a generated JPEG and its mirrored copy and verifies the screened pixel values before round-tripping.
python PIL solarize JPEG Port / libjpeg-turbo / usage-python3-pil-solarize-jpeg Passed
python PIL split merge JPEG Port / libjpeg-turbo / usage-python3-pil-split-merge-jpeg Passed
python PIL stat mean JPEG Port / libjpeg-turbo / usage-python3-pil-stat-mean-jpeg Passed
Pillow subtract mirror JPEG Port / libjpeg-turbo / usage-python3-pil-subtract-mirror-jpeg Passed
Uses Pillow ImageChops.subtract on mirrored and original generated JPEGs and verifies the non-negative channel differences before round-tripping.
Pillow subtract_modulo mirror JPEG Port / libjpeg-turbo / usage-python3-pil-subtract-modulo-mirror-jpeg Passed
Uses Pillow ImageChops.subtract_modulo on a generated JPEG and its mirrored copy and verifies the modular per-channel differences before round-tripping.
Pillow thumbnail jpeg Port / libjpeg-turbo / usage-python3-pil-thumbnail-jpeg Passed
Pillow tobytes raw on JPEG Port / libjpeg-turbo / usage-python3-pil-tobytes-raw-jpeg Passed
Loads a JPEG with Pillow and verifies Image.tobytes("raw") returns width*height*channels bytes matching the image mode.
Pillow transpose FLIP_LEFT_RIGHT JPEG Port / libjpeg-turbo / usage-python3-pil-transpose-flip-lr-jpeg Passed
Applies Image.transpose(FLIP_LEFT_RIGHT) on a JPEG-loaded image, round-trips the result through JPEG, and verifies horizontal pixel mirroring on a mid-gray asymmetric stripe.
Pillow transpose jpeg Port / libjpeg-turbo / usage-python3-pil-transpose-jpeg Passed
Pillow transpose ROTATE_90 on JPEG Port / libjpeg-turbo / usage-python3-pil-transpose-rotate90-jpeg Passed
Rotates a JPEG 90 degrees with Image.transpose(Image.ROTATE_90), saves, and verifies dimension swap and JPEG roundtrip.
python PIL transpose JPEG Port / libjpeg-turbo / usage-python3-pil-transpose-swap-jpeg Passed
Pillow transverse generated JPEG Port / libjpeg-turbo / usage-python3-pil-transverse-generated-jpeg Passed
Applies Pillow transverse transpose to a generated JPEG and verifies both the swapped dimensions and mapped corner pixels before round-tripping.
vips abs absolute value on JPEG-derived image Port / libjpeg-turbo / usage-vips-abs-jpeg Passed
Subtracts a constant from a JPEG via vips linear, takes the absolute value with vips abs, and verifies the result roundtrips back to JPEG with the expected dimensions.
vips arrayjoin two JPEGs side by side Port / libjpeg-turbo / usage-vips-arrayjoin-jpeg Passed
Encodes two PPMs as JPEGs via cjpeg, joins them horizontally with vips arrayjoin across=2, writes the joined image as a JPEG, and verifies the joined dimensions equal the sum of the input widths and the original height.
vips bandbool and JPEG Port / libjpeg-turbo / usage-vips-bandbool-and-jpeg Passed
Reduces a JPEG's RGB bands with vips bandbool boolean :and and verifies the output is a single-band image with matching width and height.
vips bandmean JPEG Port / libjpeg-turbo / usage-vips-bandmean-jpeg Passed
vips colourspace b-w JPEG Port / libjpeg-turbo / usage-vips-colourspace-bw-jpeg Passed
Converts an RGB JPEG to grayscale via vips colourspace b-w and verifies the output is a single-band JPEG.
vips composite two jpegs Port / libjpeg-turbo / usage-vips-composite-jpeg Passed
vips copy jpeg png Port / libjpeg-turbo / usage-vips-copy-jpeg-png Passed
vips copies JPEG to PPM Port / libjpeg-turbo / usage-vips-copy-ppm-jpeg Passed
vips crops JPEG Port / libjpeg-turbo / usage-vips-crop-jpeg Passed
vips embeds JPEG Port / libjpeg-turbo / usage-vips-embed-jpeg Passed
vips embed extend mirror JPEG Port / libjpeg-turbo / usage-vips-embed-mirror-jpeg Passed
Embeds a JPEG into a larger canvas using vips embed --extend mirror and verifies the resulting dimensions and band count via vipsheader -a.
vips embed JPEG on white background Port / libjpeg-turbo / usage-vips-embed-white-bg-jpeg Passed
Embeds a JPEG into a larger canvas with a white background via vips embed and verifies the canvas size and the white border pixels.
vips extract JPEG band Port / libjpeg-turbo / usage-vips-extract-band-jpeg Passed
vips extracts JPEG strip Port / libjpeg-turbo / usage-vips-extract-strip-jpeg Passed
Extracts a one-pixel-high strip from a JPEG with vips and verifies the cropped output dimensions.
vips flips JPEG Port / libjpeg-turbo / usage-vips-flip-jpeg Passed
vips vertical flip JPEG Port / libjpeg-turbo / usage-vips-flip-vertical-jpeg Passed
vips gravity centre JPEG placement Port / libjpeg-turbo / usage-vips-gravity-centre-jpeg Passed
Places a small JPEG into a larger canvas using vips gravity with direction "centre" and verifies the resulting image dimensions match the requested canvas size.
vips header jpeg Port / libjpeg-turbo / usage-vips-header-jpeg Passed
vips inverts JPEG Port / libjpeg-turbo / usage-vips-invert-jpeg Passed
Inverts a JPEG with vips invert and verifies the output dimensions, file magic, and a representative pixel via Pillow.
vips JPEG to TIFF Port / libjpeg-turbo / usage-vips-jpeg-to-tiff Passed
vips jpegload shrink-on-load 2x Port / libjpeg-turbo / usage-vips-jpegload-shrink-on-load Passed
Loads a 64x32 JPEG via vips jpegload with shrink=2 and confirms libjpeg-turbo's DCT-domain shrink returns a 32x16 image without a separate resize step.
vips jpegsave roundtrip Port / libjpeg-turbo / usage-vips-jpegsave-buffer-roundtrip Passed
Encodes a PPM with vips jpegsave at Q=75 and verifies JPEG SOI/EOI bytes plus JFIF or Exif marker.
vips CMYK JPEG roundtrip Port / libjpeg-turbo / usage-vips-jpegsave-cmyk-roundtrip Passed
Converts an RGB JPEG to CMYK via vips colourspace, saves it as a 4-channel JPEG, and verifies vipsheader reports 4 bands cmyk after reload — exercising libjpeg-turbo's CMYK encode/decode paths.
vips jpegsave --interlace SOF2 marker Port / libjpeg-turbo / usage-vips-jpegsave-interlace-sof2 Passed
Saves a JPEG via vips with --interlace and verifies the encoder emits an SOF2 (progressive) frame header instead of SOF0, exercising libjpeg-turbo's progressive path.
vips jpegsave --keep none strips metadata Port / libjpeg-turbo / usage-vips-jpegsave-keep-none-strip Passed
Resaves a JPEG that carries an Exif APP1 block via vips jpegsave --keep none and verifies the Exif marker is gone in the output, while a default save retains it.
vips jpegsave no chroma subsample Port / libjpeg-turbo / usage-vips-jpegsave-no-subsample Passed
Encodes a JPEG with vips jpegsave --no-subsample and confirms the SOF0 component sampling factors all read 1x1 (4:4:4) instead of the default 4:2:0.
vips jpegsave optimize-coding shrinks bytes Port / libjpeg-turbo / usage-vips-jpegsave-optimize-coding Passed
Encodes the same JPEG twice with vips jpegsave at Q=85 — once with --no-optimize-coding, once with --optimize-coding — and confirms the optimised output is no larger and remains a valid JPEG.
vips saves JPEG quality Port / libjpeg-turbo / usage-vips-jpegsave-quality Passed
vips jpegsave --restart-interval DRI marker Port / libjpeg-turbo / usage-vips-jpegsave-restart-interval-dri Passed
Saves a JPEG via vips with --restart-interval 8 and verifies the resulting stream contains a DRI (FFDD) marker plus at least one RST0..RST7 marker, the wire-level restart structure libjpeg-turbo emits.
vips linear JPEG transform Port / libjpeg-turbo / usage-vips-linear-jpeg Passed
vips linear multiply scalar JPEG Port / libjpeg-turbo / usage-vips-multiply-scalar-jpeg Passed
Multiplies a JPEG by a positive scalar constant via vips linear (the supported way to do scalar multiplication; math2_const has no multiply member), writes the result as a JPEG, and verifies the output dimensions and per-pixel values approximately equal the input scaled by the scalar.
vips affine identity transform preserves JPEG dimensions Port / libjpeg-turbo / usage-vips-r10-affine-identity-jpeg Passed
Applies the identity affine matrix (1, 0, 0, 1) to a JPEG via vips affine and verifies the result has the same dimensions and decodes back as a valid JPEG with vipsheader.
vips avg of a solid-color JPEG approximates the source value Port / libjpeg-turbo / usage-vips-r10-avg-solid-color-jpeg Passed
Encodes a solid mid-gray (128) JPEG at high quality, then computes the mean pixel value via vips avg. The mean must be within 2 of 128 once decoded back through libjpeg-turbo.
vips jpegsave strip removes metadata Port / libjpeg-turbo / usage-vips-r10-jpegsave-strip-metadata Passed
Loads a JPEG that contains a custom comment, re-saves it with vips jpegsave --strip, and verifies the output binary contains no JPEG comment marker (FFFE) and is materially smaller than the metadata-bearing input of the same pixels.
vips sharpen on a JPEG produces a valid JPEG Port / libjpeg-turbo / usage-vips-r10-sharpen-jpeg Passed
Loads a JPEG, applies vips sharpen with a small sigma, re-encodes the result with jpegsave, and verifies the output is a JPEG with the original dimensions.
vipsthumbnail --smartcrop centre crops a JPEG to a square Port / libjpeg-turbo / usage-vips-r10-vipsthumbnail-crop-centre-jpeg Passed
Generates a 100x60 JPEG, then runs vipsthumbnail with size 32x32 and --smartcrop centre. Verifies the output JPEG is exactly 32x32 (the crop fills the box) and decodes back through vipsheader.
vips bandjoin recombines three single-band channels into an RGB JPEG Port / libjpeg-turbo / usage-vips-r11-bandjoin-rgb-jpeg Passed
Splits a JPEG into its three colour bands with extract_band, then bandjoins them back into a 3-band image saved as JPEG, asserting the joined output has 3 bands and the original geometry via vipsheader.
vips cast to uchar preserves JPEG geometry and band count Port / libjpeg-turbo / usage-vips-r11-cast-uchar-jpeg Passed
Loads a JPEG and runs vips cast with the uchar target type, then re-encodes as JPEG, asserting the output keeps the same width, height, and band count via vipsheader and is still recognised as JPEG by file(1).
vips extract_area carves a rectangular subregion out of a JPEG Port / libjpeg-turbo / usage-vips-r11-extract-area-jpeg Passed
Loads a JPEG and uses vips extract_area to extract a rectangular subregion at a given offset and size, asserting the resulting JPEG matches the requested width and height via vipsheader.
vips gaussblur smooths a JPEG and preserves geometry Port / libjpeg-turbo / usage-vips-r11-gaussblur-jpeg Passed
Loads a JPEG, runs vips gaussblur with a small sigma to apply a Gaussian smoothing kernel, re-encodes as JPEG, and asserts the output keeps the original width, height, and band count via vipsheader.
vips wrap shifts a JPEG with toroidal offset preserving geometry Port / libjpeg-turbo / usage-vips-r11-wrap-offset-jpeg Passed
Loads a JPEG and applies vips wrap with explicit x/y offsets to perform a toroidal pixel shift, then re-encodes as JPEG and asserts the output keeps the original width, height, and band count via vipsheader.
vips jpegsave --interlace writes an SOF2 progressive marker Port / libjpeg-turbo / usage-vips-r12-jpegsave-interlace-progressive-marker Passed
Saves a JPEG via vips jpegsave with --interlace and confirms the byte stream contains the SOF2 (FFC2) progressive start-of-frame marker rather than the SOF0 (FFC0) baseline marker.
vips jpegsave --no-subsample emits a 4:4:4 SOF0 component table Port / libjpeg-turbo / usage-vips-r12-jpegsave-no-subsample-444 Passed
Saves a JPEG via vips jpegsave with --no-subsample (chroma subsampling disabled) and parses the SOF0 marker to confirm all three components advertise a 1:1 horizontal/vertical sampling factor (0x11), corresponding to 4:4:4.
vips jpegsave --Q 10 yields a smaller file than --Q 95 Port / libjpeg-turbo / usage-vips-r12-jpegsave-q-low-vs-high-size Passed
Encodes a synthetic PPM through vips jpegsave at --Q 10 and --Q 95 and asserts the low-Q file is strictly smaller, exercising the libjpeg-turbo lossy quality scale via vips.
vips jpegsave --trellis-quant produces a valid JPEG at the original size Port / libjpeg-turbo / usage-vips-r12-jpegsave-trellis-quant-roundtrip Passed
Saves a JPEG via vips jpegsave with --trellis-quant (trellis quantisation enabled) and verifies the output is recognised by file(1) and reloads through vipsheader at the original geometry.
vips jpegload reports 3 bands for an RGB JPEG Port / libjpeg-turbo / usage-vips-r13-jpegload-roundtrip-bands-three Passed
Builds an RGB JPEG via cjpeg, loads it with vips jpegload, and asserts vipsheader reports a bands=3 RGB header, exercising the standard libjpeg-turbo 3-component decode path.
vips jpegsave --profile attaches an ICC profile that survives the resave Port / libjpeg-turbo / usage-vips-r13-jpegsave-keep-icc-roundtrip Passed
Builds a JPEG carrying no profile via Pillow, then resaves it with "vips jpegsave --profile <icc>" (an sRGB profile) and asserts the resaved file contains the APP2 ICC_PROFILE identifier in its byte stream, exercising explicit profile embedding through the libjpeg-turbo encoder. (Vips jpegsave --keep icc does not always pull the Pillow-written profile — pass it explicitly via --profile to test the encoder's APP2 emission.)
vips jpegsave --overshoot-deringing produces a valid JPEG at the original size Port / libjpeg-turbo / usage-vips-r13-jpegsave-overshoot-deringing-roundtrip Passed
Saves a JPEG via vips jpegsave with --overshoot-deringing (a mozjpeg-style ringing-mitigation flag) and confirms the output is a syntactically valid JPEG that vipsheader reloads at the input geometry.
vips jpegsave --quant-table 0 emits a valid JPEG at the source size Port / libjpeg-turbo / usage-vips-r13-jpegsave-quant-table-zero-roundtrip Passed
Saves a JPEG via vips jpegsave with --quant-table 0 (the standard JPEG annex-K table set) and verifies the output is recognised as a JPEG with the original geometry, exercising the named-quant-table selector path.
vips jpegload reports bands=1 for a grayscale JPEG Port / libjpeg-turbo / usage-vips-r14-jpegload-bands-one-grayscale Passed
Builds a grayscale JPEG via cjpeg from a PGM source, loads it with vips jpegload, and asserts vipsheader reports a 1-band single-channel header, exercising the libjpeg-turbo grayscale (Y-only) decode path through vips.
vips jpegsave --Q 20 yields a smaller JPEG than --Q 90 Port / libjpeg-turbo / usage-vips-r14-jpegsave-q-low-vs-high-monotonic-size Passed
Encodes the same PPM through vips jpegsave at --Q 20 and --Q 90 and asserts the low-Q output is strictly smaller than the high-Q output, exercising libjpeg-turbo's quality-driven byte-size monotonicity through vips.
vips jpegsave --quant-table 3 emits a JPEG carrying a DQT marker Port / libjpeg-turbo / usage-vips-r14-jpegsave-quant-table-three-roundtrip Passed
Saves a JPEG via vips jpegsave with --quant-table 3 (a non-default named table) and confirms the output contains a DQT (FFDB) marker plus reloads at the original geometry, exercising the named-quant-table encoder selector.
vips jpegsave --restart-interval 0 emits a JPEG without a DRI marker Port / libjpeg-turbo / usage-vips-r14-jpegsave-restart-interval-zero-no-dri Passed
Saves a JPEG via vips jpegsave with --restart-interval 0 (the default off-state) and confirms the resulting stream has no DRI (FFDD) marker, exercising the negative path for the restart-interval encoder option.
vips jpegsave --trellis-quant emits a valid JPEG at original geometry Port / libjpeg-turbo / usage-vips-r14-jpegsave-trellis-quant-flag-roundtrip Passed
Saves a JPEG via vips jpegsave with --trellis-quant (a mozjpeg-style trellis quantisation flag) and confirms the output is a syntactically valid JPEG with SOI/EOI markers and reloads at the input dimensions, exercising the trellis-quant encoder option.
vips jpegload --shrink 4 quarters both JPEG dimensions Port / libjpeg-turbo / usage-vips-r15-jpegload-shrink-four-quarters-dimensions Passed
Saves a 64x48 JPEG via cjpeg from a PPM source and runs it through vips jpegload --shrink 4, then asserts vipsheader reports width=16 and height=12 (each axis quartered), exercising the libjpeg-turbo DCT-domain integer scale-down path through vips.
vips jpegsave --interlace emits a JPEG carrying an SOF2 (FFC2) progressive marker Port / libjpeg-turbo / usage-vips-r15-jpegsave-interlace-sof2-marker Passed
Saves a JPEG via vips jpegsave with --interlace and confirms the output stream contains the FFC2 SOF2 marker, exercising libjpeg-turbo's progressive Huffman encoder path through vips.
vips jpegsave --optimize-coding yields a no-larger file than the default Port / libjpeg-turbo / usage-vips-r15-jpegsave-optimize-coding-no-larger Passed
Encodes the same PPM through vips jpegsave with and without --optimize-coding at constant Q and asserts the optimised output is no larger than the default, exercising libjpeg-turbo's optimise-Huffman path through vips.
vips copy from JPEG to JPEG preserves width and height Port / libjpeg-turbo / usage-vips-r16-copy-jpeg-jpeg-preserves-dims Passed
Encodes a 56x40 PPM via vips jpegsave, then runs vips copy from JPEG to JPEG and asserts the output is JPEG-typed with vipsheader reporting the same width and height as the input, exercising libjpeg-turbo's decode-encode round-trip through vips copy without geometry changes.
vips extract_area pulls a 32x24 subregion at (8,8) out of a 64x48 JPEG Port / libjpeg-turbo / usage-vips-r16-extract-area-half-subregion-jpeg Passed
Encodes a 64x48 PPM as JPEG via vips jpegsave then runs vips extract_area with offset (8,8) and size 32x24 into a new JPEG, asserting the output is JPEG-typed and vipsheader reports width: 32 and height: 24, exercising libjpeg-turbo's decode plus vips's crop into a re-encode.
vips gravity centre into 48x36 canvas yields the requested dimensions Port / libjpeg-turbo / usage-vips-r16-gravity-larger-canvas-correct-dims Passed
Encodes a 24x18 PPM as JPEG then runs vips gravity centre 48 36 into a PNG output, asserting vipsheader reports the canvas dimensions 48x36 and the result is loadable by Pillow as a 48x36 image, exercising libjpeg-turbo decode followed by vips canvas placement.
vips jpegload --shrink 2 halves a 80x40 JPEG to 40x20 via DCT-domain shrink Port / libjpeg-turbo / usage-vips-r16-jpegload-shrink-on-load-two-half-dims Passed
Encodes a generated 80x40 RGB image through vips jpegsave, decodes via vips jpegload --shrink 2, and asserts the resulting image is reported as 40x20 in vipsheader, exercising libjpeg-turbo's shrink-on-load DCT decoder.
vips jpegsave Q=10 emits a strictly smaller file than Q=90 for the same PPM Port / libjpeg-turbo / usage-vips-r16-jpegsave-q-low-vs-high-monotonic Passed
Encodes the same generated PPM through vips jpegsave at Q=10 and Q=90 and asserts the Q=90 output is strictly larger than the Q=10 output, exercising libjpeg-turbo's quantisation scale via the vips --Q control.
vips avg on a solid-128 JPEG returns a value close to 128 Port / libjpeg-turbo / usage-vips-r17-avg-solid-color-equals-input-value Passed
Encodes a 16x16 solid-gray-128 PGM as a grayscale JPEG, then runs vips avg on it and asserts the printed numeric average is between 120 and 136 inclusive (libjpeg-turbo quantisation introduces small drift around the original 128), exercising the avg reducer over a uniform image.
vips colourspace srgb to b-w on a JPEG yields a single-band image Port / libjpeg-turbo / usage-vips-r17-colourspace-srgb-to-bw-one-band Passed
Encodes a 24x16 RGB PPM as JPEG, then runs vips colourspace from srgb to b-w with explicit source-space sRGB, asserting vipsheader reports 1 band and the original dimensions, exercising libjpeg-turbo decode followed by vips colourspace conversion through the srgb-to-bw route.
vips embed centers a small JPEG in a larger canvas with correct dims Port / libjpeg-turbo / usage-vips-r17-embed-centered-larger-canvas-dims Passed
Encodes a 20x16 PPM as JPEG then runs vips embed at offset (10, 8) into a 40x32 canvas, asserting vipsheader reports the canvas dimensions 40x32 and the output is a JPEG-typed file, exercising libjpeg-turbo decode followed by vips embed canvas placement (distinct from r16 gravity which uses the gravity operator).
vips deviate on a solid-gray JPEG returns a small positive standard deviation Port / libjpeg-turbo / usage-vips-r18-deviate-uniform-jpeg-near-zero Passed
Encodes a 16x16 solid-gray-128 PGM as a grayscale JPEG via vips jpegsave then runs vips deviate on it and asserts the printed standard deviation, truncated to an integer, is less than 8 (libjpeg-turbo introduces only small per-pixel drift on a uniform image), exercising the vips deviate reducer on a near-uniform input.
vips extract_band 0 on an RGB JPEG yields a single-band intermediate Port / libjpeg-turbo / usage-vips-r18-extract-band-zero-single-band-jpeg Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave then runs vips extract_band selecting band 0 with n=1, writing to .v output, and asserts vipsheader reports 1 band and the original dimensions, exercising libjpeg-turbo decode followed by vips extract_band on band index 0 (distinct from existing extract-band-jpeg coverage that selects a different band).
vips invert applied twice via .v intermediates preserves dimensions Port / libjpeg-turbo / usage-vips-r18-invert-then-invert-roundtrip-jpeg Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave, runs vips invert twice through .v intermediate files, and asserts vipsheader reports the original 24x16 dimensions and 3 bands on the final output, exercising libjpeg-turbo decode followed by two successive vips invert operations.
vips max on a solid-200 grayscale JPEG returns a value close to 200 Port / libjpeg-turbo / usage-vips-r18-max-solid-color-jpeg Passed
Encodes a 16x16 solid-gray-200 PGM as a grayscale JPEG via vips jpegsave then runs vips max on it and asserts the printed numeric maximum is in the inclusive range [192, 208] (libjpeg-turbo quantisation drift around 200), exercising the vips max reducer over a uniform JPEG image.
vips min on a solid-64 grayscale JPEG returns a value close to 64 Port / libjpeg-turbo / usage-vips-r18-min-solid-color-jpeg Passed
Encodes a 16x16 solid-gray-64 PGM as a grayscale JPEG via vips jpegsave then runs vips min on it and asserts the printed numeric minimum is in the inclusive range [56, 72] (libjpeg-turbo quantisation drift around 64), exercising the vips min reducer over a uniform JPEG image.
vips avg on a solid-32 grayscale JPEG returns a value close to 32 Port / libjpeg-turbo / usage-vips-r19-avg-solid-32-jpeg Passed
Encodes a 16x16 solid-gray-32 PGM as a grayscale JPEG via vips jpegsave then runs vips avg on it and asserts the printed numeric average is in the inclusive range [24, 40] (libjpeg-turbo quantisation drift around the original 32), exercising the vips avg reducer at a low-luma fixture distinct from r10/r17 mid-grey coverage.
vips extract_area cropping the top-left quadrant of a JPEG yields half dims Port / libjpeg-turbo / usage-vips-r19-extract-area-quadrant-dims Passed
Encodes a 40x24 RGB PPM as JPEG via vips jpegsave, runs vips extract_area to crop the top-left 20x12 region into a .v intermediate, and asserts vipsheader reports the cropped dimensions 20x12 and 3 bands on the result, exercising libjpeg-turbo decode followed by vips extract_area on a fixed rectangle.
vips flip horizontal applied twice via .v intermediates preserves dims Port / libjpeg-turbo / usage-vips-r19-flip-horizontal-then-horizontal-dims Passed
Encodes a 32x20 RGB PPM as JPEG via vips jpegsave, runs vips flip --direction horizontal twice through .v intermediates, and asserts vipsheader reports the original 32x20 dimensions and 3 bands on the final output, exercising libjpeg-turbo decode followed by two successive vips horizontal flips.
vips jpegsave --Q 1 produces a strictly smaller file than --Q 95 Port / libjpeg-turbo / usage-vips-r19-jpegsave-q1-vs-q95-smaller Passed
Builds a 48x32 RGB PPM with deterministic pseudo-random bytes, saves it as JPEG via vips jpegsave at --Q 1 and --Q 95 respectively, and asserts the --Q 1 output file is strictly smaller in bytes than the --Q 95 output, exercising libjpeg-turbo's quantisation-table scaling through vips jpegsave's --Q control.
vipsheader on a 24x16 RGB JPEG reports 24x16 and 3 bands Port / libjpeg-turbo / usage-vips-r19-vipsheader-rgb-jpeg-three-bands Passed
Encodes a 24x16 RGB PPM as JPEG via vips jpegsave, runs vipsheader on the resulting JPEG, and asserts the captured header line contains the literal "24x16" dimensions token and the "3 bands" band-count token, exercising libjpeg-turbo decode through vipsheader's metadata report on an RGB fixture.
vips extract_area on a JPEG yields a sub-image of exactly the requested dims Port / libjpeg-turbo / usage-vips-r20-extract-area-strip-roundtrip-jpeg Passed
Encodes a 64x32 PPM to JPEG via vips jpegsave then runs vips extract_area to pull a 20x10 region at offset (5,4), saves it back to JPEG, and asserts vipsheader -f width/height report (20,10), exercising libjpeg-turbo decode followed by vips' bounded sub-region extraction and re-encode.
vips flatten on a 4-band PAM saved as JPEG yields a 3-band JPEG Port / libjpeg-turbo / usage-vips-r20-flatten-rgba-to-jpeg-three-bands Passed
Builds a 24x16 PAM with TUPLTYPE RGB_ALPHA, runs vips flatten to composite alpha against white, and saves the result as JPEG; opens the output via vipsheader -f bands and asserts the band count is exactly 3, exercising libjpeg-turbo's RGB encode path after vips' alpha-flatten conversion.
vips jpegsave to .jpg target then vipsheader reports the correct width Port / libjpeg-turbo / usage-vips-r20-jpegsave-buffer-via-stdout-then-decode Passed
Builds a 48x32 PPM, encodes it via vips jpegsave at default quality, then runs vipsheader -f width on the produced .jpg and asserts the width equals 48, exercising libjpeg-turbo's encode followed by an immediate libjpeg-turbo decode through vipsheader.
vips jpegsave default (no --optimize-coding) is not smaller than --optimize-coding Port / libjpeg-turbo / usage-vips-r20-jpegsave-no-optimize-coding-not-smaller Passed
Encodes the same PPM to JPEG via vips jpegsave twice at Q=85 — once with the default optimize-coding=false and once with --optimize-coding (true) — and asserts the default-mode output size is greater than or equal to the optimize-coding output size, exercising libjpeg-turbo's Huffman optimization toggle through vips' boolean flag.
vips rot d90 then rot d270 on a JPEG restores original (W,H) dimensions Port / libjpeg-turbo / usage-vips-r20-rot90-then-rot270-restores-dims Passed
Encodes a 40x24 PPM to JPEG via vips jpegsave, rotates by 90 degrees, rotates the result by 270 degrees, and asserts the final image's (width,height) match the source (40,24), exercising libjpeg-turbo encode/decode through a vips rotate-and-back round-trip.
vips bandfold on an RGB JPEG folds the width into the band axis Port / libjpeg-turbo / usage-vips-r21-bandfold-jpeg-band-count Passed
Encodes a 32x16 RGB JPEG, decodes/transforms it through vips bandfold, writes the result to a .v file, and asserts vipsheader reports the bands count equals 32*3 = 96 and the width equals 1 - locking in libjpeg-turbo's RGB decode followed by vips's bandfold reshape that converts horizontal pixels into additional bands.
vips colourspace srgb to lab on a JPEG produces a 3-band FLOAT image Port / libjpeg-turbo / usage-vips-r21-colourspace-srgb-to-lab-format-float Passed
Encodes an sRGB 40x32 RGB JPEG, runs vips colourspace target lab to convert to CIELAB, writes the result to a .v file, and asserts vipsheader reports bands=3 and format containing "FLOAT" - locking in libjpeg-turbo's RGB decode feeding vips's CIELAB colour-space conversion which outputs a floating-point representation.
vips falsecolour from a single-band JPEG emits a 3-band JPEG result Port / libjpeg-turbo / usage-vips-r21-falsecolour-from-jpeg-three-bands Passed
Encodes a grayscale 48x32 JPEG via Pillow's L-mode, decodes/transforms it through vips falsecolour, encodes the result back to JPEG, and asserts the produced file has exactly 3 bands - locking in libjpeg-turbo's grayscale decode path feeding vips's false-colour LUT expansion to RGB.
vips hist_find on a JPEG yields a 256x1 histogram image with 3 bands Port / libjpeg-turbo / usage-vips-r21-hist-find-from-jpeg-256x1 Passed
Encodes a 64x48 RGB JPEG, decodes it through vips hist_find, asserts the resulting .v image is exactly 256x1 with 3 bands and that the format string emitted by vipsheader -f format equals VIPS_FORMAT_UINT - locking in libjpeg-turbo's RGB decode followed by vips's per-channel histogram synthesis at its standard 256-bin layout.
vipsthumbnail -s 32x32 on a 96x64 JPEG fits within the 32x32 bounding box Port / libjpeg-turbo / usage-vips-r21-vipsthumbnail-explicit-dimensions Passed
Encodes a 96x64 RGB JPEG via Pillow, runs vipsthumbnail -s 32x32 -o output, then asserts vipsheader reports the resulting JPEG's width is exactly 32 and the height is no more than 32 - locking in vipsthumbnail's WIDTHxHEIGHT bounding-box semantics (existing tests covered scalar size and a different -s ratio).
vips rot 90 swaps JPEG dimensions Port / libjpeg-turbo / usage-vips-r9-affine-rotate-jpeg Passed
Applies vips rot d90 to a non-square JPEG and verifies the resulting JPEG header reports dimensions swapped relative to the source.
vips jpegload reports 3 bands for RGB JPEG Port / libjpeg-turbo / usage-vips-r9-jpegload-bands-rgb Passed
Loads an RGB JPEG with vips jpegload and uses vipsheader to verify the image reports exactly three bands.
vips jpegsave q=90 larger than q=10 Port / libjpeg-turbo / usage-vips-r9-jpegsave-q90-vs-q10-size Passed
Encodes the same source image with vips jpegsave at Q=10 and Q=90 and verifies the higher-quality output is strictly larger on disk.
vips jpegsave with trellis quantisation produces valid JPEG Port / libjpeg-turbo / usage-vips-r9-jpegsave-trellis-quant Passed
Encodes a small image via vips jpegsave with --trellis-quant and confirms the output JPEG decodes back through vipsheader with the expected dimensions.
vips reduce jpeg Port / libjpeg-turbo / usage-vips-reduce-jpeg Passed
vips reduceh JPEG horizontal-only reduction Port / libjpeg-turbo / usage-vips-reduceh-jpeg Passed
Reduces a JPEG horizontally only via vips reduceh and verifies the width shrinks while the height is unchanged.
vips reducev JPEG vertical-only reduction Port / libjpeg-turbo / usage-vips-reducev-jpeg Passed
Reduces a JPEG vertically only via vips reducev and verifies the height shrinks while the width is unchanged.
vips relational_const less threshold on JPEG Port / libjpeg-turbo / usage-vips-relational-const-threshold-jpeg Passed
Encodes a mid-gray PPM as JPEG via cjpeg, applies vips relational_const with the less operator and a threshold of 200 to produce a uchar mask that is 255 wherever the pixel value is below 200, and verifies the mask has matching dimensions and the expected band count.
vips replicate tiles JPEG Port / libjpeg-turbo / usage-vips-replicate-tile-jpeg Passed
Replicates a JPEG into a 2x3 tile grid with vips and verifies the output dimensions via vipsheader -a.
vips doubles JPEG size Port / libjpeg-turbo / usage-vips-resize-double-jpeg Passed
vips rotates JPEG 180 Port / libjpeg-turbo / usage-vips-rot180-jpeg Passed
vips rotates JPEG 270 degrees Port / libjpeg-turbo / usage-vips-rot270-jpeg Passed
vips rotates JPEG Port / libjpeg-turbo / usage-vips-rotate-jpeg Passed
vips shrink-on-load JPEG Port / libjpeg-turbo / usage-vips-shrink-jpeg Passed
vips smartcrop JPEG Port / libjpeg-turbo / usage-vips-smartcrop-jpeg Passed
Crops a JPEG to a smaller window via vips smartcrop and verifies the output dimensions and JPEG magic.
vips smartcrop interesting=low JPEG Port / libjpeg-turbo / usage-vips-smartcrop-low-jpeg Passed
Crops a JPEG to a smaller window using vips smartcrop with interesting=low (the least salient region) and verifies the output JPEG has the requested dimensions and JPEG magic.
vips stats jpeg Port / libjpeg-turbo / usage-vips-stats-jpeg Passed
vips subsample 2x JPEG Port / libjpeg-turbo / usage-vips-subsample-2x-jpeg Passed
Subsamples a JPEG by integer factors of 2 in x and y via vips subsample and verifies the output halves the dimensions reported by vipsheader -a.
vips thumbnail jpeg Port / libjpeg-turbo / usage-vips-thumbnail-jpeg Passed
vipsheader all metadata jpeg Port / libjpeg-turbo / usage-vips-vipsheader-all-jpeg Passed
vipsheader -f single field on JPEG Port / libjpeg-turbo / usage-vips-vipsheader-format-jpeg Passed
Uses vipsheader -f to fetch individual header fields (width, height, bands, vips-loader) from a JPEG one at a time and verifies each matches the expected value with no other output present.
vips zoom 2x JPEG Port / libjpeg-turbo / usage-vips-zoom-2x-jpeg Passed
Zooms a JPEG by an integer factor of 2 with vips zoom and verifies that the output width and height doubled via vipsheader -a.
vips rot d90 rotates JPEG by 90 degrees Port / libjpeg-turbo / usage-vipsedit-orientation-jpeg Passed
Saves a JPEG via cjpeg with non-square dimensions (4x3), runs vips rot d90 to rotate it 90 degrees clockwise, and verifies vipsheader reports swapped dimensions (3x4) on the rotated output while the file remains a valid JPEG.
vipsthumbnail --linear JPEG output Port / libjpeg-turbo / usage-vipsthumbnail-linear-jpeg Passed
Generates a JPEG thumbnail with vipsthumbnail --linear (linear-light shrink) at a 16-pixel size and confirms the output is a JPEG whose long edge equals 16, exercising libjpeg-turbo's decode + re-encode through the linear pipeline.
CVE-2017-15232 libjpeg-turbo regression Port / libjpeg-turbo / cve-2017-15232 Passed
Asserts that djpeg with color-quantization enabled handles a small JPEG without crashing during scanline output, the historic surface for the jpeg_skip_scanlines NULL dereference.
CVE-2018-1152 libjpeg-turbo regression Port / libjpeg-turbo / cve-2018-1152 Passed
Asserts that tjLoadImage rejects a malformed BMP whose width drives bytes-per-row arithmetic to overflow without raising a divide-by-zero floating-point exception.
CVE-2018-11813 libjpeg-turbo regression Port / libjpeg-turbo / cve-2018-11813 Passed
Asserts that cjpeg's Targa reader handles an input whose Targa header is valid but whose pixel data is truncated without entering a large output-amplification loop.
CVE-2019-13960 libjpeg-turbo regression Port / libjpeg-turbo / cve-2019-13960 Passed
Asserts that djpeg rejects a truncated progressive JPEG payload in bounded time instead of consuming excessive memory while parsing crafted progressive-scan structure.
CVE-2020-35538 libjpeg-turbo regression Port / libjpeg-turbo / cve-2020-35538 Passed
Asserts that djpeg decodes a 4:2:0 subsampled JPEG with merged upsampling and color conversion enabled without crashing during scanline copy, the surface that triggered the jpeg_skip_scanlines NULL dereference.
CVE-2021-20205 libjpeg-turbo regression Port / libjpeg-turbo / cve-2021-20205 Passed
Asserts that cjpeg's GIF reader rejects a malformed GIF whose declared image width is zero without raising a divide-by-zero exception during conversion.