From c4fb1d886f0208f50e3f2593fb3c483b4a42a8a2 Mon Sep 17 00:00:00 2001 From: Johannes 'josch' Schauer Date: Thu, 27 Aug 2020 00:56:32 +0200 Subject: [PATCH] remove magick.py and test.sh --- magick.py | 353 ------------ test.sh | 1631 ----------------------------------------------------- 2 files changed, 1984 deletions(-) delete mode 100755 magick.py delete mode 100755 test.sh diff --git a/magick.py b/magick.py deleted file mode 100755 index 1a074a1..0000000 --- a/magick.py +++ /dev/null @@ -1,353 +0,0 @@ -#!/usr/bin/env python3 - -import sys -import numpy -import scipy.signal -import zlib -import struct - - -def find_closest_palette_color(color, palette): - if color.ndim == 0: - idx = (numpy.abs(palette - color)).argmin() - else: - # naive distance function by computing the euclidean distance in RGB space - idx = ((palette - color) ** 2).sum(axis=-1).argmin() - return palette[idx] - - -def floyd_steinberg(img, palette): - result = numpy.array(img, copy=True) - for y in range(result.shape[0]): - for x in range(result.shape[1]): - oldpixel = result[y, x] - newpixel = find_closest_palette_color(oldpixel, palette) - quant_error = oldpixel - newpixel - result[y, x] = newpixel - if x + 1 < result.shape[1]: - result[y, x + 1] += quant_error * 7 / 16 - if y + 1 < result.shape[0]: - result[y + 1, x - 1] += quant_error * 3 / 16 - result[y + 1, x] += quant_error * 5 / 16 - if x + 1 < result.shape[1] and y + 1 < result.shape[0]: - result[y + 1, x + 1] += quant_error * 1 / 16 - return result - - -def convolve_rgba(img, kernel): - return numpy.stack( - ( - scipy.signal.convolve2d(img[:, :, 0], kernel, "same"), - scipy.signal.convolve2d(img[:, :, 1], kernel, "same"), - scipy.signal.convolve2d(img[:, :, 2], kernel, "same"), - scipy.signal.convolve2d(img[:, :, 3], kernel, "same"), - ), - axis=-1, - ) - - -def rgb2gray(img): - result = numpy.zeros((60, 60), dtype=numpy.dtype("int64")) - for y in range(img.shape[0]): - for x in range(img.shape[1]): - clin = sum(img[y, x] * [0.2126, 0.7152, 0.0722]) / 0xFFFF - if clin <= 0.0031308: - csrgb = 12.92 * clin - else: - csrgb = 1.055 * clin ** (1 / 2.4) - 0.055 - result[y, x] = csrgb * 0xFFFF - return result - - -def palettize(img, pal): - result = numpy.zeros((img.shape[0], img.shape[1]), dtype=numpy.dtype("int64")) - for y in range(img.shape[0]): - for x in range(img.shape[1]): - for i, col in enumerate(pal): - if numpy.array_equal(img[y, x], col): - result[y, x] = i - break - else: - raise Exception() - return result - - -# we cannot use zlib.compress() because different compressors may compress the -# same data differently, for example by using different optimizations on -# different architectures: -# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/R7GD4L5Z6HELCDAL2RDESWR2F3ZXHWVX/ -# -# to make the compressed representation of the uncompressed data bit-by-bit -# identical on all platforms we make use of the compression method 0, that is, -# no compression at all :) -def compress(data): - # two-byte zlib header (rfc1950) - # common header for lowest compression level - # bits 0-3: Compression info, base-2 logarithm of the LZ77 window size, - # minus eight -- 7 indicates a 32K window size - # bits 4-7: Compression method -- 8 is deflate - # bits 8-9: Compression level -- 0 is fastest - # bit 10: preset dictionary -- 0 is none - # bits 11-15: check bits so that the 16-bit unsigned integer stored in MSB - # order is a multiple of 31 - result = b"\x78\x01" - # content is stored in deflate format (rfc1951) - # maximum chunk size is the largest 16 bit unsigned integer - chunksize = 0xFFFF - for i in range(0, len(data), chunksize): - # bits 0-4 are unused - # bits 5-6 indicate compression method -- 0 is no compression - # bit 7 indicates the last chunk - if i * chunksize < len(data) - chunksize: - result += b"\x00" - else: - # last chunck - result += b"\x01" - chunk = data[i : i + chunksize] - # the chunk length as little endian 16 bit unsigned integer - result += struct.pack("I", zlib.adler32(data)) - return result - - -def write_png(data, path, bitdepth, colortype, palette=None): - with open(path, "wb") as f: - f.write(b"\x89PNG\r\n\x1A\n") - # PNG image type Colour type Allowed bit depths - # Greyscale 0 1, 2, 4, 8, 16 - # Truecolour 2 8, 16 - # Indexed-colour 3 1, 2, 4, 8 - # Greyscale with alpha 4 8, 16 - # Truecolour with alpha 6 8, 16 - block = b"IHDR" + struct.pack( - ">IIBBBBB", - data.shape[1], # width - data.shape[0], # height - bitdepth, # bitdepth - colortype, # colortype - 0, # compression - 0, # filtertype - 0, # interlaced - ) - f.write( - struct.pack(">I", len(block) - 4) - + block - + struct.pack(">I", zlib.crc32(block)) - ) - if palette is not None: - block = b"PLTE" - for col in palette: - block += struct.pack(">BBB", col[0], col[1], col[2]) - f.write( - struct.pack(">I", len(block) - 4) - + block - + struct.pack(">I", zlib.crc32(block)) - ) - raw = b"" - for y in range(data.shape[0]): - raw += b"\0" - if bitdepth == 16: - raw += data[y].astype(">u2").tobytes() - elif bitdepth == 8: - raw += data[y].astype(">u1").tobytes() - elif bitdepth in [4, 2, 1]: - valsperbyte = 8 // bitdepth - for x in range(0, data.shape[1], valsperbyte): - val = 0 - for j in range(valsperbyte): - if x + j >= data.shape[1]: - break - val |= (data[y, x + j].astype(">u2") & (2 ** bitdepth - 1)) << ( - (valsperbyte - j - 1) * bitdepth - ) - raw += struct.pack(">B", val) - else: - raise Exception() - compressed = compress(raw) - block = b"IDAT" + compressed - f.write( - struct.pack(">I", len(compressed)) - + block - + struct.pack(">I", zlib.crc32(block)) - ) - block = b"IEND" - f.write(struct.pack(">I", 0) + block + struct.pack(">I", zlib.crc32(block))) - - -def main(): - outdir = sys.argv[1] - - # create a 256 color palette by first writing 16 shades of gray - # and then writing an array of RGB colors with 6, 8 and 5 levels - # for red, green and blue, respectively - pal8 = numpy.zeros((256, 3), dtype=numpy.dtype("int64")) - i = 0 - for gray in range(15, 255, 15): - pal8[i] = [gray, gray, gray] - i += 1 - for red in 0, 0x33, 0x66, 0x99, 0xCC, 0xFF: - for green in 0, 0x24, 0x49, 0x6D, 0x92, 0xB6, 0xDB, 0xFF: - for blue in 0, 0x40, 0x80, 0xBF, 0xFF: - pal8[i] = [red, green, blue] - i += 1 - assert i == 256 - - # windows 16 color palette - pal4 = numpy.array( - [ - [0x00, 0x00, 0x00], - [0x80, 0x00, 0x00], - [0x00, 0x80, 0x00], - [0x80, 0x80, 0x00], - [0x00, 0x00, 0x80], - [0x80, 0x00, 0x80], - [0x00, 0x80, 0x80], - [0xC0, 0xC0, 0xC0], - [0x80, 0x80, 0x80], - [0xFF, 0x00, 0x00], - [0x00, 0xFF, 0x00], - [0xFF, 0x00, 0x00], - [0x00, 0xFF, 0x00], - [0xFF, 0x00, 0xFF], - [0x00, 0xFF, 0x00], - [0xFF, 0xFF, 0xFF], - ], - dtype=numpy.dtype("int64"), - ) - - # choose values slightly off red, lime and blue because otherwise - # imagemagick will classify the image as Depth: 8/1-bit - pal2 = numpy.array( - [[0, 0, 0], [0xFE, 0, 0], [0, 0xFE, 0], [0, 0, 0xFE]], - dtype=numpy.dtype("int64"), - ) - - # don't choose black and white or otherwise imagemagick will classify the - # image as bilevel with 8/1-bit depth instead of palette with 8-bit color - # don't choose gray colors or otherwise imagemagick will classify the - # image as grayscale - pal1 = numpy.array( - [[0x01, 0x02, 0x03], [0xFE, 0xFD, 0xFC]], dtype=numpy.dtype("int64") - ) - - # gaussian kernel with sigma=3 - kernel = numpy.array( - [ - [0.011362, 0.014962, 0.017649, 0.018648, 0.017649, 0.014962, 0.011362], - [0.014962, 0.019703, 0.02324, 0.024556, 0.02324, 0.019703, 0.014962], - [0.017649, 0.02324, 0.027413, 0.028964, 0.027413, 0.02324, 0.017649], - [0.018648, 0.024556, 0.028964, 0.030603, 0.028964, 0.024556, 0.018648], - [0.017649, 0.02324, 0.027413, 0.028964, 0.027413, 0.02324, 0.017649], - [0.014962, 0.019703, 0.02324, 0.024556, 0.02324, 0.019703, 0.014962], - [0.011362, 0.014962, 0.017649, 0.018648, 0.017649, 0.014962, 0.011362], - ], - numpy.float, - ) - - # constructs a 2D array of a circle with a width of 36 - circle = list() - offsets_36 = [14, 11, 9, 7, 6, 5, 4, 3, 3, 2, 2, 1, 1, 1, 0, 0, 0, 0] - for offs in offsets_36 + offsets_36[::-1]: - circle.append([0] * offs + [1] * (len(offsets_36) - offs) * 2 + [0] * offs) - - alpha = numpy.zeros((60, 60, 4), dtype=numpy.dtype("int64")) - - # draw three circles - for (xpos, ypos, color) in [ - (12, 3, [0xFFFF, 0, 0, 0xFFFF]), - (21, 21, [0, 0xFFFF, 0, 0xFFFF]), - (3, 21, [0, 0, 0xFFFF, 0xFFFF]), - ]: - for x, row in enumerate(circle): - for y, pos in enumerate(row): - if pos: - alpha[y + ypos, x + xpos] += color - alpha = numpy.clip(alpha, 0, 0xFFFF) - alpha = convolve_rgba(alpha, kernel) - - write_png(alpha, outdir + "/alpha.png", 16, 6) - - normal16 = alpha[:, :, 0:3] - write_png(normal16, outdir + "/normal16.png", 16, 2) - - write_png(normal16 / 0xFFFF * 0xFF, outdir + "/normal.png", 8, 2) - - write_png(0xFF - normal16 / 0xFFFF * 0xFF, outdir + "/inverse.png", 8, 2) - - gray16 = rgb2gray(normal16) - - write_png(gray16, outdir + "/gray16.png", 16, 0) - - write_png(gray16 / 0xFFFF * 0xFF, outdir + "/gray8.png", 8, 0) - - write_png( - floyd_steinberg(gray16, numpy.arange(16) / 0xF * 0xFFFF) / 0xFFFF * 0xF, - outdir + "/gray4.png", - 4, - 0, - ) - - write_png( - floyd_steinberg(gray16, numpy.arange(4) / 0x3 * 0xFFFF) / 0xFFFF * 0x3, - outdir + "/gray2.png", - 2, - 0, - ) - - write_png( - floyd_steinberg(gray16, numpy.arange(2) / 0x1 * 0xFFFF) / 0xFFFF * 0x1, - outdir + "/gray1.png", - 1, - 0, - ) - - write_png( - palettize( - floyd_steinberg(normal16, pal8 * 0xFFFF / 0xFF) / 0xFFFF * 0xFF, pal8 - ), - outdir + "/palette8.png", - 8, - 3, - pal8, - ) - - write_png( - palettize( - floyd_steinberg(normal16, pal4 * 0xFFFF / 0xFF) / 0xFFFF * 0xFF, pal4 - ), - outdir + "/palette4.png", - 4, - 3, - pal4, - ) - - write_png( - palettize( - floyd_steinberg(normal16, pal2 * 0xFFFF / 0xFF) / 0xFFFF * 0xFF, pal2 - ), - outdir + "/palette2.png", - 2, - 3, - pal2, - ) - - write_png( - palettize( - floyd_steinberg(normal16, pal1 * 0xFFFF / 0xFF) / 0xFFFF * 0xFF, pal1 - ), - outdir + "/palette1.png", - 1, - 3, - pal1, - ) - - -if __name__ == "__main__": - main() diff --git a/test.sh b/test.sh deleted file mode 100755 index f33e036..0000000 --- a/test.sh +++ /dev/null @@ -1,1631 +0,0 @@ -#!/bin/sh - -set -eu - -similar() -{ - psnr=$(compare -metric PSNR "$1" "$2" null: 2>&1 || true) - if [ -z "$psnr" ]; then - echo "compare failed" - return 1 - fi - - # PSNR of zero means that they are identical - if [ "$psnr" = 0 ]; then - echo "images are equal -- don't use similar() but require exactness" - exit 2 - fi - - # The lower PSNR value, the fewer the similarities - # The lowest (and worst) value is 1.0 - # head -n == --lines, but more portable (MacOS) - min_psnr=50 - if [ "$min_psnr" != "$( printf "$psnr\n$min_psnr\n" | sort --general-numeric-sort | head -n1)" ]; then - echo "pdf wrongly rendered" - return 1 - fi - return 0 -} - -compare_rendered() -{ - pdf="$1" - img="$2" - gsdevice=png16m - if [ "$#" -eq 3 ]; then - gsdevice="$3" - fi - - compare_ghostscript "$pdf" "$img" "$gsdevice" - - compare_poppler "$pdf" "$img" - - compare_mupdf "$pdf" "$img" -} - -compare_ghostscript() -{ - pdf="$1" - img="$2" - gsdevice="$3" - gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE="$gsdevice" -r96 -sOutputFile="$tempdir/gs-%00d.png" "$pdf" - compare -metric AE "$img" "$tempdir/gs-1.png" null: 2>/dev/null - rm "$tempdir/gs-1.png" -} - -compare_poppler() -{ - pdf="$1" - img="$2" - pdftocairo -r 96 -png "$pdf" "$tempdir/poppler" - compare -metric AE "$img" "$tempdir/poppler-1.png" null: 2>/dev/null - rm "$tempdir/poppler-1.png" -} - -compare_mupdf() -{ - pdf="$1" - img="$2" - mutool draw -o "$tempdir/mupdf.png" -r 96 "$pdf" 2>/dev/null - if [ "$(uname)" != "Darwin" ]; then # mupdf is not pixel perfect on Darwin - compare -metric AE "$img" "$tempdir/mupdf.png" null: 2>/dev/null - fi - rm "$tempdir/mupdf.png" -} - -compare_pdfimages() -{ - pdf="$1" - img="$2" - pdfimages -png "$pdf" "$tempdir/images" - compare -metric AE "$img" "$tempdir/images-000.png" null: 2>/dev/null - rm "$tempdir/images-000.png" -} - -checkpdf() -{ - python3 -c 'import pikepdf,sys; p=pikepdf.open(sys.argv[1]);exit(sum([not eval("p.pages[0]."+l) for l in sys.stdin]))' "$1" -} - -error() -{ - echo test $j failed - echo intermediate data is left in $tempdir - exit 1 -} - -# -d == --directory, -t == --template, but more portable (MacOS, FreeBSD) -tempdir=$(mktemp -d -t img2pdf.XXXXXXXXXX) - -trap error EXIT - -# instead of using imagemagick to craft the test input, we use a custom python -# script. This is because the output of imagemagick is not bit-by-bit identical -# across versions and architectures. -# See https://gitlab.mister-muffin.de/josch/img2pdf/issues/56 -python3 magick.py "$tempdir" - -if [ "$(uname)" = "Darwin" ]; then - status_arg= -else - status_arg=--status -fi - -cat << END | ( cd "$tempdir"; md5sum --check $status_arg - ) -cc611e80cde3b9b7adb7723801a4e5d4 alpha.png -706175887af8ca1a33cfd93449f970df gray16.png -ff4d9f18de39be879926be2e65990167 gray1.png -d51900476658a1c9dd26a7b27db8a21f gray2.png -722223ba74be9cba1af4a549076b70d3 gray4.png -2320216faa5a10bf0f5f04ebce07f8e1 gray8.png -35a47d6ae6de8c9d0b31aa0cda8648f3 inverse.png -6ad810399058a87d8145d8d9a7734da5 normal16.png -c8d2e1f116f31ecdeae050524efca7b6 normal.png -18a3dfca369f976996ef93389ddfad61 palette1.png -d38646afa6fa0714be9badef25ff9392 palette2.png -e1c59e68a68fca3273b6dc164d526ed7 palette4.png -50bf09eb3571901f0bf642b9a733038c palette8.png -END - -# use img2pdfprog environment variable if it is set -if [ -z ${img2pdfprog+x} ]; then - img2pdfprog=src/img2pdf.py -fi - -available_engines="internal" - -if python3 -c "import pdfrw" 2>/dev/null; then - available_engines="$available_engines pdfrw" -fi -if python3 -c "import pikepdf" 2>/dev/null; then - available_engines="$available_engines pikepdf" -fi - -img2pdf() -{ - $img2pdfprog --producer="" --nodate --engine="$1" "$2" > "$3" 2>/dev/null -} - -tests=51 # number of tests -j=1 # current test - -############################################################################### -echo "Test $j/$tests JPEG" - -convert "$tempdir/normal.png" "$tempdir/normal.jpg" - -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Format: JPEG (Joint Photographic Experts Group JFIF format)$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Mime type: image/jpeg$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf" - -# We have to use jpegtopnm with the original JPG before being able to compare -# it with imagemagick because imagemagick will decode the JPG slightly -# differently than ghostscript, poppler and mupdf do it. -# We have to use jpegtopnm and cannot use djpeg because the latter produces -# slightly different results as well when called like this: -# djpeg -dct int -pnm "$tempdir/normal.jpg" > "$tempdir/normal.pnm" -# An alternative way to compare the JPG would be to require a different DCT -# method when decoding by setting -define jpeg:dct-method=ifast in the -# compare command. -jpegtopnm -dct int "$tempdir/normal.jpg" > "$tempdir/normal.pnm" 2>/dev/null - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal.pnm" - -pdfimages -j "$tempdir/out.pdf" "$tempdir/images" -cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg" -rm "$tempdir/images-000.jpg" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.Filter == "/DCTDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/normal.jpg" "$tempdir/normal.pnm" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests JPEG (90° rotated)" - -convert "$tempdir/normal.png" "$tempdir/normal.jpg" -exiftool -overwrite_original -all= "$tempdir/normal.jpg" -n >/dev/null -exiftool -overwrite_original -Orientation=6 -XResolution=96 -YResolution=96 -n "$tempdir/normal.jpg" >/dev/null - -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Format: JPEG (Joint Photographic Experts Group JFIF format)$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Mime type: image/jpeg$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Resolution: 96x96$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Units: PixelsPerInch$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Orientation: RightTop$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf" - -# We have to use jpegtopnm with the original JPG before being able to compare -# it with imagemagick because imagemagick will decode the JPG slightly -# differently than ghostscript, poppler and mupdf do it. -# We have to use jpegtopnm and cannot use djpeg because the latter produces -# slightly different results as well when called like this: -# djpeg -dct int -pnm "$tempdir/normal.jpg" > "$tempdir/normal.pnm" -# An alternative way to compare the JPG would be to require a different DCT -# method when decoding by setting -define jpeg:dct-method=ifast in the -# compare command. -jpegtopnm -dct int "$tempdir/normal.jpg" > "$tempdir/normal.pnm" 2>/dev/null -convert -rotate "90" "$tempdir/normal.pnm" "$tempdir/normal_rotated.png" -#convert -rotate "0" "$tempdir/normal.pnm" "$tempdir/normal_rotated.png" - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal_rotated.png" - -pdfimages -j "$tempdir/out.pdf" "$tempdir/images" -cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg" -rm "$tempdir/images-000.jpg" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.Filter == "/DCTDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -Rotate == 90 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/normal.jpg" "$tempdir/normal.pnm" "$tempdir/normal_rotated.png" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests JPEG CMYK" - -convert "$tempdir/normal.png" -colorspace cmyk "$tempdir/normal.jpg" - -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Format: JPEG (Joint Photographic Experts Group JFIF format)$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Mime type: image/jpeg$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Colorspace: CMYK$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Type: ColorSeparation$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jpg" | grep --quiet '^ Compression: JPEG$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.jpg" "$tempdir/out.pdf" - -gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE=tiff32nc -r96 -sOutputFile="$tempdir/gs-%00d.tiff" "$tempdir/out.pdf" -similar "$tempdir/normal.jpg" "$tempdir/gs-1.tiff" -rm "$tempdir/gs-1.tiff" - -# not testing with poppler as it cannot write CMYK images - -mutool draw -o "$tempdir/mupdf.pam" -r 96 -c cmyk "$pdf" 2>/dev/null -similar "$tempdir/normal.jpg" "$tempdir/mupdf.pam" -rm "$tempdir/mupdf.pam" - -pdfimages -j "$tempdir/out.pdf" "$tempdir/images" -cmp "$tempdir/normal.jpg" "$tempdir/images-000.jpg" -rm "$tempdir/images-000.jpg" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceCMYK" -Resources.XObject.Im0.Decode == pikepdf.Array([ 1, 0, 1, 0, 1, 0, 1, 0 ]) -Resources.XObject.Im0.Filter == "/DCTDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/normal.jpg" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests JPEG2000" - -convert "$tempdir/normal.png" "$tempdir/normal.jp2" - -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Format: JP2 (JPEG-2000 File Format Syntax)$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Mime type: image/jp2$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.jp2" | grep --quiet '^ Compression: JPEG2000$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.jp2" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal.jp2" - -pdfimages -jp2 "$tempdir/out.pdf" "$tempdir/images" -cmp "$tempdir/normal.jp2" "$tempdir/images-000.jp2" -rm "$tempdir/images-000.jp2" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.Filter == "/JPXDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/normal.jp2" -j=$((j+1)) - -############################################################################### -#echo Test JPEG2000 CMYK -# -# cannot test because imagemagick does not support JPEG2000 CMYK - -############################################################################### -echo "Test $j/$tests PNG RGB8" - -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 8$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.bit_depth: 8$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.color-type-orig: 2$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$' -identify -verbose "$tempdir/normal.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.png" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal.png" - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.png" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 3 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG RGB16" - -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 16$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.bit_depth: 16$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.color-type-orig: 2$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$' -identify -verbose "$tempdir/normal16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal16.png" "$tempdir/out.pdf" - -compare_ghostscript "$tempdir/out.pdf" "$tempdir/normal16.png" tiff48nc - -# poppler outputs 8-bit RGB so the comparison will not be exact -pdftocairo -r 96 -png "$tempdir/out.pdf" "$tempdir/poppler" -similar "$tempdir/normal16.png" "$tempdir/poppler-1.png" -rm "$tempdir/poppler-1.png" - -# pdfimages is unable to write 16 bit output - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 16 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 16 -Resources.XObject.Im0.DecodeParms.Colors == 3 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG RGBA8" - -convert "$tempdir/alpha.png" -depth 8 -strip "$tempdir/alpha8.png" - -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Type: TrueColorAlpha$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 8$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.bit_depth: 8$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.color-type-orig: 6$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.color_type: 6 (RGBA)$' -identify -verbose "$tempdir/alpha8.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha8.png" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha8.png" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG RGBA16" - -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Type: TrueColorAlpha$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 16$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.bit_depth: 16$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.color-type-orig: 6$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.color_type: 6 (RGBA)$' -identify -verbose "$tempdir/alpha.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha.png" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG Gray8 Alpha" - -convert "$tempdir/alpha.png" -colorspace Gray -dither FloydSteinberg -colors 256 -depth 8 -strip "$tempdir/alpha_gray8.png" - -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Colorspace: Gray$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Type: GrayscaleAlpha$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 8$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.bit_depth: 8$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.color-type-orig: 4$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.color_type: 4 (GrayAlpha)$' -identify -verbose "$tempdir/alpha_gray8.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha_gray8.png" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha_gray8.png" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG Gray16 Alpha" - -convert "$tempdir/alpha.png" -colorspace Gray -depth 16 -strip "$tempdir/alpha_gray16.png" - -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Colorspace: Gray$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Type: GrayscaleAlpha$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 16$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.bit_depth: 16$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.color-type-orig: 4$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.color_type: 4 (GrayAlpha)$' -identify -verbose "$tempdir/alpha_gray16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha_gray16.png" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha_gray16.png" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests PNG interlaced" - -convert "$tempdir/normal.png" -interlace PNG -strip "$tempdir/interlace.png" - -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 8$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.bit_depth: 8$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.color-type-orig: 2$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.color_type: 2 (Truecolor)$' -identify -verbose "$tempdir/interlace.png" | grep --quiet '^ png:IHDR.interlace_method: 1 (Adam7 method)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/interlace.png" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal.png" - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.png" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 3 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/interlace.png" -j=$((j+1)) - -############################################################################### -for i in 1 2 4 8; do - echo "Test $j/$tests PNG Gray$i" - - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Mime type: image/png$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Colorspace: Gray$' - if [ "$i" -eq 1 ]; then - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Type: Bilevel$' - else - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Type: Grayscale$' - fi - if [ "$i" -eq 8 ]; then - identify -verbose "$tempdir/gray$i.png" | grep --quiet "^ Depth: 8-bit$" - else - identify -verbose "$tempdir/gray$i.png" | grep --quiet "^ Depth: 8/$i-bit$" - fi - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ Compression: Zip$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet "^ png:IHDR.bit-depth-orig: $i$" - identify -verbose "$tempdir/gray$i.png" | grep --quiet "^ png:IHDR.bit_depth: $i$" - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ png:IHDR.color-type-orig: 0$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ png:IHDR.color_type: 0 (Grayscale)$' - identify -verbose "$tempdir/gray$i.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - - for engine in $available_engines; do - img2pdf $engine "$tempdir/gray$i.png" "$tempdir/out.pdf" - - compare_rendered "$tempdir/out.pdf" "$tempdir/gray$i.png" pnggray - - compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray$i.png" - - cat << END | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == $i -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - rm "$tempdir/out.pdf" - done - - j=$((j+1)) -done - -############################################################################### -echo "Test $j/$tests PNG Gray16" - -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Mime type: image/png$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Colorspace: Gray$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Type: Grayscale$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.bit-depth-orig: 16$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.bit_depth: 16$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.color-type-orig: 0$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.color_type: 0 (Grayscale)$' -identify -verbose "$tempdir/gray16.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/gray16.png" "$tempdir/out.pdf" - -# ghostscript outputs 8-bit grayscale, so the comparison will not be exact -gs -dQUIET -dNOPAUSE -dBATCH -sDEVICE=pnggray -r96 -sOutputFile="$tempdir/gs-%00d.png" "$tempdir/out.pdf" -similar "$tempdir/gray16.png" "$tempdir/gs-1.png" -rm "$tempdir/gs-1.png" - -# poppler outputs 8-bit grayscale so the comparison will not be exact -pdftocairo -r 96 -png "$tempdir/out.pdf" "$tempdir/poppler" -similar "$tempdir/gray16.png" "$tempdir/poppler-1.png" -rm "$tempdir/poppler-1.png" - -# pdfimages outputs 8-bit grayscale so the comparison will not be exact -pdfimages -png "$tempdir/out.pdf" "$tempdir/images" -similar "$tempdir/gray16.png" "$tempdir/images-000.png" -rm "$tempdir/images-000.png" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 16 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 16 -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -j=$((j+1)) - -############################################################################### -for i in 1 2 4 8; do - echo "Test $j/$tests PNG Palette$i" - - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Format: PNG (Portable Network Graphics)$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Mime type: image/png$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Colorspace: sRGB$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Type: Palette$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Depth: 8-bit$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ Compression: Zip$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet "^ png:IHDR.bit-depth-orig: $i$" - identify -verbose "$tempdir/palette$i.png" | grep --quiet "^ png:IHDR.bit_depth: $i$" - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ png:IHDR.color-type-orig: 3$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ png:IHDR.color_type: 3 (Indexed)$' - identify -verbose "$tempdir/palette$i.png" | grep --quiet '^ png:IHDR.interlace_method: 0 (Not interlaced)$' - - for engine in $available_engines; do - if [ $engine = "pdfrw" ]; then - continue - fi - img2pdf $engine "$tempdir/palette$i.png" "$tempdir/out.pdf" - - compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png" - - # pdfimages cannot export palette based images - - cat << END | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == $i -Resources.XObject.Im0.ColorSpace[0] == "/Indexed" -Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - rm "$tempdir/out.pdf" - done - - j=$((j+1)) -done - -############################################################################### -echo "Test $j/$tests GIF transparent" - -convert "$tempdir/alpha.png" "$tempdir/alpha.gif" - -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Format: GIF (CompuServe graphics interchange format)$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Mime type: image/gif$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Type: PaletteAlpha$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Colormap entries: 256$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha.gif" | grep --quiet '^ Compression: LZW$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha.gif" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha.gif" -j=$((j+1)) - -############################################################################### -for i in 1 2 4 8; do - echo "Test $j/$tests GIF Palette$i" - - convert "$tempdir/palette$i.png" "$tempdir/palette$i.gif" - - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Format: GIF (CompuServe graphics interchange format)$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Mime type: image/gif$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Colorspace: sRGB$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Type: Palette$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Depth: 8-bit$' - case $i in - 1) identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Colormap entries: 2$';; - 2) identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Colormap entries: 4$';; - 4) identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Colormap entries: 16$';; - 8) identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Colormap entries: 256$';; - esac - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.gif" | grep --quiet '^ Compression: LZW$' - - for engine in $available_engines; do - if [ $engine = "pdfrw" ]; then - continue - fi - img2pdf $engine "$tempdir/palette$i.gif" "$tempdir/out.pdf" - - compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png" - - # pdfimages cannot export palette based images - - cat << END | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == $i -Resources.XObject.Im0.ColorSpace[0] == "/Indexed" -Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - rm "$tempdir/out.pdf" - done - - rm "$tempdir/palette$i.gif" - j=$((j+1)) -done - -############################################################################### -echo "Test $j/$tests GIF animation" - -convert "$tempdir/normal.png" "$tempdir/inverse.png" -strip "$tempdir/animation.gif" - -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Format: GIF (CompuServe graphics interchange format)$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Mime type: image/gif$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Type: Palette$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Colormap entries: 256$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/animation.gif[0]" | grep --quiet '^ Compression: LZW$' - -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Format: GIF (CompuServe graphics interchange format)$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Mime type: image/gif$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Type: Palette$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Colormap entries: 256$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Compression: LZW$' -identify -verbose "$tempdir/animation.gif[1]" | grep --quiet '^ Scene: 1$' - -for engine in $available_engines; do -if [ $engine = "pdfrw" ]; then - continue -fi -img2pdf $engine "$tempdir/animation.gif" "$tempdir/out.pdf" - -if [ "$(pdfinfo "$tempdir/out.pdf" | awk '/Pages:/ {print $2}')" != 2 ]; then - echo "pdf does not have 2 pages" - exit 1 -fi - -pdfseparate "$tempdir/out.pdf" "$tempdir/page-%d.pdf" -rm "$tempdir/out.pdf" - -for page in 1 2; do - compare_rendered "$tempdir/page-$page.pdf" "$tempdir/animation.gif[$((page-1))]" - - # pdfimages cannot export palette based images - - cat << END | checkpdf "$tempdir/page-$page.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace[0] == "/Indexed" -Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - - rm "$tempdir/page-$page.pdf" -done -done - -rm "$tempdir/animation.gif" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF float" - -convert "$tempdir/normal.png" -depth 32 -define quantum:format=floating-point "$tempdir/float.tiff" - -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Depth: 32/\(8\|16\)-bit$' # imagemagick may produce a Depth: 32/8-bit or 32/16-bit image -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ quantum:format: floating-point$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/float.tiff" | grep --quiet '^ tiff:photometric: RGB$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/float.tiff" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/float.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CMYK8" - -convert "$tempdir/normal.png" -colorspace cmyk "$tempdir/cmyk8.tiff" - -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Colorspace: CMYK$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Type: ColorSeparation$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/cmyk8.tiff" | grep --quiet '^ tiff:photometric: separated$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/cmyk8.tiff" "$tempdir/out.pdf" - -compare_ghostscript "$tempdir/out.pdf" "$tempdir/cmyk8.tiff" tiff32nc - -# not testing with poppler as it cannot write CMYK images - -mutool draw -o "$tempdir/mupdf.pam" -r 96 -c cmyk "$pdf" 2>/dev/null -compare -metric AE "$tempdir/cmyk8.tiff" "$tempdir/mupdf.pam" null: 2>/dev/null -rm "$tempdir/mupdf.pam" - -pdfimages -tiff "$tempdir/out.pdf" "$tempdir/images" -compare -metric AE "$tempdir/cmyk8.tiff" "$tempdir/images-000.tif" null: 2>/dev/null -rm "$tempdir/images-000.tif" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceCMYK" -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/cmyk8.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CMYK16" - -convert "$tempdir/normal.png" -depth 16 -colorspace cmyk "$tempdir/cmyk16.tiff" - -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Colorspace: CMYK$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Type: ColorSeparation$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/cmyk16.tiff" | grep --quiet '^ tiff:photometric: separated$' - -# PIL is unable to read 16 bit CMYK images -for engine in $available_engines; do -img2pdf $engine "$tempdir/cmyk16.gif" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/cmyk16.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF RGB8" - -convert "$tempdir/normal.png" "$tempdir/normal.tiff" - -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/normal.tiff" | grep --quiet '^ tiff:photometric: RGB$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/normal.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/normal.tiff" tiff24nc - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/normal.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 3 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/normal.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF RGBA8" - -convert "$tempdir/alpha.png" -depth 8 -strip "$tempdir/alpha8.tiff" - -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Type: TrueColorAlpha$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:alpha: unassociated$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/alpha8.tiff" | grep --quiet '^ tiff:photometric: RGB$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha8.tiff" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha8.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF RGBA16" - -convert "$tempdir/alpha.png" -strip "$tempdir/alpha16.tiff" - -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Type: TrueColorAlpha$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Depth: 16-bit$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:alpha: unassociated$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/alpha16.tiff" | grep --quiet '^ tiff:photometric: RGB$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/alpha16.tiff" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/alpha16.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF Gray1" - -convert "$tempdir/gray1.png" -depth 1 "$tempdir/gray1.tiff" - -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Colorspace: Gray$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Type: Bilevel$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Depth: 1-bit$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/gray1.tiff" | grep --quiet '^ tiff:photometric: min-is-black$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/gray1.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/gray1.png" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray1.png" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == True -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/gray1.tiff" -j=$((j+1)) - -############################################################################### -for i in 2 4 8; do - echo "Test $j/$tests TIFF Gray$i" - - convert "$tempdir/gray$i.png" -depth $i "$tempdir/gray$i.tiff" - - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Mime type: image/tiff$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Colorspace: Gray$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Type: Grayscale$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet "^ Depth: $i-bit$" - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ Compression: Zip$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ tiff:alpha: unspecified$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ tiff:endian: lsb$' - identify -verbose "$tempdir/gray$i.tiff" | grep --quiet '^ tiff:photometric: min-is-black$' - - for engine in $available_engines; do - img2pdf $engine "$tempdir/gray$i.tiff" "$tempdir/out.pdf" - - compare_rendered "$tempdir/out.pdf" "$tempdir/gray$i.png" pnggray - - compare_pdfimages "$tempdir/out.pdf" "$tempdir/gray$i.png" - - # When saving a PNG, PIL will store it as 8-bit data - cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - rm "$tempdir/out.pdf" - done - - rm "$tempdir/gray$i.tiff" - j=$((j+1)) -done - -################################################################################ -echo "Test $j/$tests TIFF Gray16" - -convert "$tempdir/gray16.png" -depth 16 "$tempdir/gray16.tiff" - -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Colorspace: Gray$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Type: Grayscale$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet "^ Depth: 16-bit$" -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/gray16.tiff" | grep --quiet '^ tiff:photometric: min-is-black$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/gray16.tiff" /dev/null && rc=$? || rc=$? -if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 -fi -done - -rm "$tempdir/gray16.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF multipage" - -convert "$tempdir/normal.png" "$tempdir/inverse.png" -strip "$tempdir/multipage.tiff" - -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/multipage.tiff[0]" | grep --quiet '^ tiff:photometric: RGB$' - -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Mime type: image/tiff$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Geometry: 60x60+0+0$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Colorspace: sRGB$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Type: TrueColor$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Endiann\?ess: LSB$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Depth: 8-bit$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Page geometry: 60x60+0+0$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Compression: Zip$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ tiff:alpha: unspecified$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ tiff:endian: lsb$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ tiff:photometric: RGB$' -identify -verbose "$tempdir/multipage.tiff[1]" | grep --quiet '^ Scene: 1$' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/multipage.tiff" "$tempdir/out.pdf" - -if [ "$(pdfinfo "$tempdir/out.pdf" | awk '/Pages:/ {print $2}')" != 2 ]; then - echo "pdf does not have 2 pages" - exit 1 -fi - -pdfseparate "$tempdir/out.pdf" "$tempdir/page-%d.pdf" -rm "$tempdir/out.pdf" - -for page in 1 2; do - compare_rendered "$tempdir/page-$page.pdf" "$tempdir/multipage.tiff[$((page-1))]" - - compare_pdfimages "$tempdir/page-$page.pdf" "$tempdir/multipage.tiff[$((page-1))]" - - cat << 'END' | checkpdf "$tempdir/page-$page.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 8 -Resources.XObject.Im0.ColorSpace == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == 8 -Resources.XObject.Im0.DecodeParms.Colors == 3 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - - rm "$tempdir/page-$page.pdf" -done -done - -rm "$tempdir/multipage.tiff" -j=$((j+1)) - -############################################################################### -for i in 1 2 4 8; do - echo "Test $j/$tests TIFF Palette$i" - - convert "$tempdir/palette$i.png" "$tempdir/palette$i.tiff" - - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Mime type: image/tiff$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colorspace: sRGB$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Type: Palette$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$' - if [ "$i" -eq 8 ]; then - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet "^ Depth: 8-bit$" - else - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet "^ Depth: $i/8-bit$" - fi - case $i in - 1) identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colormap entries: 2$';; - 2) identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colormap entries: 4$';; - 4) identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colormap entries: 16$';; - 8) identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Colormap entries: 256$';; - esac - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ Compression: Zip$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ tiff:alpha: unspecified$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ tiff:endian: lsb$' - identify -verbose "$tempdir/palette$i.tiff" | grep --quiet '^ tiff:photometric: palette$' - - for engine in $available_engines; do - if [ $engine = "pdfrw" ]; then - continue - fi - img2pdf $engine "$tempdir/palette$i.tiff" "$tempdir/out.pdf" - - compare_rendered "$tempdir/out.pdf" "$tempdir/palette$i.png" - - # pdfimages cannot export palette based images - - cat << END | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == $i -Resources.XObject.Im0.ColorSpace[0] == "/Indexed" -Resources.XObject.Im0.ColorSpace[1] == "/DeviceRGB" -Resources.XObject.Im0.DecodeParms.BitsPerComponent == $i -Resources.XObject.Im0.DecodeParms.Colors == 1 -Resources.XObject.Im0.DecodeParms.Predictor == 15 -Resources.XObject.Im0.Filter == "/FlateDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END - - rm "$tempdir/out.pdf" - done - - rm "$tempdir/palette$i.tiff" - j=$((j+1)) -done - -############################################################################### -for i in 12 14 16; do - echo "Test $j/$tests TIFF RGB$i" - - convert "$tempdir/normal16.png" -depth "$i" "$tempdir/normal$i.tiff" - - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Format: TIFF (Tagged Image File Format)$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Mime type: image/tiff$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Geometry: 60x60+0+0$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Colorspace: sRGB$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Type: TrueColor$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Endiann\?ess: LSB$' - if [ $i -eq 16 ]; then - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet "^ Depth: $i-bit$" - else - identify -verbose "$tempdir/normal$i.tiff" | egrep --quiet "^ Depth: $i(/16)?-bit$" - fi - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Page geometry: 60x60+0+0$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ Compression: Zip$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ tiff:alpha: unspecified$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ tiff:endian: lsb$' - identify -verbose "$tempdir/normal$i.tiff" | grep --quiet '^ tiff:photometric: RGB$' - - for engine in $available_engines; do - img2pdf $engine "$tempdir/normal$i.tiff" /dev/null && rc=$? || rc=$? - if [ "$rc" -eq 0 ]; then - echo needs to fail here - exit 1 - fi - done - - rm "$tempdir/normal$i.tiff" - j=$((j+1)) -done - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, little endian, msb-to-lsb, min-is-white" - -convert "$tempdir/gray1.png" -compress group4 -define tiff:endian=lsb -define tiff:fill-order=msb -define quantum:polarity=min-is-white "$tempdir/group4.tiff" -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-white' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, big endian, msb-to-lsb, min-is-white" - -convert "$tempdir/gray1.png" -compress group4 -define tiff:endian=msb -define tiff:fill-order=msb -define quantum:polarity=min-is-white "$tempdir/group4.tiff" -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-white' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: MSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: msb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, big endian, lsb-to-msb, min-is-white" - -convert "$tempdir/gray1.png" -compress group4 -define tiff:endian=msb -define tiff:fill-order=lsb -define quantum:polarity=min-is-white "$tempdir/group4.tiff" -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-white' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: lsb-to-msb' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: MSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: msb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, little endian, msb-to-lsb, min-is-black" - -# We create a min-is-black group4 tiff with PIL because it creates these by -# default (and without the option to do otherwise) whereas imagemagick only -# became able to do it through commit 00730551f0a34328685c59d0dde87dd9e366103a -# See https://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=34605 -python3 -c 'from PIL import Image;Image.open("'"$tempdir/gray1.png"'").save("'"$tempdir/group4.tiff"'",format="TIFF",compression="group4")' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-black' -# PIL doesn't set those -#tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' -#tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-black' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == True -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, without fillorder, samples/pixel, bits/sample" - -convert "$tempdir/gray1.png" -compress group4 -define tiff:endian=lsb -define tiff:fill-order=msb -define quantum:polarity=min-is-white "$tempdir/group4.tiff" -# remove BitsPerSample (258) -tiffset -u 258 "$tempdir/group4.tiff" -# remove FillOrder (266) -tiffset -u 266 "$tempdir/group4.tiff" -# remove SamplesPerPixel (277) -tiffset -u 277 "$tempdir/group4.tiff" -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' && exit 1 -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-white' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' && exit 1 -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' && exit 1 -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -############################################################################### -echo "Test $j/$tests TIFF CCITT Group4, without rows-per-strip" - -convert "$tempdir/gray1.png" -compress group4 -define tiff:endian=lsb -define tiff:fill-order=msb -define quantum:polarity=min-is-white -define tiff:rows-per-strip=4294967295 "$tempdir/group4.tiff" -# remove RowsPerStrip (278) -tiffset -u 278 "$tempdir/group4.tiff" -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Bits/Sample: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Compression Scheme: CCITT Group 4' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Photometric Interpretation: min-is-white' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'FillOrder: msb-to-lsb' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Samples/Pixel: 1' -tiffinfo "$tempdir/group4.tiff" | grep --quiet 'Rows/Strip:' && exit 1 -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Type: Bilevel' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Endian*ess: LSB' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Depth: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet '[gG]ray: 1-bit' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'Compression: Group4' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:endian: lsb' -identify -verbose "$tempdir/group4.tiff" | grep --quiet 'tiff:photometric: min-is-white' - -for engine in $available_engines; do -img2pdf $engine "$tempdir/group4.tiff" "$tempdir/out.pdf" - -compare_rendered "$tempdir/out.pdf" "$tempdir/group4.tiff" pnggray - -compare_pdfimages "$tempdir/out.pdf" "$tempdir/group4.tiff" - -cat << 'END' | checkpdf "$tempdir/out.pdf" -Contents.read_bytes() == b'q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ' -Resources.XObject.Im0.BitsPerComponent == 1 -Resources.XObject.Im0.ColorSpace == "/DeviceGray" -Resources.XObject.Im0.DecodeParms[0].BlackIs1 == False -Resources.XObject.Im0.DecodeParms[0].Columns == 60 -Resources.XObject.Im0.DecodeParms[0].K == -1 -Resources.XObject.Im0.DecodeParms[0].Rows == 60 -Resources.XObject.Im0.Filter[0] == "/CCITTFaxDecode" -Resources.XObject.Im0.Height == 60 -Resources.XObject.Im0.Width == 60 -END -rm "$tempdir/out.pdf" -done - -rm "$tempdir/group4.tiff" -j=$((j+1)) - -rm "$tempdir/alpha.png" "$tempdir/normal.png" "$tempdir/inverse.png" "$tempdir/palette1.png" "$tempdir/palette2.png" "$tempdir/palette4.png" "$tempdir/palette8.png" "$tempdir/gray8.png" "$tempdir/normal16.png" "$tempdir/gray16.png" "$tempdir/gray4.png" "$tempdir/gray2.png" "$tempdir/gray1.png" -rmdir "$tempdir" - -trap - EXIT