* Package: media-gfx/img2pdf-0.4.1-r1 * Repository: gentoo * Maintainer: sir.suriv@gmail.com proxy-maint@gentoo.org * Upstream: josch@mister-muffin.de https://gitlab.mister-muffin.de/josch/img2pdf/issues * USE: abi_x86_64 amd64 elibc_glibc kernel_linux python_targets_python3_8 python_targets_python3_9 test userland_GNU * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox @@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ This information may help you to understand if this is a duplicate or if this bug exists after you pushed a fix; This ebuild was merged at the following commit: https://github.com/gentoo/gentoo/commit/0a8af8295615e0835cad01ec26f93f950c0dfd04 (Sun Aug 22 12:22:43 UTC 2021) @@@@@ END @@@@@ @@@@@ PLEASE PAY ATTENTION HERE!!! @@@@@ This ebuild was merged (directly or as a dependency) because of the following commit: https://github.com/gentoo/gentoo/commit/0a8af8295615e0835cad01ec26f93f950c0dfd04 @@@@@ END @@@@@ ################## # emerge --info: # ################## Portage 3.0.22 (python 3.9.6-final-0, default/linux/amd64/17.1, gcc-11.2.0, glibc-2.33-r7, 4.19.174-gentoo x86_64) ================================================================= System uname: Linux-4.19.174-gentoo-x86_64-Intel-R-_Xeon-R-_CPU_E5-2650_v4_@_2.20GHz-with-glibc2.33 KiB Mem: 264046488 total, 100762340 free KiB Swap: 0 total, 0 free sh bash 5.1_p8 ld GNU ld (Gentoo 2.37_p1 p0) 2.37 app-shells/bash: 5.1_p8::gentoo dev-lang/perl: 5.34.0-r2::gentoo dev-lang/python: 2.7.18_p11::gentoo, 3.8.11::gentoo, 3.9.6_p1::gentoo, 3.10.0_rc1_p1::gentoo dev-lang/rust: 1.54.0::gentoo dev-util/cmake: 3.21.1::gentoo sys-apps/baselayout: 2.7-r3::gentoo sys-apps/openrc: 0.43.5::gentoo sys-apps/sandbox: 2.24::gentoo sys-devel/autoconf: 2.13-r1::gentoo, 2.71-r1::gentoo sys-devel/automake: 1.16.4::gentoo sys-devel/binutils: 2.37_p1::gentoo sys-devel/gcc: 11.2.0::gentoo sys-devel/gcc-config: 2.4::gentoo sys-devel/libtool: 2.4.6-r6::gentoo sys-devel/make: 4.3::gentoo sys-kernel/linux-headers: 5.13::gentoo (virtual/os-headers) sys-libs/glibc: 2.33-r7::gentoo Repositories: gentoo location: /usr/portage sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 sync-rsync-verify-metamanifest: yes sync-rsync-verify-jobs: 1 sync-rsync-extra-opts: sync-rsync-verify-max-age: 24 ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="* LGPL-3+" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" CXXFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches" DISTDIR="/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/distdir" EMERGE_DEFAULT_OPTS="--with-bdeps=y -1 -k -b" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR" FCFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs buildpkg config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms sign split-log strict test unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -pipe -march=x86-64 -frecord-gcc-switches" GENTOO_MIRRORS="http://distfiles.gentoo.org" LANG="en_US.utf8" LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--defsym=__gentoo_check_ldflags__=0" MAKEOPTS="-j24" PKGDIR="/root/.packages" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/var/tmp" USE="acl amd64 bzip2 cli crypt dri elogind fortran gdbm iconv ipv6 jumbo-build libglvnd libtirpc multilib native-symlinks ncurses nls nptl openmp pam pcre readline seccomp split-usr ssl tcpd test unicode xattr zlib" ABI_X86="64" ELIBC="glibc" KERNEL="linux" PYTHON_TARGETS="python3_8 python3_9" USERLAND="GNU" Unset: CC, CPPFLAGS, CTARGET, CXX, INSTALL_MASK, LC_ALL, LINGUAS, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RUSTFLAGS ############################## # emerge history (qlop -mv): # ############################## 2021-08-22T14:25:24 >>> dev-cpp/eigen-3.3.9 2021-08-22T14:25:25 >>> media-libs/libjpeg-turbo-2.1.1 2021-08-22T14:25:25 >>> dev-python/olefile-0.46-r1 2021-08-22T14:25:26 >>> dev-python/lxml-4.6.3-r1 2021-08-22T14:25:27 >>> dev-lang/nasm-2.15.05 2021-08-22T14:25:29 >>> dev-python/setuptools_scm_git_archive-1.1 2021-08-22T14:25:28 >>> dev-python/cython-0.29.24 2021-08-22T14:25:36 >>> dev-python/pybind11-2.7.1 2021-08-22T14:25:58 >>> virtual/jpeg-100 2021-08-22T14:26:14 >>> app-text/qpdf-10.3.2 2021-08-22T14:26:15 >>> dev-python/pillow-8.3.1 2021-08-22T14:26:25 >>> dev-python/pikepdf-2.16.1 2021-08-22T14:26:31 >>> media-gfx/img2pdf-0.4.1-r1 2021-08-22T14:27:02 >>> app-text/poppler-data-0.4.10 2021-08-22T14:27:05 >>> app-arch/cpio-2.12-r1 2021-08-22T14:27:07 >>> media-libs/lcms-2.12 2021-08-22T14:27:04 >>> media-fonts/baekmuk-fonts-2.2-r2 2021-08-22T14:27:08 >>> dev-lang/swig-4.0.2 2021-08-22T14:27:09 >>> virtual/fortran-0 2021-08-22T14:27:10 >>> media-libs/tiff-4.3.0 2021-08-22T14:27:11 >>> media-libs/jbig2dec-0.19 2021-08-22T14:27:06 >>> dev-lang/mujs-1.1.3 2021-08-22T14:27:12 >>> dev-libs/libtommath-1.2.0 2021-08-22T14:27:13 >>> app-text/libpaper-1.1.28 2021-08-22T14:27:14 >>> net-dns/libidn-1.38-r1 2021-08-22T14:27:15 >>> media-fonts/arphicfonts-0.2.20080216.1-r2 2021-08-22T14:27:17 >>> media-libs/netpbm-10.86.22 2021-08-22T14:27:18 >>> dev-python/py-1.10.0 2021-08-22T14:27:16 >>> media-libs/libuninameslist-20200413-r2 2021-08-22T14:27:19 >>> dev-python/iniconfig-1.1.1 2021-08-22T14:27:20 >>> dev-python/more-itertools-8.8.0 2021-08-22T14:27:21 >>> dev-python/pyparsing-2.4.7-r1 2021-08-22T14:27:22 >>> dev-python/typing-extensions-3.10.0.0 2021-08-22T14:27:23 >>> dev-python/zipp-3.5.0 2021-08-22T14:27:24 >>> dev-python/execnet-1.9.0 2021-08-22T14:27:26 >>> dev-python/ply-3.11-r1 2021-08-22T14:27:27 >>> media-libs/exiftool-12.26 2021-08-22T14:27:25 >>> dev-python/psutil-5.7.3 2021-08-22T14:27:30 >>> app-arch/rpm2targz-2021.03.16 2021-08-22T14:27:31 >>> dev-python/namespace-zope-1-r1 2021-08-22T14:27:29 >>> dev-libs/gumbo-0.10.1 2021-08-22T14:28:05 >>> sci-libs/lapack-3.10.0 2021-08-22T14:28:14 >>> media-libs/openjpeg-2.4.0 2021-08-22T14:28:32 >>> dev-libs/libtomcrypt-1.18.2-r2 2021-08-22T14:28:54 >>> dev-python/pytest-forked-1.3.0-r1 2021-08-22T14:28:57 >>> media-gfx/fontforge-20201107 2021-08-22T14:29:09 >>> dev-python/packaging-21.0 2021-08-22T14:29:18 >>> dev-python/importlib_metadata-4.6.4 2021-08-22T14:29:27 >>> dev-python/pycparser-2.20-r1 2021-08-22T14:29:37 >>> media-fonts/urw-fonts-2.4.9 2021-08-22T14:29:41 >>> dev-python/zope-interface-5.4.0 2021-08-22T14:29:54 >>> virtual/lapack-3.8 2021-08-22T14:29:56 >>> virtual/blas-3.8 2021-08-22T14:29:55 >>> virtual/cblas-3.8 2021-08-22T14:29:59 >>> media-gfx/imagemagick-7.1.0.4 2021-08-22T14:30:24 >>> dev-python/pluggy-0.13.1-r1 2021-08-22T14:30:34 >>> dev-python/pdfrw-0.4_p1 2021-08-22T14:30:35 >>> dev-python/cffi-1.14.6 2021-08-22T14:30:47 >>> dev-python/attrs-21.2.0 2021-08-22T14:30:44 >>> app-text/ghostscript-gpl-9.54.0 2021-08-22T14:30:02 >>> app-text/poppler-21.08.0 2021-08-22T14:30:00 >>> app-text/mupdf-1.18.0-r4 2021-08-22T14:30:59 >>> sci-libs/arpack-3.8.0 2021-08-22T14:31:02 >>> dev-python/numpy-1.21.2 2021-08-22T14:31:28 >>> virtual/python-cffi-1 2021-08-22T14:31:32 >>> dev-python/pytest-6.2.4-r1 2021-08-22T14:31:57 >>> dev-python/scipy-1.6.3 2021-08-22T14:32:05 >>> dev-python/pycryptodome-3.10.1 2021-08-22T14:32:09 >>> dev-python/pytest-xdist-2.3.0 ####################################### # installed packages (qlist -ICvUSS): # ####################################### acct-group/input-0-r1:0 acct-group/kvm-0-r1:0 acct-group/man-0-r1:0 acct-group/messagebus-0-r1:0 acct-group/polkitd-0-r1:0 acct-group/portage-0:0 acct-group/render-0-r1:0 acct-group/sshd-0-r1:0 acct-user/man-1-r1:0 acct-user/messagebus-0-r1:0 acct-user/polkitd-0-r1:0 acct-user/portage-0:0 acct-user/sshd-0-r1:0 app-admin/eselect-1.4.17:0 -doc -emacs -vim-syntax app-admin/perl-cleaner-2.30:0 app-arch/bzip2-1.0.8-r1:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static -static-libs app-arch/cpio-2.12-r1:0 nls app-arch/gzip-1.10:0 -pic -static app-arch/libarchive-3.5.1-r1:0/13 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -blake2 bzip2 e2fsprogs -expat iconv -lz4 lzma -lzo -nettle -static-libs xattr zlib -zstd app-arch/rpm2targz-2021.03.16:0 app-arch/tar-1.34:0 acl -minimal nls -selinux xattr app-arch/unzip-6.0_p26:0 bzip2 -natspec unicode app-arch/xz-utils-5.2.5-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 extra-filters nls split-usr -static-libs app-arch/zstd-1.5.0:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -lz4 -static-libs threads app-crypt/gnupg-2.2.29:0 bzip2 -doc -ldap nls readline -selinux smartcard ssl -tofu -tools -usb -user-socket -wks-server app-crypt/gpgme-1.16.0:1/11 -common-lisp cxx -python -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -qt5 -static-libs app-crypt/libb2-0.98.1-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -native-cflags openmp -static-libs app-crypt/libmd-1.0.3-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 app-crypt/openpgp-keys-gentoo-release-20200704:0 -test app-crypt/pinentry-1.1.1-r1:0 -caps -efl -emacs -gnome-keyring -gtk ncurses -qt5 app-crypt/rhash-1.4.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug nls ssl -static-libs app-editors/nano-5.8-r2:0 -debug -justify -magic -minimal ncurses nls spell split-usr -static unicode app-eselect/eselect-fontconfig-1.1-r1:0 app-eselect/eselect-iptables-20200508:0 app-eselect/eselect-lib-bin-symlink-0.1.1-r1:0 app-eselect/eselect-pinentry-0.7.2:0 app-eselect/eselect-rust-20210703:0 app-i18n/man-pages-ja-20180315-r1:0 app-i18n/man-pages-l10n-4.10.0:0 l10n_de l10n_es l10n_fr l10n_it l10n_nl l10n_pl l10n_pt-BR l10n_ro app-i18n/man-pages-ru-5.03.2390.2390.20191017-r1:0 app-i18n/man-pages-zh_CN-1.6.3.2:0 app-misc/c_rehash-1.7-r1:0 app-misc/ca-certificates-20210119.3.66:0 -cacert app-misc/editor-wrapper-4-r1:0 app-misc/mime-types-9:0 app-misc/pax-utils-1.3.3:0 -caps -debug -python -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 seccomp app-misc/tmux-3.2a:0 -debug -selinux -utempter -vim-syntax app-portage/eix-0.35.2:0 -debug -doc nls -sqlite app-portage/elt-patches-20201205:0 app-portage/gemato-16.2:0 gpg python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test -tools app-portage/gentoolkit-0.5.1-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test app-portage/portage-utils-0.92:0 nls openmp qmanifest qtegrity -static app-shells/bash-5.1_p8:0 -afs -bashlogger -examples -mem-scramble net nls -plugins readline app-shells/push-3.4:0 app-shells/quoter-4.2:0 app-text/ansifilter-2.18:0 -qt5 app-text/build-docbook-catalog-1.21:0 app-text/docbook-xml-dtd-4.5-r2:4.5 app-text/docbook-xml-dtd-4.4-r3:4.4 app-text/docbook-xml-dtd-4.2-r3:4.2 app-text/docbook-xml-dtd-4.1.2-r7:4.1.2 app-text/docbook-xsl-stylesheets-1.79.1-r2:0 -ruby app-text/ghostscript-gpl-9.54.0:0/9.54 -cups -dbus -gtk jpeg2k l10n_de -l10n_ja l10n_ko l10n_zh-CN l10n_zh-TW -static-libs unicode -X app-text/libpaper-1.1.28:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 app-text/manpager-1:0 app-text/mupdf-1.18.0-r4:0/1.18.0 javascript -opengl ssl -X app-text/opensp-1.5.2-r6:0 -doc nls -static-libs -test app-text/po4a-0.63-r1:0 -test app-text/poppler-21.08.0:0/112 -boost cairo -cjk -curl cxx -debug -doc introspection jpeg jpeg2k lcms -nss png -qt5 tiff utils app-text/poppler-data-0.4.10:0 app-text/qpdf-10.3.2:0/28 -doc -examples ssl -test app-text/sgml-common-0.6.3-r7:0 app-text/xmlto-0.0.28-r6:0 -latex -text dev-cpp/eigen-3.3.9:3 -cpu_flags_arm_neon -cpu_flags_ppc_altivec -cpu_flags_ppc_vsx -cuda -debug -doc openmp -test dev-db/sqlite-3.35.5:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc -icu readline -secure-delete -static-libs -tcl -test -tools dev-lang/mujs-1.1.3:0/1.1.3 dev-lang/nasm-2.15.05:0 -doc dev-lang/perl-5.34.0-r2:0/5.34 -berkdb -debug -doc gdbm -ithreads -minimal dev-lang/python-3.10.0_rc1_p1:3.10 -bluetooth -build -examples gdbm -hardened ipv6 ncurses readline sqlite ssl -test -tk -verify-sig -wininst xml dev-lang/python-3.9.6_p1:3.9 -bluetooth -build -examples gdbm -hardened ipv6 ncurses readline sqlite ssl -test -tk -verify-sig -wininst xml dev-lang/python-3.8.11:3.8 -bluetooth -build -examples gdbm -hardened ipv6 ncurses readline sqlite ssl -test -tk -verify-sig -wininst xml dev-lang/python-2.7.18_p11:2.7 -berkdb -bluetooth -build -examples gdbm -hardened ipv6 ncurses readline sqlite ssl threads -tk -verify-sig wide-unicode -wininst xml dev-lang/python-exec-2.4.8:2 native-symlinks python_targets_pypy3 python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-lang/python-exec-conf-2.4.6:2 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-lang/rust-1.54.0:stable/1.54 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -clippy cpu_flags_x86_sse2 -debug -doc -llvm_targets_AArch64 -llvm_targets_AMDGPU -llvm_targets_ARM -llvm_targets_AVR -llvm_targets_BPF -llvm_targets_Hexagon -llvm_targets_Lanai -llvm_targets_Mips -llvm_targets_MSP430 -llvm_targets_NVPTX -llvm_targets_PowerPC -llvm_targets_RISCV -llvm_targets_Sparc -llvm_targets_SystemZ -llvm_targets_WebAssembly llvm_targets_X86 -llvm_targets_XCore -miri -nightly -parallel-compiler -rls rustfmt -system-bootstrap -system-llvm -test -verify-sig -wasm dev-lang/spidermonkey-78.13.0:78 -clang -cpu_flags_arm_neon -debug jit -lto -test dev-lang/swig-4.0.2:0 -ccache -doc pcre dev-lang/tcl-8.6.11:0/8.6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug threads dev-libs/elfutils-0.185:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzma nls -static-libs -test -threads utils -valgrind -zstd dev-libs/expat-2.4.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples split-usr -static-libs unicode dev-libs/glib-2.68.4:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -dbus -debug elf -fam -gtk-doc mime -selinux -static-libs -sysprof -systemtap -test -utils xattr dev-libs/gmp-6.2.1-r1:0/10.4 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm cxx -doc -pic -static-libs dev-libs/gobject-introspection-1.68.0:0 -doctool -gtk-doc -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 -test dev-libs/gobject-introspection-common-1.68.0:0 dev-libs/gumbo-0.10.1:0 -doc -test dev-libs/icu-69.1:0/69.1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc -examples -static-libs dev-libs/isl-0.24:0/23 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/jsoncpp-1.9.4:0/24 -doc -test dev-libs/libassuan-2.5.5:0 dev-libs/libbsd-0.11.3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/libevent-2.1.12:0/2.1-7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 clock-gettime -debug -malloc-replacement ssl -static-libs -test threads -verbose-debug dev-libs/libffi-3.4.2:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -exec-static-trampoline -pax-kernel -static-libs -test dev-libs/libgcrypt-1.9.3:0/20 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_neon -cpu_flags_x86_aes -cpu_flags_x86_avx -cpu_flags_x86_avx2 -cpu_flags_x86_padlock -cpu_flags_x86_sha -cpu_flags_x86_sse4_1 -doc -o-flag-munging -static-libs dev-libs/libgpg-error-1.42:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -common-lisp nls -static-libs dev-libs/libksba-1.6.0:0 -static-libs dev-libs/libltdl-2.4.6:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/libpcre-8.45:3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 cxx jit -libedit pcre16 pcre32 readline recursion-limit split-usr -static-libs unicode zlib dev-libs/libpcre2-10.37-r2:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 jit -libedit pcre16 pcre32 readline recursion-limit split-usr -static-libs unicode zlib dev-libs/libpipeline-1.5.3:0 -static-libs -test dev-libs/libtasn1-4.17.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs -test -valgrind dev-libs/libtomcrypt-1.18.2-r2:0/1 gmp libtommath -tomsfastmath dev-libs/libtommath-1.2.0:0 -doc -examples -static-libs dev-libs/libunistring-0.9.10-r1:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs dev-libs/libuv-1.42.0:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 dev-libs/libxml2-2.9.12-r5:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -examples -icu ipv6 -lzma python python_targets_python3_8 python_targets_python3_9 readline -static-libs -test -verify-sig dev-libs/libxslt-1.1.34-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 crypt -debug -examples -static-libs -verify-sig dev-libs/lzo-2.10:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -examples split-usr -static-libs dev-libs/mpc-1.2.1:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/mpfr-4.1.0:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs dev-libs/nettle-3.7.3:0/8-6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -cpu_flags_arm_neon -cpu_flags_x86_aes -cpu_flags_x86_sha -doc gmp -static-libs -test dev-libs/npth-1.6-r1:0 dev-libs/nspr-4.32:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug dev-libs/openssl-1.1.1k-r1:0/1.1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 asm -bindist cpu_flags_x86_sse2 -rfc3779 -sctp -sslv3 -static-libs -test -tls-compression -tls-heartbeat -vanilla dev-libs/popt-1.18:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static-libs dev-perl/Encode-EUCJPASCII-0.30.0-r1:0 -test dev-perl/Encode-HanExtra-0.230.0-r3:0 dev-perl/Encode-Locale-1.50.0:0 -test dev-perl/File-Listing-6.140.0:0 -test dev-perl/HTML-Parser-3.760.0:0 -test dev-perl/HTML-Tagset-3.200.0-r2:0 dev-perl/HTTP-Cookies-6.100.0:0 -test dev-perl/HTTP-Date-6.50.0:0 dev-perl/HTTP-Message-6.320.0:0 -test -test dev-perl/HTTP-Negotiate-6.10.0-r1:0 dev-perl/IO-HTML-1.4.0:0 -test dev-perl/IO-Socket-INET6-2.720.0-r1:0 dev-perl/IO-Socket-SSL-2.71.0:0 -examples -idn -test dev-perl/libwww-perl-6.550.0:0 ssl -test dev-perl/Locale-gettext-1.70.0:0 dev-perl/LWP-MediaTypes-6.40.0:0 -test dev-perl/LWP-Protocol-https-6.100.0:0 -test dev-perl/MIME-Charset-1.12.2:0 l10n_ja l10n_zh dev-perl/Module-Build-0.423.100:0 -test dev-perl/Mozilla-CA-20999999:0 dev-perl/Net-HTTP-6.210.0:0 -minimal -test dev-perl/Net-SSLeay-1.900.0:0 -examples -examples -minimal -test dev-perl/Pod-Parser-1.630.0-r1:0 -test dev-perl/SGMLSpm-1.1-r2:0 -test dev-perl/Socket6-0.290.0:0 -test dev-perl/TermReadKey-2.380.0:0 -examples -test dev-perl/Text-CharWidth-0.40.0-r1:0 dev-perl/Text-WrapI18N-0.60.0-r1:0 dev-perl/TimeDate-2.330.0:0 dev-perl/Try-Tiny-0.300.0:0 -minimal -test dev-perl/Unicode-LineBreak-2019.1.0:0 dev-perl/URI-1.730.0:0 -test dev-perl/WWW-RobotRules-6.20.0-r1:0 dev-perl/XML-Parser-2.460.0:0 dev-perl/YAML-Tiny-1.730.0:0 -minimal -test dev-python/attrs-21.2.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/certifi-10001-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/cffi-1.14.6:0/1.14.6 -doc -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/charset_normalizer-2.0.4:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/cython-0.29.24:0 -doc -emacs python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/execnet-1.9.0:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/idna-3.2:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/importlib_metadata-4.6.4:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/iniconfig-1.1.1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/jinja-3.0.1:0 -doc -examples python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/lxml-4.6.3-r1:0 -doc -examples python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test threads dev-python/markupsafe-2.0.1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/more-itertools-8.8.0:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/namespace-zope-1-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/numpy-1.21.2:0 -doc lapack -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/olefile-0.46-r1:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/packaging-21.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pdfrw-0.4_p1:0 crypt -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pikepdf-2.16.1:0 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pillow-8.3.1:0 -examples -imagequant jpeg -jpeg2k -lcms python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test -test -tiff -tk -truetype -webp -xcb zlib dev-python/pluggy-0.13.1-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/ply-3.11-r1:0/3.11 -examples python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/psutil-5.7.3:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/py-1.10.0:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pybind11-2.7.1:0 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pycparser-2.20-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/pycryptodome-3.10.1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pyparsing-2.4.7-r1:0 -examples python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/pypy3-7.3.4_p2:0/pypy37-pp73 bzip2 gdbm jit ncurses -sqlite -test -tk dev-python/pypy3-exe-7.3.4:7.3.4 bzip2 -cpu_flags_x86_sse2 jit -low-memory ncurses dev-python/PySocks-1.7.1-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/pytest-6.2.4-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pytest-forked-1.3.0-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/pytest-xdist-2.3.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/requests-2.26.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -socks5 -test dev-python/scipy-1.6.3:0 -doc -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -sparse -test dev-python/setuptools-57.4.0-r2:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/setuptools_scm-6.0.1-r1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/setuptools_scm_git_archive-1.1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/toml-0.10.2:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test -test dev-python/typing-extensions-3.10.0.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 dev-python/urllib3-1.26.6:0 -brotli python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/zipp-3.5.0:0 -doc python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-python/zope-interface-5.4.0:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-util/cmake-3.21.1:0 -doc -emacs ncurses -qt5 -test -test dev-util/desktop-file-utils-0.26-r1:0 -emacs dev-util/glib-utils-2.68.4:0 -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 dev-util/gperf-3.1:0 dev-util/gtk-doc-am-1.33.2:0 dev-util/intltool-0.51.0-r2:0 dev-util/itstool-2.0.6-r1:0 -python_single_target_python3_8 python_single_target_python3_9 dev-util/meson-0.58.2:0 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test dev-util/meson-format-array-0:0 python_targets_python3_8 python_targets_python3_9 dev-util/ninja-1.10.2-r1:0 -doc -emacs -test -vim-syntax dev-util/pkgconf-1.8.0:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 pkg-config -test dev-util/re2c-2.2:0 -debug -test dev-vcs/git-2.33.0-r1:0 blksha1 -cgi curl -cvs -doc -emacs -gnome-keyring gpg -highlight iconv -mediawiki -mediawiki-experimental nls pcre -perforce -perl -ppcsha1 -python_single_target_python3_10 -python_single_target_python3_8 python_single_target_python3_9 -subversion -test threads -tk webdav -xinetd media-fonts/arphicfonts-0.2.20080216.1-r2:0 -X media-fonts/baekmuk-fonts-2.2-r2:0 unicode -X -X media-fonts/liberation-fonts-2.1.3:0 -fontforge -X -X media-fonts/urw-fonts-2.4.9:0 -X media-gfx/fontforge-20201107:0 -doc -gif -gtk -jpeg -png python -python_single_target_python3_8 python_single_target_python3_9 readline -svg -test -tiff -truetype-debugger unicode -woff2 -X media-gfx/graphite2-1.3.14:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -perl -test media-gfx/imagemagick-7.1.0.4:0/7.1.0-0 bzip2 -corefonts cxx -djvu -fftw -fontconfig -fpx -graphviz -hdri -heif -jbig jpeg jpeg2k -lcms -lqr -lzma -opencl -openexr openmp -pango -perl png -postscript q32 q8 -raw -static-libs -svg -test tiff -truetype -webp -wmf -X -xml -zip zlib media-gfx/img2pdf-0.4.1-r1:0 -gui -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -test media-libs/exiftool-12.26:0 -doc media-libs/fontconfig-2.13.1-r2:1.0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs media-libs/freetype-2.11.0-r1:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 adobe-cff -brotli bzip2 cleartype-hinting -debug -doc -fontforge harfbuzz -infinality png -static-libs -utils -X media-libs/harfbuzz-2.9.0:0/0.9.18 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cairo -debug -doc -experimental glib graphite -icu introspection -test truetype media-libs/jbig2dec-0.19:0/0.19 -png -static-libs -test media-libs/lcms-2.12:2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -jpeg -static-libs -test threads -tiff zlib media-libs/libjpeg-turbo-2.1.1:0/0.2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_neon -java -java -static-libs media-libs/libpng-1.6.37-r2:0/16 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -apng -cpu_flags_arm_neon cpu_flags_x86_sse -static-libs media-libs/libuninameslist-20200413-r2:0/1 media-libs/netpbm-10.86.22:0 cpu_flags_x86_sse2 -doc -jbig jpeg -png -postscript -rle -static-libs -svga -tiff -X -xml zlib media-libs/openjpeg-2.4.0:2/7 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -static-libs -test media-libs/tiff-4.3.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cxx -jbig -jpeg -lzma -static-libs -test -webp zlib -zstd net-dns/libidn-1.38-r1:0/12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -emacs -java -java -mono nls -verify-sig net-dns/libidn2-2.3.2:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -verify-sig net-firewall/iptables-1.8.7:0/1.8.3 -conntrack ipv6 -netlink -nftables -pcap split-usr -static-libs net-libs/gnutls-3.7.2:0/30 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 cxx -dane -doc -examples -guile idn nls openssl -pkcs11 seccomp -sslv2 -sslv3 -static-libs -test -test-full tls-heartbeat -tools -valgrind net-libs/libmnl-1.0.4:0/0.2.0 -examples split-usr -static-libs net-libs/libnsl-2.0.0:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs net-libs/libtirpc-1.3.2:0/3 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 ipv6 -kerberos split-usr -static-libs net-libs/nghttp2-1.44.0:0/1.14 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cxx -debug -hpack-tools -jemalloc -static-libs -test threads -utils -xml net-misc/curl-7.78.0-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -adns -alt-svc -brotli -curl_ssl_gnutls -curl_ssl_mbedtls -curl_ssl_nss curl_ssl_openssl -curl_ssl_winssl ftp -gnutls -gopher -hsts http2 -idn imap ipv6 -kerberos -ldap -mbedtls -nghttp3 -nss openssl pop3 progress-meter -quiche -rtmp -samba smtp -ssh ssl -sslv3 -static-libs -telnet -test tftp -threads -winssl -zstd net-misc/iputils-20210722:0 arping -caps -clockdiff -doc filecaps -gcrypt -idn ipv6 -nettle nls -rarpd -rdisc ssl -static -tftpd -tracepath -traceroute6 net-misc/netifrc-0.7.3:0 net-misc/openssh-8.6_p1-r2:0 -abi_mips_n32 -audit -bindist -debug -hpn -kerberos -ldns -libedit -livecd pam pie scp -sctp -security-key -selinux ssl -static -test -X -X509 -xmss net-misc/rsync-3.2.3-r4:0 acl -examples iconv ipv6 -lz4 ssl -stunnel -system-zlib xattr -xxhash -zstd net-misc/wget-1.21.1:0 -cookie_check -debug -gnutls -idn ipv6 -metalink nls -ntlm pcre ssl -static -test -uuid zlib perl-core/Encode-3.120.0:0 perl-core/File-Temp-0.231.100:0 perl-core/Scalar-List-Utils-1.560.0:0 sci-libs/arpack-3.8.0:0 -doc -examples -mpi sci-libs/lapack-3.10.0:0 -deprecated -doc -eselect-ldso -lapacke -test sys-apps/acl-2.3.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls split-usr -static-libs sys-apps/attr-2.5.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug nls split-usr -static-libs sys-apps/baselayout-2.7-r3:0 -build split-usr sys-apps/busybox-1.33.1-r1:0 -debug ipv6 -livecd -make-symlinks -math -mdev -pam -savedconfig -selinux -sep-usr static -syslog -systemd sys-apps/coreutils-8.32-r1:0 acl -caps -gmp -hostname -kill -multicall nls -selinux split-usr -static -test -vanilla xattr sys-apps/dbus-1.12.20-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc elogind -selinux -static-libs -systemd -test -test -user-session -X sys-apps/debianutils-5.2:0 installkernel -static sys-apps/diffutils-3.8:0 nls -static sys-apps/file-5.40-r3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 bzip2 -lzma -python -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 -seccomp -static-libs zlib sys-apps/findutils-4.8.0:0 nls -selinux -static -test sys-apps/gawk-5.1.0:0 -mpfr nls readline sys-apps/gentoo-functions-0.14:0 sys-apps/grep-3.7:0 nls pcre -static sys-apps/groff-1.22.4:0 -examples -uchardet -X sys-apps/help2man-1.48.4:0 nls sys-apps/hwids-20210613-r1:0 net pci -systemd udev usb sys-apps/install-xattr-0.8:0 sys-apps/iproute2-5.13.0-r1:0 -atm -berkdb -bpf -caps -elf iptables ipv6 -libbsd -minimal -selinux sys-apps/kbd-2.4.0:0 nls pam -test sys-apps/kmod-29:0 -debug -doc lzma -pkcs7 -python python_targets_python3_8 python_targets_python3_9 -static-libs tools zlib -zstd sys-apps/less-590:0 pcre unicode sys-apps/man-db-2.9.4-r1:0 -berkdb gdbm manpager nls seccomp -selinux -static-libs zlib sys-apps/man-pages-5.12-r2:0 l10n_de l10n_es l10n_fr l10n_it l10n_ja l10n_nl l10n_pl l10n_pt-BR l10n_ro l10n_ru l10n_zh-CN sys-apps/man-pages-posix-2017a:0 sys-apps/net-tools-2.10:0 arp hostname ipv6 -nis nls -plipconfig -selinux -slattach -static sys-apps/openrc-0.43.5:0 -audit -bash -debug ncurses netifrc -newnet pam -prefix -selinux -sysv-utils unicode sys-apps/portage-3.0.22:0 -apidoc -build -doc -gentoo-dev ipc native-extensions python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 rsync-verify -selinux -test xattr sys-apps/sandbox-2.24:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 abi_x86_32 abi_x86_64 -abi_x86_x32 sys-apps/sed-4.8:0 acl nls -selinux -static sys-apps/shadow-4.9-r2:0 acl -audit -bcrypt -cracklib nls pam -selinux -skey split-usr su xattr sys-apps/systemd-tmpfiles-249.2:0 -selinux -test sys-apps/sysvinit-2.99:0 -ibm -selinux -static sys-apps/texinfo-6.8:0 nls standalone -static sys-apps/util-linux-2.37.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -build -caps cramfs -cryptsetup -fdformat -hardlink -kill logger -magic ncurses nls pam -python python_targets_python3_8 python_targets_python3_9 readline -selinux -slang split-usr -static-libs -su suid -systemd -test -tty-helpers -udev unicode sys-apps/which-2.21:0 sys-auth/elogind-246.10-r1:0 acl -audit -debug -doc pam policykit -selinux sys-auth/pambase-20210201.1:0 -caps -debug elogind -gnome-keyring -homed -minimal -mktemp nullok -pam_krb5 -pam_ssh passwdqc -pwhistory -pwquality -securetty -selinux sha512 -systemd sys-auth/passwdqc-2.0.2-r1:0 sys-auth/polkit-0.119-r2:0 elogind -examples -gtk introspection -kde nls pam -selinux -systemd -test sys-devel/autoconf-2.71-r1:2.71 -emacs sys-devel/autoconf-2.13-r1:2.1 sys-devel/autoconf-archive-2021.02.19:0 sys-devel/autoconf-wrapper-15:0 sys-devel/automake-1.16.4:1.16 -test sys-devel/automake-wrapper-11:0 sys-devel/binutils-2.37_p1:2.37 -cet -default-gold -doc gold -multitarget nls plugins -static-libs -test -vanilla sys-devel/binutils-config-5.4:0 native-symlinks sys-devel/bison-3.7.6:0 -examples nls -static -test sys-devel/flex-2.6.4-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 nls -static -test sys-devel/gcc-11.2.0:11 -ada -custom-cflags cxx -d -debug -doc -fixed-point fortran -go graphite -hardened -jit -libssp lto multilib nls nptl -objc -objc++ -objc-gc openmp pch -pgo pie sanitize ssp -systemtap -test -valgrind -vanilla -vtv -zstd sys-devel/gcc-config-2.4:0 cc-wrappers native-symlinks sys-devel/gettext-0.21-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 acl -cvs cxx -doc -emacs -git -java -java ncurses nls openmp -static-libs sys-devel/gnuconfig-20210107:0 sys-devel/libtool-2.4.6-r6:2 -vanilla sys-devel/llvm-12.0.1:12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -debug -doc -doc -exegesis -gold -libedit libffi -llvm_targets_AArch64 llvm_targets_AMDGPU -llvm_targets_ARC -llvm_targets_ARM -llvm_targets_AVR llvm_targets_BPF -llvm_targets_CSKY -llvm_targets_Hexagon -llvm_targets_Lanai -llvm_targets_Mips -llvm_targets_MSP430 llvm_targets_NVPTX -llvm_targets_PowerPC -llvm_targets_RISCV -llvm_targets_Sparc -llvm_targets_SystemZ -llvm_targets_VE -llvm_targets_WebAssembly llvm_targets_X86 -llvm_targets_XCore ncurses -test -xar -xml -z3 sys-devel/llvm-common-12.0.1:0 sys-devel/m4-1.4.19:0 -examples nls sys-devel/make-4.3:0 -guile nls -static sys-devel/patch-2.7.6-r4:0 -static -test xattr sys-fs/e2fsprogs-1.46.4:0 -cron -fuse -lto nls split-usr -static-libs threads sys-fs/eudev-3.2.10-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 hwdb -introspection kmod -rule-generator -selinux -static-libs -test sys-fs/udev-init-scripts-34:0 sys-kernel/installkernel-gentoo-3:0 sys-kernel/linux-headers-5.13:0 -headers-only sys-libs/binutils-libs-2.37_p1:0/2.37 -64-bit-bfd -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cet -multitarget nls -static-libs sys-libs/e2fsprogs-libs-1.46.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static-libs sys-libs/gdbm-1.20:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 berkdb nls readline -static-libs sys-libs/glibc-2.33-r7:2.2 -audit -caps -cet -compile-locales -crypt -custom-cflags -doc -gd -headers-only multiarch multilib -multilib-bootstrap -nscd -profile -selinux ssp static-libs -static-pie -suid -systemd -systemtap -test -vanilla sys-libs/libcap-2.52-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 pam split-usr -static-libs sys-libs/libseccomp-2.5.1-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -python python_targets_python3_8 python_targets_python3_9 -static-libs sys-libs/libxcrypt-4.4.25:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 compat split-usr static-libs system -test sys-libs/ncurses-6.2_p20210619:0/6 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -ada cxx -debug -doc -gpm -minimal -profile split-usr -static-libs -test tinfo -trace sys-libs/pam-1.5.1_p20210622-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -audit -berkdb -debug filecaps -nis -selinux split-usr sys-libs/readline-8.1_p1-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 split-usr -static-libs unicode -utils sys-libs/timezone-data-2021a-r1:0 -leaps-timezone nls -zic-slim sys-libs/zlib-1.2.11-r4:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 minizip split-usr -static-libs sys-process/procps-3.3.17-r1:0/8 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 elogind kill -modern-top ncurses nls -selinux split-usr -static-libs -systemd -test unicode sys-process/psmisc-23.4-r1:0 ipv6 nls -selinux -X virtual/acl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/awk-1:0 virtual/blas-3.8:0 -eselect-ldso virtual/cblas-3.8:0 -eselect-ldso virtual/dev-manager-0-r2:0 virtual/editor-0-r3:0 virtual/fortran-0:0 openmp virtual/jpeg-100:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs virtual/lapack-3.8:0 -eselect-ldso virtual/libc-1-r1:0 virtual/libcrypt-2:0/2 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 static-libs virtual/libelf-3:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libiconv-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libintl-0-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 virtual/libudev-232-r4:0/1 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -static-libs -systemd virtual/man-0-r4:0 virtual/os-headers-0-r2:0 virtual/package-manager-1:0 virtual/pager-0:0 virtual/perl-Carp-1.520.0-r1:0 virtual/perl-Compress-Raw-Bzip2-2.101.0:0 virtual/perl-Compress-Raw-Zlib-2.101.0:0 virtual/perl-CPAN-Meta-2.150.10-r5:0 virtual/perl-CPAN-Meta-Requirements-2.140.0-r7:0 virtual/perl-CPAN-Meta-YAML-0.18.0-r7:0 virtual/perl-Data-Dumper-2.179.0:0 virtual/perl-Digest-MD5-2.580.0:0 virtual/perl-Encode-3.120.0:0 virtual/perl-Exporter-5.760.0:0 virtual/perl-ExtUtils-CBuilder-0.280.236:0 virtual/perl-ExtUtils-Install-2.200.0:0 virtual/perl-ExtUtils-MakeMaker-7.620.0:0 virtual/perl-ExtUtils-Manifest-1.730.0:0 virtual/perl-ExtUtils-ParseXS-3.430.0:0 virtual/perl-File-Spec-3.800.0:0 virtual/perl-File-Temp-0.231.100:0 virtual/perl-Getopt-Long-2.520.0:0 virtual/perl-IO-1.460.0:0 virtual/perl-IO-Compress-2.102.0:0 virtual/perl-IO-Socket-IP-0.410.0:0 virtual/perl-JSON-PP-4.60.0:0 virtual/perl-libnet-3.130.0:0 ssl virtual/perl-MIME-Base64-3.160.0:0 virtual/perl-Module-Metadata-1.0.37-r1:0 virtual/perl-parent-0.238.0-r1:0 virtual/perl-Parse-CPAN-Meta-2.150.10-r5:0 virtual/perl-Perl-OSType-1.10.0-r5:0 virtual/perl-podlators-4.140.0-r2:0 virtual/perl-Scalar-List-Utils-1.560.0:0 virtual/perl-Test-Harness-3.430.0:0 virtual/perl-Text-ParseWords-3.300.0-r8:0 virtual/perl-Time-Local-1.300.0:0 virtual/perl-version-0.992.800:0 virtual/perl-XSLoader-0.300.0-r4:0 virtual/pkgconfig-2:0 virtual/python-cffi-1:0 python_targets_pypy3 -python_targets_python3_10 python_targets_python3_8 python_targets_python3_9 virtual/rust-1.54.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -rustfmt virtual/service-manager-1:0 virtual/ssh-0:0 -minimal virtual/tmpfiles-0-r1:0 virtual/ttf-fonts-1-r1:0 virtual/udev-217-r3:0 virtual/yacc-0:0 www-client/pybugz-0.13-r1:0 python_targets_python3_8 python_targets_python3_9 x11-base/xcb-proto-1.14.1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 python_targets_python3_8 python_targets_python3_9 x11-base/xorg-proto-2021.4:0 -test x11-libs/cairo-1.16.0-r4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -aqua -debug -gles2-only glib -opengl -static-libs svg -utils -valgrind -X x11-libs/libX11-1.7.2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc ipv6 -test x11-libs/libXau-1.0.9-r1:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libxcb-1.14:0/1.12 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc -doc -selinux -test xkb x11-libs/libXdmcp-1.1.3:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXext-1.3.4:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -doc x11-libs/libXrender-0.9.10-r2:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 x11-libs/pixman-0.40.0:0 -abi_mips_n32 -abi_mips_n64 -abi_mips_o32 -abi_s390_32 -abi_s390_64 -abi_x86_32 abi_x86_64 -abi_x86_x32 -cpu_flags_arm_iwmmxt -cpu_flags_arm_iwmmxt2 -cpu_flags_arm_neon -cpu_flags_ppc_altivec cpu_flags_x86_mmxext cpu_flags_x86_sse2 -cpu_flags_x86_ssse3 -loongson2f -static-libs x11-libs/xtrans-1.4.0:0 -doc x11-misc/compose-tables-1.7.2:0 x11-misc/shared-mime-info-2.1:0 ####################### # build.log # ####################### >>> Unpacking source... >>> Unpacking img2pdf-0.4.1.tar.gz to /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work >>> Unpacking img2pdf-0.4.1-imagemagick-7-tests.patch.gz to /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work >>> Source unpacked in /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work >>> Preparing source in /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 ... * Applying img2pdf-0.4.1-imagemagick-7-tests.patch ... [ ok ] >>> Source prepared. >>> Configuring source in /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 ... >>> Source configured. >>> Compiling source in /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 ... * python3_8: running distutils-r1_run_phase distutils-r1_python_compile python3.8 setup.py build -j 24 running build running build_py copying src/img2pdf.py -> /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1-python3_8/lib copying src/jp2.py -> /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1-python3_8/lib running egg_info writing src/img2pdf.egg-info/PKG-INFO writing dependency_links to src/img2pdf.egg-info/dependency_links.txt writing entry points to src/img2pdf.egg-info/entry_points.txt writing requirements to src/img2pdf.egg-info/requires.txt writing top-level names to src/img2pdf.egg-info/top_level.txt reading manifest file 'src/img2pdf.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' /usr/lib/python3.8/site-packages/setuptools/dist.py:697: UserWarning: Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead warnings.warn( warning: no files found matching 'test.sh' warning: no files found matching 'magick.py' adding license file 'LICENSE' writing manifest file 'src/img2pdf.egg-info/SOURCES.txt' warning: build_py: byte-compiling is disabled, skipping. * python3_9: running distutils-r1_run_phase distutils-r1_python_compile python3.9 setup.py build -j 24 /usr/lib/python3.9/site-packages/setuptools/dist.py:697: UserWarning: Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead warnings.warn( running build running build_py copying src/img2pdf.py -> /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1-python3_9/lib copying src/jp2.py -> /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1-python3_9/lib running egg_info writing src/img2pdf.egg-info/PKG-INFO writing dependency_links to src/img2pdf.egg-info/dependency_links.txt writing entry points to src/img2pdf.egg-info/entry_points.txt writing requirements to src/img2pdf.egg-info/requires.txt writing top-level names to src/img2pdf.egg-info/top_level.txt reading manifest file 'src/img2pdf.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no files found matching 'test.sh' warning: no files found matching 'magick.py' adding license file 'LICENSE' writing manifest file 'src/img2pdf.egg-info/SOURCES.txt' warning: build_py: byte-compiling is disabled, skipping. >>> Source compiled. >>> Test phase: media-gfx/img2pdf-0.4.1-r1 * python3_8: running distutils-r1_run_phase python_test python3.8 -m pytest -vv -ra -l -Wdefault -n auto ============================= test session starts ============================== platform linux -- Python 3.8.11, pytest-6.2.4, py-1.10.0, pluggy-0.13.1 -- /usr/bin/python3.8 cachedir: .pytest_cache rootdir: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 plugins: forked-1.3.0, xdist-2.3.0 gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I [gw0] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw1] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw2] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw3] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw4] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw5] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw6] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw7] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw8] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw9] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw10] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw11] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw12] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw13] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw14] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw15] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw16] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw17] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw18] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw19] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw20] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw21] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw22] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw23] linux Python 3.8.11 cwd: /var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1 [gw0] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw1] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw2] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw3] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw4] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw5] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw6] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw7] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw8] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw9] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw10] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw12] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw11] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw14] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw13] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw15] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw16] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw17] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw18] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw19] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw20] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw21] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw22] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] [gw23] Python 3.8.11 (default, Aug 5 2021, 08:59:05) -- [GCC 11.2.0] gw0 [348] / gw1 [348] / gw2 [348] / gw3 [348] / gw4 [348] / gw5 [348] / gw6 [348] / gw7 [348] / gw8 [348] / gw9 [348] / gw10 [348] / gw11 [348] / gw12 [348] / gw13 [348] / gw14 [348] / gw15 [348] / gw16 [348] / gw17 [348] / gw18 [348] / gw19 [348] / gw20 [348] / gw21 [348] / gw22 [348] / gw23 [348] scheduling tests via LoadScheduling src/img2pdf_test.py::test_jpg[pdfrw] src/img2pdf_test.py::test_jpg[pikepdf] src/img2pdf_test.py::test_jpg_rot[pdfrw] src/img2pdf_test.py::test_jpg_rot[internal] src/img2pdf_test.py::test_jpg_cmyk[pdfrw] src/img2pdf_test.py::test_jpg[internal] src/img2pdf_test.py::test_jpg_cmyk[pikepdf] src/img2pdf_test.py::test_jpg_2000[internal] src/img2pdf_test.py::test_png_rgb8[pikepdf] src/img2pdf_test.py::test_png_rgba8[pdfrw] src/img2pdf_test.py::test_png_rgb16[pikepdf] src/img2pdf_test.py::test_png_rgba8[pikepdf] src/img2pdf_test.py::test_png_rgb8[pdfrw] src/img2pdf_test.py::test_png_rgb16[internal] src/img2pdf_test.py::test_png_rgb8[internal] src/img2pdf_test.py::test_png_rgba8[internal] src/img2pdf_test.py::test_png_rgb16[pdfrw] src/img2pdf_test.py::test_jpg_cmyk[internal] src/img2pdf_test.py::test_png_rgba16[internal] src/img2pdf_test.py::test_jpg_rot[pikepdf] src/img2pdf_test.py::test_jpg_2000[pdfrw] src/img2pdf_test.py::test_jpg_2000[pikepdf] src/img2pdf_test.py::test_png_rgba16[pikepdf] src/img2pdf_test.py::test_png_rgba16[pdfrw] [gw20] [ 0%] PASSED src/img2pdf_test.py::test_png_rgba8[pdfrw] src/img2pdf_test.py::test_png_gray8[pdfrw] [gw19] [ 0%] PASSED src/img2pdf_test.py::test_png_rgba8[pikepdf] src/img2pdf_test.py::test_png_gray8[pikepdf] [gw23] [ 0%] PASSED src/img2pdf_test.py::test_png_rgba16[pdfrw] src/img2pdf_test.py::test_png_gray16[pdfrw] [gw18] [ 1%] PASSED src/img2pdf_test.py::test_png_rgba8[internal] src/img2pdf_test.py::test_png_gray8[internal] [gw22] [ 1%] PASSED src/img2pdf_test.py::test_png_rgba16[pikepdf] src/img2pdf_test.py::test_png_gray16[pikepdf] [gw21] [ 1%] PASSED src/img2pdf_test.py::test_png_rgba16[internal] src/img2pdf_test.py::test_png_gray16[internal] [gw14] [ 2%] PASSED src/img2pdf_test.py::test_png_rgb8[pikepdf] src/img2pdf_test.py::test_png_gray2[pikepdf] [gw15] [ 2%] PASSED src/img2pdf_test.py::test_png_rgb16[internal] src/img2pdf_test.py::test_png_gray4[internal] [gw11] [ 2%] PASSED src/img2pdf_test.py::test_png_rgb8[internal] src/img2pdf_test.py::test_png_gray2[internal] [gw1] [ 2%] PASSED src/img2pdf_test.py::test_jpg[pikepdf] src/img2pdf_test.py::test_png_gray8a[pikepdf] [gw17] [ 3%] PASSED src/img2pdf_test.py::test_png_rgb16[pdfrw] src/img2pdf_test.py::test_png_gray4[pdfrw] [gw2] [ 3%] PASSED src/img2pdf_test.py::test_jpg[pdfrw] src/img2pdf_test.py::test_png_gray8a[pdfrw] [gw13] [ 3%] PASSED src/img2pdf_test.py::test_png_rgb8[pdfrw] src/img2pdf_test.py::test_png_gray2[pdfrw] [gw16] [ 4%] PASSED src/img2pdf_test.py::test_png_rgb16[pikepdf] src/img2pdf_test.py::test_png_gray4[pikepdf] [gw8] [ 4%] PASSED src/img2pdf_test.py::test_jpg_cmyk[pdfrw] src/img2pdf_test.py::test_png_interlaced[pdfrw] [gw9] [ 4%] PASSED src/img2pdf_test.py::test_jpg_2000[internal] src/img2pdf_test.py::test_png_gray1[internal] [gw7] [ 4%] PASSED src/img2pdf_test.py::test_jpg_cmyk[pikepdf] src/img2pdf_test.py::test_png_interlaced[pikepdf] [gw10] [ 5%] PASSED src/img2pdf_test.py::test_jpg_2000[pikepdf] src/img2pdf_test.py::test_png_gray1[pikepdf] [gw12] [ 5%] PASSED src/img2pdf_test.py::test_jpg_2000[pdfrw] src/img2pdf_test.py::test_png_gray1[pdfrw] [gw0] [ 5%] PASSED src/img2pdf_test.py::test_jpg[internal] src/img2pdf_test.py::test_png_gray8a[internal] [gw6] [ 6%] PASSED src/img2pdf_test.py::test_jpg_cmyk[internal] src/img2pdf_test.py::test_png_interlaced[internal] [gw4] [ 6%] PASSED src/img2pdf_test.py::test_jpg_rot[pikepdf] src/img2pdf_test.py::test_png_gray16a[pikepdf] [gw3] [ 6%] PASSED src/img2pdf_test.py::test_jpg_rot[internal] src/img2pdf_test.py::test_png_gray16a[internal] [gw5] [ 6%] PASSED src/img2pdf_test.py::test_jpg_rot[pdfrw] src/img2pdf_test.py::test_png_gray16a[pdfrw] [gw20] [ 7%] PASSED src/img2pdf_test.py::test_png_gray8[pdfrw] src/img2pdf_test.py::test_gif_palette8[internal] [gw19] [ 7%] PASSED src/img2pdf_test.py::test_png_gray8[pikepdf] src/img2pdf_test.py::test_gif_palette4[pikepdf] [gw23] [ 7%] PASSED src/img2pdf_test.py::test_png_gray16[pdfrw] src/img2pdf_test.py::test_gif_animation[pikepdf] [gw1] [ 8%] PASSED src/img2pdf_test.py::test_png_gray8a[pikepdf] [gw18] [ 8%] PASSED src/img2pdf_test.py::test_png_gray8[internal] src/img2pdf_test.py::test_png_palette1[pikepdf] src/img2pdf_test.py::test_gif_palette4[internal] [gw2] [ 8%] PASSED src/img2pdf_test.py::test_png_gray8a[pdfrw] src/img2pdf_test.py::test_png_palette2[internal] [gw21] [ 8%] PASSED src/img2pdf_test.py::test_png_gray16[internal] src/img2pdf_test.py::test_gif_palette8[pikepdf] [gw22] [ 9%] PASSED src/img2pdf_test.py::test_png_gray16[pikepdf] src/img2pdf_test.py::test_gif_animation[internal] [gw0] [ 9%] PASSED src/img2pdf_test.py::test_png_gray8a[internal] src/img2pdf_test.py::test_png_palette1[internal] [gw11] [ 9%] PASSED src/img2pdf_test.py::test_png_gray2[internal] src/img2pdf_test.py::test_gif_transparent[pikepdf] [gw7] [ 10%] PASSED src/img2pdf_test.py::test_png_interlaced[pikepdf] src/img2pdf_test.py::test_png_palette8[pikepdf] [gw8] [ 10%] PASSED src/img2pdf_test.py::test_png_interlaced[pdfrw] src/img2pdf_test.py::test_png_icc[internal] [gw17] [ 10%] PASSED src/img2pdf_test.py::test_png_gray4[pdfrw] [gw14] [ 10%] PASSED src/img2pdf_test.py::test_png_gray2[pikepdf] src/img2pdf_test.py::test_gif_palette2[pikepdf] src/img2pdf_test.py::test_gif_transparent[pdfrw] [gw6] [ 11%] PASSED src/img2pdf_test.py::test_png_interlaced[internal] [gw13] [ 11%] PASSED src/img2pdf_test.py::test_png_gray2[pdfrw] src/img2pdf_test.py::test_gif_palette1[internal] src/img2pdf_test.py::test_png_palette8[internal] [gw15] [ 11%] PASSED src/img2pdf_test.py::test_png_gray4[internal] [gw10] [ 12%] PASSED src/img2pdf_test.py::test_png_gray1[pikepdf] src/img2pdf_test.py::test_png_icc[pdfrw] src/img2pdf_test.py::test_gif_palette1[pikepdf] [gw16] [ 12%] PASSED src/img2pdf_test.py::test_png_gray4[pikepdf] src/img2pdf_test.py::test_gif_palette2[internal] [gw9] [ 12%] PASSED src/img2pdf_test.py::test_png_gray1[internal] [gw12] [ 12%] PASSED src/img2pdf_test.py::test_png_gray1[pdfrw] src/img2pdf_test.py::test_gif_transparent[internal] src/img2pdf_test.py::test_png_icc[pikepdf] [gw3] [ 13%] PASSED src/img2pdf_test.py::test_png_gray16a[internal] src/img2pdf_test.py::test_png_palette2[pikepdf] [gw4] [ 13%] PASSED src/img2pdf_test.py::test_png_gray16a[pikepdf] src/img2pdf_test.py::test_png_palette4[internal] [gw5] [ 13%] PASSED src/img2pdf_test.py::test_png_gray16a[pdfrw] src/img2pdf_test.py::test_png_palette4[pikepdf] [gw11] [ 14%] PASSED src/img2pdf_test.py::test_gif_transparent[pikepdf] src/img2pdf_test.py::test_tiff_rgb12[internal] [gw14] [ 14%] PASSED src/img2pdf_test.py::test_gif_transparent[pdfrw] src/img2pdf_test.py::test_tiff_rgb12[pikepdf] [gw19] [ 14%] PASSED src/img2pdf_test.py::test_gif_palette4[pikepdf] src/img2pdf_test.py::test_tiff_rgb16[pikepdf] [gw12] [ 14%] PASSED src/img2pdf_test.py::test_gif_transparent[internal] src/img2pdf_test.py::test_tiff_rgb8[pdfrw] [gw1] [ 15%] PASSED src/img2pdf_test.py::test_png_palette1[pikepdf] src/img2pdf_test.py::test_tiff_float[pikepdf] [gw2] [ 15%] PASSED src/img2pdf_test.py::test_png_palette2[internal] src/img2pdf_test.py::test_tiff_float[pdfrw] [gw13] [ 15%] PASSED src/img2pdf_test.py::test_gif_palette1[internal] src/img2pdf_test.py::test_tiff_rgb12[pdfrw] [gw23] [ 16%] PASSED src/img2pdf_test.py::test_gif_animation[pikepdf] src/img2pdf_test.py::test_tiff_rgba8[pdfrw] [gw17] [ 16%] PASSED src/img2pdf_test.py::test_gif_palette2[pikepdf] src/img2pdf_test.py::test_tiff_gray16[internal] [gw11] [ 16%] ERROR src/img2pdf_test.py::test_tiff_rgb12[internal] src/img2pdf_test.py::test_tiff_palette2[pikepdf] [gw22] [ 16%] PASSED src/img2pdf_test.py::test_gif_animation[internal] src/img2pdf_test.py::test_tiff_gray4[pdfrw] [gw15] [ 17%] PASSED src/img2pdf_test.py::test_gif_palette1[pikepdf] src/img2pdf_test.py::test_tiff_multipage[internal] [gw0] [ 17%] PASSED src/img2pdf_test.py::test_png_palette1[internal] src/img2pdf_test.py::test_tiff_float[internal] [gw16] [ 17%] PASSED src/img2pdf_test.py::test_gif_palette2[internal] src/img2pdf_test.py::test_tiff_palette1[internal] [gw3] [ 18%] PASSED src/img2pdf_test.py::test_png_palette2[pikepdf] src/img2pdf_test.py::test_tiff_cmyk8[internal] [gw14] [ 18%] ERROR src/img2pdf_test.py::test_tiff_rgb12[pikepdf] src/img2pdf_test.py::test_tiff_palette8[internal] [gw18] [ 18%] PASSED src/img2pdf_test.py::test_gif_palette4[internal] src/img2pdf_test.py::test_tiff_gray1[internal] [gw2] [ 18%] ERROR src/img2pdf_test.py::test_tiff_float[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[pikepdf] [gw1] [ 19%] ERROR src/img2pdf_test.py::test_tiff_float[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[pikepdf] [gw10] [ 19%] FAILED src/img2pdf_test.py::test_png_icc[pdfrw] src/img2pdf_test.py::test_tiff_rgb8[pikepdf] [gw0] [ 19%] ERROR src/img2pdf_test.py::test_tiff_float[internal] src/img2pdf_test.py::test_tiff_ccitt_nometa1[pikepdf] [gw8] [ 20%] FAILED src/img2pdf_test.py::test_png_icc[internal] [gw13] [ 20%] ERROR src/img2pdf_test.py::test_tiff_rgb12[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[pikepdf] src/img2pdf_test.py::test_tiff_cmyk16[pdfrw] [gw4] [ 20%] PASSED src/img2pdf_test.py::test_png_palette4[internal] src/img2pdf_test.py::test_tiff_cmyk8[pikepdf] [gw9] [ 20%] FAILED src/img2pdf_test.py::test_png_icc[pikepdf] src/img2pdf_test.py::test_tiff_rgb8[internal] [gw5] [ 21%] PASSED src/img2pdf_test.py::test_png_palette4[pikepdf] src/img2pdf_test.py::test_tiff_cmyk8[pdfrw] [gw19] [ 21%] PASSED src/img2pdf_test.py::test_tiff_rgb16[pikepdf] src/img2pdf_test.py::test_tiff_rgb16[pdfrw] [gw12] [ 21%] PASSED src/img2pdf_test.py::test_tiff_rgb8[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[pikepdf] [gw23] [ 22%] PASSED src/img2pdf_test.py::test_tiff_rgba8[pdfrw] src/img2pdf_test.py::test_tiff_rgba16[internal] [gw17] [ 22%] PASSED src/img2pdf_test.py::test_tiff_gray16[internal] src/img2pdf_test.py::test_tiff_gray16[pikepdf] [gw8] [ 22%] PASSED src/img2pdf_test.py::test_tiff_cmyk16[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases4] [gw8] [ 22%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases4] src/img2pdf_test.py::test_layout[layout_test_cases5] [gw8] [ 23%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases5] src/img2pdf_test.py::test_layout[layout_test_cases6] [gw8] [ 23%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases6] src/img2pdf_test.py::test_layout[layout_test_cases16] [gw8] [ 23%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases16] src/img2pdf_test.py::test_layout[layout_test_cases17] [gw8] [ 24%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases17] src/img2pdf_test.py::test_layout[layout_test_cases18] [gw8] [ 24%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases18] src/img2pdf_test.py::test_layout[layout_test_cases19] [gw8] [ 24%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases19] src/img2pdf_test.py::test_layout[layout_test_cases20] [gw8] [ 25%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases20] src/img2pdf_test.py::test_layout[layout_test_cases21] [gw8] [ 25%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases21] src/img2pdf_test.py::test_layout[layout_test_cases22] [gw8] [ 25%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases22] src/img2pdf_test.py::test_layout[layout_test_cases23] [gw8] [ 25%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases23] src/img2pdf_test.py::test_layout[layout_test_cases24] [gw8] [ 26%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases24] [gw3] [ 26%] PASSED src/img2pdf_test.py::test_tiff_cmyk8[internal] src/img2pdf_test.py::test_layout[layout_test_cases25] [gw8] [ 26%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases25] src/img2pdf_test.py::test_tiff_ccitt_nometa2[pikepdf] src/img2pdf_test.py::test_layout[layout_test_cases26] [gw8] [ 27%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases26] src/img2pdf_test.py::test_layout[layout_test_cases27] [gw8] [ 27%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases27] src/img2pdf_test.py::test_layout[layout_test_cases28] [gw8] [ 27%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases28] src/img2pdf_test.py::test_layout[layout_test_cases29] [gw11] [ 27%] PASSED src/img2pdf_test.py::test_tiff_palette2[pikepdf] [gw8] [ 28%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases29] src/img2pdf_test.py::test_tiff_palette4[internal] src/img2pdf_test.py::test_layout[layout_test_cases30] [gw8] [ 28%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases30] src/img2pdf_test.py::test_layout[layout_test_cases31] [gw8] [ 28%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases31] src/img2pdf_test.py::test_layout[layout_test_cases32] [gw8] [ 29%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases32] src/img2pdf_test.py::test_layout[layout_test_cases33] [gw8] [ 29%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases33] src/img2pdf_test.py::test_layout[layout_test_cases34] [gw8] [ 29%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases34] src/img2pdf_test.py::test_layout[layout_test_cases35] [gw8] [ 29%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases35] [gw16] [ 30%] PASSED src/img2pdf_test.py::test_tiff_palette1[internal] src/img2pdf_test.py::test_layout[layout_test_cases36] [gw8] [ 30%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases36] src/img2pdf_test.py::test_tiff_palette1[pikepdf] src/img2pdf_test.py::test_layout[layout_test_cases37] [gw8] [ 30%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases37] src/img2pdf_test.py::test_layout[layout_test_cases38] [gw8] [ 31%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases38] [gw22] [ 31%] PASSED src/img2pdf_test.py::test_tiff_gray4[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases39] src/img2pdf_test.py::test_tiff_gray8[internal] [gw8] [ 31%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases39] src/img2pdf_test.py::test_layout[layout_test_cases40] [gw8] [ 31%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases40] src/img2pdf_test.py::test_layout[layout_test_cases41] [gw8] [ 32%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases41] src/img2pdf_test.py::test_layout[layout_test_cases42] [gw8] [ 32%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases42] src/img2pdf_test.py::test_layout[layout_test_cases43] [gw8] [ 32%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases43] src/img2pdf_test.py::test_layout[layout_test_cases44] [gw8] [ 33%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases44] src/img2pdf_test.py::test_layout[layout_test_cases45] [gw8] [ 33%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases45] src/img2pdf_test.py::test_layout[layout_test_cases46] [gw8] [ 33%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases46] src/img2pdf_test.py::test_layout[layout_test_cases47] [gw8] [ 33%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases47] src/img2pdf_test.py::test_layout[layout_test_cases48] [gw8] [ 34%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases48] src/img2pdf_test.py::test_layout[layout_test_cases49] [gw8] [ 34%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases49] src/img2pdf_test.py::test_layout[layout_test_cases50] [gw8] [ 34%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases50] src/img2pdf_test.py::test_layout[layout_test_cases51] [gw8] [ 35%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases51] src/img2pdf_test.py::test_layout[layout_test_cases52] [gw8] [ 35%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases52] src/img2pdf_test.py::test_layout[layout_test_cases53] [gw8] [ 35%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases53] src/img2pdf_test.py::test_layout[layout_test_cases54] [gw8] [ 35%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases54] src/img2pdf_test.py::test_layout[layout_test_cases55] [gw8] [ 36%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases55] src/img2pdf_test.py::test_layout[layout_test_cases56] [gw8] [ 36%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases56] src/img2pdf_test.py::test_layout[layout_test_cases57] [gw8] [ 36%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases57] src/img2pdf_test.py::test_layout[layout_test_cases58] [gw8] [ 37%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases58] src/img2pdf_test.py::test_layout[layout_test_cases59] [gw8] [ 37%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases59] src/img2pdf_test.py::test_layout[layout_test_cases60] [gw8] [ 37%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases60] src/img2pdf_test.py::test_layout[layout_test_cases61] [gw8] [ 37%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases61] src/img2pdf_test.py::test_layout[layout_test_cases62] [gw8] [ 38%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases62] src/img2pdf_test.py::test_layout[layout_test_cases63] [gw8] [ 38%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases63] src/img2pdf_test.py::test_layout[layout_test_cases64] [gw8] [ 38%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases64] src/img2pdf_test.py::test_layout[layout_test_cases65] [gw8] [ 39%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases65] src/img2pdf_test.py::test_layout[layout_test_cases66] [gw8] [ 39%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases66] src/img2pdf_test.py::test_layout[layout_test_cases67] [gw8] [ 39%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases67] src/img2pdf_test.py::test_layout[layout_test_cases68] [gw8] [ 39%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases68] src/img2pdf_test.py::test_layout[layout_test_cases69] [gw8] [ 40%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases69] src/img2pdf_test.py::test_layout[layout_test_cases70] [gw10] [ 40%] PASSED src/img2pdf_test.py::test_tiff_rgb8[pikepdf] [gw8] [ 40%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases70] src/img2pdf_test.py::test_layout[layout_test_cases71] src/img2pdf_test.py::test_layout[layout_test_cases1] [gw8] [ 41%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases71] src/img2pdf_test.py::test_layout[layout_test_cases72] [gw10] [ 41%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases1] [gw8] [ 41%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases72] src/img2pdf_test.py::test_layout[layout_test_cases2] [gw15] [ 41%] PASSED src/img2pdf_test.py::test_tiff_multipage[internal] src/img2pdf_test.py::test_tiff_multipage[pikepdf] [gw10] [ 42%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases2] src/img2pdf_test.py::test_layout[layout_test_cases73] src/img2pdf_test.py::test_layout[layout_test_cases3] [gw8] [ 42%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases73] [gw10] [ 42%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases3] src/img2pdf_test.py::test_layout[layout_test_cases74] src/img2pdf_test.py::test_layout[layout_test_cases75] [gw10] [ 43%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases75] [gw8] [ 43%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases74] src/img2pdf_test.py::test_layout[layout_test_cases77] src/img2pdf_test.py::test_layout[layout_test_cases76] [gw8] [ 43%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases76] [gw10] [ 43%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases77] src/img2pdf_test.py::test_layout[layout_test_cases78] src/img2pdf_test.py::test_layout[layout_test_cases79] [gw8] [ 44%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases79] [gw10] [ 44%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases78] src/img2pdf_test.py::test_layout[layout_test_cases80] src/img2pdf_test.py::test_layout[layout_test_cases81] [gw10] [ 44%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases80] [gw8] [ 45%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases81] src/img2pdf_test.py::test_layout[layout_test_cases83] src/img2pdf_test.py::test_layout[layout_test_cases82] [gw8] [ 45%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases83] [gw10] [ 45%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases82] src/img2pdf_test.py::test_layout[layout_test_cases85] src/img2pdf_test.py::test_layout[layout_test_cases84] [gw8] [ 45%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases85] [gw10] [ 46%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases84] src/img2pdf_test.py::test_layout[layout_test_cases86] src/img2pdf_test.py::test_layout[layout_test_cases87] [gw8] [ 46%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases86] [gw10] [ 46%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases87] src/img2pdf_test.py::test_layout[layout_test_cases88] [gw8] [ 47%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases88] src/img2pdf_test.py::test_layout[layout_test_cases89] [gw10] [ 47%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases89] src/img2pdf_test.py::test_layout[layout_test_cases90] src/img2pdf_test.py::test_layout[layout_test_cases91] [gw8] [ 47%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases90] [gw10] [ 47%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases91] src/img2pdf_test.py::test_layout[layout_test_cases92] [gw8] [ 48%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases92] src/img2pdf_test.py::test_layout[layout_test_cases93] [gw10] [ 48%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases93] src/img2pdf_test.py::test_layout[layout_test_cases94] [gw8] [ 48%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases94] src/img2pdf_test.py::test_layout[layout_test_cases95] [gw10] [ 49%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases95] src/img2pdf_test.py::test_layout[layout_test_cases96] [gw8] [ 49%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases96] src/img2pdf_test.py::test_layout[layout_test_cases97] src/img2pdf_test.py::test_layout[layout_test_cases98] [gw10] [ 49%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases97] [gw8] [ 50%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases98] src/img2pdf_test.py::test_layout[layout_test_cases99] [gw10] [ 50%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases99] src/img2pdf_test.py::test_layout[layout_test_cases100] [gw2] [ 50%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[pikepdf] [gw8] [ 50%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases100] src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases101] src/img2pdf_test.py::test_layout[layout_test_cases102] [gw10] [ 51%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases101] [gw8] [ 51%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases102] src/img2pdf_test.py::test_layout[layout_test_cases103] src/img2pdf_test.py::test_layout[layout_test_cases104] [gw10] [ 51%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases103] [gw8] [ 52%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases104] src/img2pdf_test.py::test_layout[layout_test_cases105] src/img2pdf_test.py::test_layout[layout_test_cases106] [gw10] [ 52%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases105] [gw8] [ 52%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases106] src/img2pdf_test.py::test_layout[layout_test_cases107] src/img2pdf_test.py::test_layout[layout_test_cases108] [gw10] [ 52%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases107] [gw8] [ 53%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases108] src/img2pdf_test.py::test_layout[layout_test_cases109] src/img2pdf_test.py::test_layout[layout_test_cases110] [gw10] [ 53%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases109] [gw8] [ 53%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases110] src/img2pdf_test.py::test_layout[layout_test_cases111] src/img2pdf_test.py::test_layout[layout_test_cases112] [gw10] [ 54%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases111] [gw8] [ 54%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases112] src/img2pdf_test.py::test_layout[layout_test_cases113] src/img2pdf_test.py::test_layout[layout_test_cases114] [gw10] [ 54%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases113] src/img2pdf_test.py::test_layout[layout_test_cases115] [gw9] [ 54%] PASSED src/img2pdf_test.py::test_tiff_rgb8[internal] [gw8] [ 55%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases114] [gw10] [ 55%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases115] src/img2pdf_test.py::test_layout[layout_test_cases10] [gw9] [ 55%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases10] src/img2pdf_test.py::test_layout[layout_test_cases117] src/img2pdf_test.py::test_layout[layout_test_cases116] [gw10] [ 56%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases117] src/img2pdf_test.py::test_layout[layout_test_cases11] [gw8] [ 56%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases116] [gw9] [ 56%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases11] src/img2pdf_test.py::test_layout[layout_test_cases118] src/img2pdf_test.py::test_layout[layout_test_cases12] src/img2pdf_test.py::test_layout[layout_test_cases119] [gw10] [ 56%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases118] [gw8] [ 57%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases119] [gw9] [ 57%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases12] [gw18] [ 57%] ERROR src/img2pdf_test.py::test_tiff_gray1[internal] src/img2pdf_test.py::test_tiff_gray1[pikepdf] [gw1] [ 58%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases120] src/img2pdf_test.py::test_layout[layout_test_cases122] src/img2pdf_test.py::test_layout[layout_test_cases121] [gw8] [ 58%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases122] [gw9] [ 58%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases121] src/img2pdf_test.py::test_layout[layout_test_cases124] [gw10] [ 58%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases120] src/img2pdf_test.py::test_layout[layout_test_cases125] [gw8] [ 59%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases124] [gw9] [ 59%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases125] src/img2pdf_test.py::test_layout[layout_test_cases123] [gw10] [ 59%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases123] src/img2pdf_test.py::test_layout[layout_test_cases126] src/img2pdf_test.py::test_layout[layout_test_cases127] src/img2pdf_test.py::test_layout[layout_test_cases128] [gw9] [ 60%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases127] [gw10] [ 60%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases128] [gw8] [ 60%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases126] src/img2pdf_test.py::test_layout[layout_test_cases130] src/img2pdf_test.py::test_layout[layout_test_cases131] src/img2pdf_test.py::test_layout[layout_test_cases129] [gw9] [ 60%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases130] [gw10] [ 61%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases131] [gw8] [ 61%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases129] src/img2pdf_test.py::test_layout[layout_test_cases133] src/img2pdf_test.py::test_layout[layout_test_cases132] src/img2pdf_test.py::test_layout[layout_test_cases134] [gw9] [ 61%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases132] [gw10] [ 62%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases133] [gw8] [ 62%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases134] src/img2pdf_test.py::test_layout[layout_test_cases135] src/img2pdf_test.py::test_layout[layout_test_cases136] src/img2pdf_test.py::test_layout[layout_test_cases137] [gw10] [ 62%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases135] [gw9] [ 62%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases136] [gw8] [ 63%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases137] src/img2pdf_test.py::test_layout[layout_test_cases138] src/img2pdf_test.py::test_layout[layout_test_cases140] [gw10] [ 63%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases138] src/img2pdf_test.py::test_layout[layout_test_cases139] [gw8] [ 63%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases140] [gw9] [ 64%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases139] src/img2pdf_test.py::test_layout[layout_test_cases141] [gw10] [ 64%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases141] src/img2pdf_test.py::test_layout[layout_test_cases142] src/img2pdf_test.py::test_layout[layout_test_cases143] [gw8] [ 64%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases142] src/img2pdf_test.py::test_layout[layout_test_cases144] [gw10] [ 64%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases144] src/img2pdf_test.py::test_layout[layout_test_cases145] [gw9] [ 65%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases143] src/img2pdf_test.py::test_layout[layout_test_cases147] [gw8] [ 65%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases145] [gw10] [ 65%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases147] src/img2pdf_test.py::test_layout[layout_test_cases146] [gw9] [ 66%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases146] src/img2pdf_test.py::test_layout[layout_test_cases148] [gw8] [ 66%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases148] src/img2pdf_test.py::test_layout[layout_test_cases149] [gw10] [ 66%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases149] src/img2pdf_test.py::test_layout[layout_test_cases150] [gw9] [ 66%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases150] src/img2pdf_test.py::test_layout[layout_test_cases151] src/img2pdf_test.py::test_layout[layout_test_cases152] src/img2pdf_test.py::test_layout[layout_test_cases153] [gw10] [ 67%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases152] [gw8] [ 67%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases151] [gw9] [ 67%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases153] src/img2pdf_test.py::test_layout[layout_test_cases155] src/img2pdf_test.py::test_layout[layout_test_cases154] [gw10] [ 68%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases155] src/img2pdf_test.py::test_layout[layout_test_cases156] [gw9] [ 68%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases156] [gw8] [ 68%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases154] src/img2pdf_test.py::test_layout[layout_test_cases157] [gw10] [ 68%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases157] src/img2pdf_test.py::test_layout[layout_test_cases158] src/img2pdf_test.py::test_layout[layout_test_cases159] src/img2pdf_test.py::test_layout[layout_test_cases160] [gw8] [ 69%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases158] [gw10] [ 69%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases160] [gw9] [ 69%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases159] src/img2pdf_test.py::test_layout[layout_test_cases161] src/img2pdf_test.py::test_layout[layout_test_cases162] src/img2pdf_test.py::test_layout[layout_test_cases163] [gw8] [ 70%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases161] [gw9] [ 70%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases162] [gw10] [ 70%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases163] src/img2pdf_test.py::test_layout[layout_test_cases164] [gw8] [ 70%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases164] src/img2pdf_test.py::test_layout[layout_test_cases165] src/img2pdf_test.py::test_layout[layout_test_cases166] src/img2pdf_test.py::test_layout[layout_test_cases167] [gw9] [ 71%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases165] [gw10] [ 71%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases166] [gw8] [ 71%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases167] src/img2pdf_test.py::test_layout[layout_test_cases168] src/img2pdf_test.py::test_layout[layout_test_cases170] src/img2pdf_test.py::test_layout[layout_test_cases169] [gw10] [ 72%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases168] [gw9] [ 72%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases169] [gw8] [ 72%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases170] src/img2pdf_test.py::test_layout[layout_test_cases171] [gw10] [ 72%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases171] src/img2pdf_test.py::test_layout[layout_test_cases172] [gw8] [ 73%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases172] src/img2pdf_test.py::test_layout[layout_test_cases173] [gw9] [ 73%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases173] src/img2pdf_test.py::test_layout[layout_test_cases174] src/img2pdf_test.py::test_layout[layout_test_cases175] src/img2pdf_test.py::test_layout[layout_test_cases176] [gw10] [ 73%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases174] [gw8] [ 74%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases175] [gw9] [ 74%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases176] src/img2pdf_test.py::test_layout[layout_test_cases177] [gw10] [ 74%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases177] src/img2pdf_test.py::test_layout[layout_test_cases178] [gw8] [ 75%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases178] src/img2pdf_test.py::test_layout[layout_test_cases180] src/img2pdf_test.py::test_layout[layout_test_cases179] src/img2pdf_test.py::test_general[CMYK.jpg-internal] [gw10] [ 75%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases180] [gw9] [ 75%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases179] src/img2pdf_test.py::test_general[CMYK.jpg-pikepdf] src/img2pdf_test.py::test_general[CMYK.jpg-pdfrw] [gw8] [ 75%] PASSED src/img2pdf_test.py::test_general[CMYK.jpg-internal] src/img2pdf_test.py::test_general[CMYK.tif-internal] [gw10] [ 76%] PASSED src/img2pdf_test.py::test_general[CMYK.jpg-pdfrw] [gw9] [ 76%] PASSED src/img2pdf_test.py::test_general[CMYK.jpg-pikepdf] [gw5] [ 76%] PASSED src/img2pdf_test.py::test_tiff_cmyk8[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases13] src/img2pdf_test.py::test_general[CMYK.tif-pdfrw] [gw5] [ 77%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases13] src/img2pdf_test.py::test_layout[layout_test_cases14] src/img2pdf_test.py::test_general[CMYK.tif-pikepdf] [gw8] [ 77%] PASSED src/img2pdf_test.py::test_general[CMYK.tif-internal] [gw5] [ 77%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases14] src/img2pdf_test.py::test_general[animation.gif-internal] src/img2pdf_test.py::test_layout[layout_test_cases15] [gw5] [ 77%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases15] src/img2pdf_test.py::test_general[gray.png-pikepdf] [gw10] [ 78%] PASSED src/img2pdf_test.py::test_general[CMYK.tif-pdfrw] src/img2pdf_test.py::test_general[animation.gif-pikepdf] [gw9] [ 78%] PASSED src/img2pdf_test.py::test_general[CMYK.tif-pikepdf] src/img2pdf_test.py::test_general[animation.gif-pdfrw] [gw9] [ 78%] PASSED src/img2pdf_test.py::test_general[animation.gif-pdfrw] src/img2pdf_test.py::test_general[mono.png-pikepdf] [gw5] [ 79%] PASSED src/img2pdf_test.py::test_general[gray.png-pikepdf] src/img2pdf_test.py::test_general[gray.png-pdfrw] [gw8] [ 79%] PASSED src/img2pdf_test.py::test_general[animation.gif-internal] [gw9] [ 79%] PASSED src/img2pdf_test.py::test_general[mono.png-pikepdf] [gw4] [ 79%] PASSED src/img2pdf_test.py::test_tiff_cmyk8[pikepdf] src/img2pdf_test.py::test_layout[layout_test_cases7] [gw4] [ 80%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases7] src/img2pdf_test.py::test_general[mono.png-pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases8] src/img2pdf_test.py::test_general[gray.png-internal] [gw5] [ 80%] PASSED src/img2pdf_test.py::test_general[gray.png-pdfrw] [gw4] [ 80%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases8] [gw10] [ 81%] PASSED src/img2pdf_test.py::test_general[animation.gif-pikepdf] src/img2pdf_test.py::test_general[mono.tif-internal] src/img2pdf_test.py::test_layout[layout_test_cases9] src/img2pdf_test.py::test_general[mono.png-internal] [gw4] [ 81%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases9] [gw8] [ 81%] PASSED src/img2pdf_test.py::test_general[gray.png-internal] src/img2pdf_test.py::test_general[normal.jpg-pikepdf] src/img2pdf_test.py::test_general[mono.tif-pdfrw] [gw9] [ 81%] PASSED src/img2pdf_test.py::test_general[mono.png-pdfrw] src/img2pdf_test.py::test_general[mono.tif-pikepdf] [gw10] [ 82%] PASSED src/img2pdf_test.py::test_general[mono.png-internal] src/img2pdf_test.py::test_general[normal.jpg-pdfrw] [gw10] [ 82%] PASSED src/img2pdf_test.py::test_general[normal.jpg-pdfrw] [gw4] [ 82%] PASSED src/img2pdf_test.py::test_general[normal.jpg-pikepdf] src/img2pdf_test.py::test_general[normal.png-internal] [gw19] [ 83%] PASSED src/img2pdf_test.py::test_tiff_rgb16[pdfrw] src/img2pdf_test.py::test_tiff_rgba8[internal] [gw4] [ 83%] PASSED src/img2pdf_test.py::test_general[normal.png-internal] [gw13] [ 83%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[pdfrw] [gw0] [ 83%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa1[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_nometa1[pdfrw] [gw21] [ 84%] PASSED src/img2pdf_test.py::test_gif_palette8[pikepdf] src/img2pdf_test.py::test_tiff_gray2[pikepdf] [gw17] [ 84%] PASSED src/img2pdf_test.py::test_tiff_gray16[pikepdf] src/img2pdf_test.py::test_tiff_gray16[pdfrw] [gw23] [ 84%] PASSED src/img2pdf_test.py::test_tiff_rgba16[internal] src/img2pdf_test.py::test_tiff_rgba16[pikepdf] [gw7] [ 85%] PASSED src/img2pdf_test.py::test_png_palette8[pikepdf] src/img2pdf_test.py::test_tiff_cmyk16[pikepdf] [gw12] [ 85%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[pdfrw] [gw20] [ 85%] PASSED src/img2pdf_test.py::test_gif_palette8[internal] src/img2pdf_test.py::test_tiff_rgb14[internal] [gw16] [ 85%] PASSED src/img2pdf_test.py::test_tiff_palette1[pikepdf] src/img2pdf_test.py::test_tiff_palette2[internal] [gw22] [ 86%] PASSED src/img2pdf_test.py::test_tiff_gray8[internal] src/img2pdf_test.py::test_tiff_gray8[pikepdf] [gw6] [ 86%] PASSED src/img2pdf_test.py::test_png_palette8[internal] src/img2pdf_test.py::test_tiff_cmyk16[internal] [gw20] [ 86%] ERROR src/img2pdf_test.py::test_tiff_rgb14[internal] src/img2pdf_test.py::test_tiff_rgb14[pikepdf] [gw5] [ 87%] FAILED src/img2pdf_test.py::test_general[mono.tif-internal] src/img2pdf_test.py::test_general[normal.jpg-internal] [gw5] [ 87%] PASSED src/img2pdf_test.py::test_general[normal.jpg-internal] [gw2] [ 87%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[internal] [gw9] [ 87%] FAILED src/img2pdf_test.py::test_general[mono.tif-pikepdf] src/img2pdf_test.py::test_general[normal.png-pdfrw] [gw8] [ 88%] FAILED src/img2pdf_test.py::test_general[mono.tif-pdfrw] [gw9] [ 88%] PASSED src/img2pdf_test.py::test_general[normal.png-pdfrw] src/img2pdf_test.py::test_general[normal.png-pikepdf] [gw8] [ 88%] PASSED src/img2pdf_test.py::test_general[normal.png-pikepdf] [gw1] [ 89%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[internal] [gw19] [ 89%] PASSED src/img2pdf_test.py::test_tiff_rgba8[internal] src/img2pdf_test.py::test_tiff_rgba8[pikepdf] [gw3] [ 89%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa2[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_nometa2[pdfrw] [gw18] [ 89%] ERROR src/img2pdf_test.py::test_tiff_gray1[pikepdf] src/img2pdf_test.py::test_tiff_gray1[pdfrw] [gw15] [ 90%] PASSED src/img2pdf_test.py::test_tiff_multipage[pikepdf] [gw17] [ 90%] PASSED src/img2pdf_test.py::test_tiff_gray16[pdfrw] src/img2pdf_test.py::test_tiff_multipage[pdfrw] [gw20] [ 90%] ERROR src/img2pdf_test.py::test_tiff_rgb14[pikepdf] src/img2pdf_test.py::test_tiff_rgb14[pdfrw] [gw23] [ 91%] PASSED src/img2pdf_test.py::test_tiff_rgba16[pikepdf] src/img2pdf_test.py::test_tiff_rgba16[pdfrw] [gw11] [ 91%] PASSED src/img2pdf_test.py::test_tiff_palette4[internal] src/img2pdf_test.py::test_tiff_palette4[pikepdf] [gw0] [ 91%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa1[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_nometa2[internal] [gw13] [ 91%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_nometa1[internal] [gw7] [ 92%] PASSED src/img2pdf_test.py::test_tiff_cmyk16[pikepdf] [gw20] [ 92%] ERROR src/img2pdf_test.py::test_tiff_rgb14[pdfrw] src/img2pdf_test.py::test_tiff_rgb16[internal] [gw21] [ 92%] PASSED src/img2pdf_test.py::test_tiff_gray2[pikepdf] src/img2pdf_test.py::test_tiff_gray2[pdfrw] [gw12] [ 93%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[pdfrw] src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[internal] [gw14] [ 93%] PASSED src/img2pdf_test.py::test_tiff_palette8[internal] src/img2pdf_test.py::test_tiff_palette8[pikepdf] [gw6] [ 93%] PASSED src/img2pdf_test.py::test_tiff_cmyk16[internal] [gw16] [ 93%] PASSED src/img2pdf_test.py::test_tiff_palette2[internal] [gw22] [ 94%] PASSED src/img2pdf_test.py::test_tiff_gray8[pikepdf] src/img2pdf_test.py::test_tiff_gray8[pdfrw] [gw19] [ 94%] PASSED src/img2pdf_test.py::test_tiff_rgba8[pikepdf] [gw23] [ 94%] PASSED src/img2pdf_test.py::test_tiff_rgba16[pdfrw] [gw3] [ 95%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa2[pdfrw] src/img2pdf_test.py::test_layout[layout_test_cases0] [gw3] [ 95%] PASSED src/img2pdf_test.py::test_layout[layout_test_cases0] [gw2] [ 95%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_black[internal] [gw11] [ 95%] PASSED src/img2pdf_test.py::test_tiff_palette4[pikepdf] [gw18] [ 96%] ERROR src/img2pdf_test.py::test_tiff_gray1[pdfrw] src/img2pdf_test.py::test_tiff_gray2[internal] [gw1] [ 96%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_l2m_white[internal] [gw20] [ 96%] PASSED src/img2pdf_test.py::test_tiff_rgb16[internal] [gw13] [ 97%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa1[internal] [gw0] [ 97%] PASSED src/img2pdf_test.py::test_tiff_ccitt_nometa2[internal] [gw15] [ 97%] PASSED src/img2pdf_test.py::test_tiff_multipage[pdfrw] [gw21] [ 97%] PASSED src/img2pdf_test.py::test_tiff_gray2[pdfrw] src/img2pdf_test.py::test_tiff_gray4[internal] [gw14] [ 98%] PASSED src/img2pdf_test.py::test_tiff_palette8[pikepdf] src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[internal] [gw12] [ 98%] PASSED src/img2pdf_test.py::test_tiff_ccitt_msb_m2l_white[internal] [gw22] [ 98%] PASSED src/img2pdf_test.py::test_tiff_gray8[pdfrw] [gw18] [ 99%] PASSED src/img2pdf_test.py::test_tiff_gray2[internal] [gw21] [ 99%] PASSED src/img2pdf_test.py::test_tiff_gray4[internal] src/img2pdf_test.py::test_tiff_gray4[pikepdf] [gw14] [ 99%] PASSED src/img2pdf_test.py::test_tiff_ccitt_lsb_m2l_white[internal] [gw21] [100%] PASSED src/img2pdf_test.py::test_tiff_gray4[pikepdf] ==================================== ERRORS ==================================== _________________ ERROR at setup of test_tiff_rgb12[internal] __________________ [gw11] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...2fa220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb12_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "12", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 12, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 12, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'standardDeviation': 1707.1256, 'kurtosis': -1.0010315, 'skewness': 0.91501655, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'standardDeviation': 1706.6778, 'kurtosis': -1.0008776, 'skewness': 0.91503326, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'standardDeviation': 1708.0055, 'kurtosis': -1.0066275, 'skewness': 0.91215625, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'standardDeviation': 1706.6937, 'kurtosis': -0.99779046, 'skewness': 0.91710177, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'tainted': False, 'filesize': '16464B', 'numberPixels': '3600', 'pixelsPerSecond': '1862122B', 'userTime': '0.000u', 'elapsedTime': '0:01.001', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 12, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99779046, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'min': 0, 'skewness': 0.91710177, 'standardDeviation': 1706.6937}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0066275, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'min': 0, 'skewness': 0.91215625, 'standardDeviation': 1708.0055}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0008776, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'min': 0, 'skewness': 0.91503326, 'standardDeviation': 1706.6778}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.001', 'endianness': 'LSB', 'filesize': '16464B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0010315, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'min': 0, 'skewness': 0.91501655, 'standardDeviation': 1707.1256}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1862122B', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fd65f2fa220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw11')) src/img2pdf_test.py:2463: AssertionError __________________ ERROR at setup of test_tiff_rgb12[pikepdf] __________________ [gw14] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...e34220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb12_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "12", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 12, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 12, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'standardDeviation': 1707.1256, 'kurtosis': -1.0010315, 'skewness': 0.91501655, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'standardDeviation': 1706.6778, 'kurtosis': -1.0008776, 'skewness': 0.91503326, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'standardDeviation': 1708.0055, 'kurtosis': -1.0066275, 'skewness': 0.91215625, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'standardDeviation': 1706.6937, 'kurtosis': -0.99779046, 'skewness': 0.91710177, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'tainted': False, 'filesize': '16464B', 'numberPixels': '3600', 'pixelsPerSecond': '2559384B', 'userTime': '0.000u', 'elapsedTime': '0:01.001', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 12, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99779046, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'min': 0, 'skewness': 0.91710177, 'standardDeviation': 1706.6937}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0066275, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'min': 0, 'skewness': 0.91215625, 'standardDeviation': 1708.0055}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0008776, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'min': 0, 'skewness': 0.91503326, 'standardDeviation': 1706.6778}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.001', 'endianness': 'LSB', 'filesize': '16464B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0010315, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'min': 0, 'skewness': 0.91501655, 'standardDeviation': 1707.1256}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '2559384B', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fe401e34220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw14')) src/img2pdf_test.py:2463: AssertionError ___________________ ERROR at setup of test_tiff_float[pdfrw] ___________________ [gw2] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...6dc0220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2')) tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2/normal_png0/normal.png') @pytest.fixture(scope="session") def tiff_float_img(tmp_path_factory, tmp_normal_png): in_img = tmp_path_factory.mktemp("tiff_float_img") / "in.tiff" subprocess.check_call( [ "convert", str(tmp_normal_png), "-depth", "32", "-define", "quantum:format=floating-point", str(in_img), ] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB > assert identify[0]["image"].get("depth") == 8, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2/tiff_float_img0/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 32, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'standardDeviation': 1785458900.0, 'kurtosis': -1.0012551, 'skewness': 0.91534253, 'entropy': 0.46085853}}, 'channelStatistics': {'red': {'min': 0, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'standardDeviation': 1784991400.0, 'kurtosis': -1.0011022, 'skewness': 0.91535869, 'entropy': 0.4620463}, 'green': {'min': 0, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'standardDeviation': 1786376800.0, 'kurtosis': -1.0068552, 'skewness': 0.91247895, 'entropy': 0.46098122}, 'blue': {'min': 0, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'standardDeviation': 1785008300.0, 'kurtosis': -0.99800862, 'skewness': 0.91743134, 'entropy': 0.45954807}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'tainted': False, 'filesize': '43530B', 'numberPixels': '3600', 'pixelsPerSecond': '1609447B', 'userTime': '0.000u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 8 E +32 E -8 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 32, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45954807, 'kurtosis': -0.99800862, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'min': 0, 'skewness': 0.91743134, 'standardDeviation': 1785008300.0}, 'green': {'entropy': 0.46098122, 'kurtosis': -1.0068552, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'min': 0, 'skewness': 0.91247895, 'standardDeviation': 1786376800.0}, 'red': {'entropy': 0.4620463, 'kurtosis': -1.0011022, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'min': 0, 'skewness': 0.91535869, 'standardDeviation': 1784991400.0}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '43530B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.46085853, 'kurtosis': -1.0012551, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'min': 0, 'skewness': 0.91534253, 'standardDeviation': 1785458900.0}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2/tiff_float_img0/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1609447B', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2/tiff_float_img0/in.tiff') tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2/normal_png0/normal.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1dc6dc0220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw2')) src/img2pdf_test.py:2255: AssertionError __________________ ERROR at setup of test_tiff_float[pikepdf] __________________ [gw1] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...ac93220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1')) tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1/normal_png0/normal.png') @pytest.fixture(scope="session") def tiff_float_img(tmp_path_factory, tmp_normal_png): in_img = tmp_path_factory.mktemp("tiff_float_img") / "in.tiff" subprocess.check_call( [ "convert", str(tmp_normal_png), "-depth", "32", "-define", "quantum:format=floating-point", str(in_img), ] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB > assert identify[0]["image"].get("depth") == 8, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1/tiff_float_img0/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 32, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'standardDeviation': 1785458900.0, 'kurtosis': -1.0012551, 'skewness': 0.91534253, 'entropy': 0.46085853}}, 'channelStatistics': {'red': {'min': 0, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'standardDeviation': 1784991400.0, 'kurtosis': -1.0011022, 'skewness': 0.91535869, 'entropy': 0.4620463}, 'green': {'min': 0, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'standardDeviation': 1786376800.0, 'kurtosis': -1.0068552, 'skewness': 0.91247895, 'entropy': 0.46098122}, 'blue': {'min': 0, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'standardDeviation': 1785008300.0, 'kurtosis': -0.99800862, 'skewness': 0.91743134, 'entropy': 0.45954807}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'tainted': False, 'filesize': '43530B', 'numberPixels': '3600', 'pixelsPerSecond': '1441440B', 'userTime': '0.010u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 8 E +32 E -8 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 32, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45954807, 'kurtosis': -0.99800862, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'min': 0, 'skewness': 0.91743134, 'standardDeviation': 1785008300.0}, 'green': {'entropy': 0.46098122, 'kurtosis': -1.0068552, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'min': 0, 'skewness': 0.91247895, 'standardDeviation': 1786376800.0}, 'red': {'entropy': 0.4620463, 'kurtosis': -1.0011022, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'min': 0, 'skewness': 0.91535869, 'standardDeviation': 1784991400.0}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '43530B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.46085853, 'kurtosis': -1.0012551, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'min': 0, 'skewness': 0.91534253, 'standardDeviation': 1785458900.0}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1/tiff_float_img0/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1441440B', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.010u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1/tiff_float_img0/in.tiff') tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1/normal_png0/normal.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f5b3ac93220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw1')) src/img2pdf_test.py:2255: AssertionError _________________ ERROR at setup of test_tiff_float[internal] __________________ [gw0] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...b528220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0')) tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0/normal_png0/normal.png') @pytest.fixture(scope="session") def tiff_float_img(tmp_path_factory, tmp_normal_png): in_img = tmp_path_factory.mktemp("tiff_float_img") / "in.tiff" subprocess.check_call( [ "convert", str(tmp_normal_png), "-depth", "32", "-define", "quantum:format=floating-point", str(in_img), ] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB > assert identify[0]["image"].get("depth") == 8, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0/tiff_float_img0/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 32, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'standardDeviation': 1785458900.0, 'kurtosis': -1.0012551, 'skewness': 0.91534253, 'entropy': 0.46085853}}, 'channelStatistics': {'red': {'min': 0, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'standardDeviation': 1784991400.0, 'kurtosis': -1.0011022, 'skewness': 0.91535869, 'entropy': 0.4620463}, 'green': {'min': 0, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'standardDeviation': 1786376800.0, 'kurtosis': -1.0068552, 'skewness': 0.91247895, 'entropy': 0.46098122}, 'blue': {'min': 0, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'standardDeviation': 1785008300.0, 'kurtosis': -0.99800862, 'skewness': 0.91743134, 'entropy': 0.45954807}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:45+00:00', 'date:modify': '2021-08-22T12:32:45+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'tainted': False, 'filesize': '43530B', 'numberPixels': '3600', 'pixelsPerSecond': '1342262B', 'userTime': '0.010u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 8 E +32 E -8 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 32, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45954807, 'kurtosis': -0.99800862, 'max': 4294967300.0, 'mean': 1246541700.0, 'median': 0, 'min': 0, 'skewness': 0.91743134, 'standardDeviation': 1785008300.0}, 'green': {'entropy': 0.46098122, 'kurtosis': -1.0068552, 'max': 4294967300.0, 'mean': 1251028500.0, 'median': 0, 'min': 0, 'skewness': 0.91247895, 'standardDeviation': 1786376800.0}, 'red': {'entropy': 0.4620463, 'kurtosis': -1.0011022, 'max': 4294967300.0, 'mean': 1248979300.0, 'median': 0, 'min': 0, 'skewness': 0.91535869, 'standardDeviation': 1784991400.0}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '43530B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.46085853, 'kurtosis': -1.0012551, 'max': 4294967300.0, 'mean': 1248849900.0, 'median': 0, 'min': 0, 'skewness': 0.91534253, 'standardDeviation': 1785458900.0}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0/tiff_float_img0/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1342262B', 'properties': {'date:create': '2021-08-22T12:32:45+00:00', 'date:modify': '2021-08-22T12:32:45+00:00', 'quantum:format': 'floating-point', 'signature': '3682ab30ca3e3e65596cf553ac7ed02a600cca516ddb40cd75904aed99be32ca', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '11'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.010u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0/tiff_float_img0/in.tiff') tmp_normal_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0/normal_png0/normal.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f65cb528220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw0')) src/img2pdf_test.py:2255: AssertionError ___________________ ERROR at setup of test_tiff_rgb12[pdfrw] ___________________ [gw13] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...f63310>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb12_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "12", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 12, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 12, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'standardDeviation': 1707.1256, 'kurtosis': -1.0010315, 'skewness': 0.91501655, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'standardDeviation': 1706.6778, 'kurtosis': -1.0008776, 'skewness': 0.91503326, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'standardDeviation': 1708.0055, 'kurtosis': -1.0066275, 'skewness': 0.91215625, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'standardDeviation': 1706.6937, 'kurtosis': -0.99779046, 'skewness': 0.91710177, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'tainted': False, 'filesize': '16464B', 'numberPixels': '3600', 'pixelsPerSecond': '1474105B', 'userTime': '0.000u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 12, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99779046, 'max': 4095, 'mean': 1192.7576, 'median': 0, 'min': 0, 'skewness': 0.91710177, 'standardDeviation': 1706.6937}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0066275, 'max': 4095, 'mean': 1197.0481, 'median': 0, 'min': 0, 'skewness': 0.91215625, 'standardDeviation': 1708.0055}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0008776, 'max': 4095, 'mean': 1195.0887, 'median': 0, 'min': 0, 'skewness': 0.91503326, 'standardDeviation': 1706.6778}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '16464B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0010315, 'max': 4095, 'mean': 1194.9648, 'median': 0, 'min': 0, 'skewness': 0.91501655, 'standardDeviation': 1707.1256}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1474105B', 'properties': {'date:create': '2021-08-22T12:32:44+00:00', 'date:modify': '2021-08-22T12:32:44+00:00', 'signature': 'fa10fdd9a22d9e666d0220b4aa501fcfa4c6fde32affdef69bf487a53be77b2d', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '30'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1973f63310>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw13')) src/img2pdf_test.py:2463: AssertionError _________________ ERROR at setup of test_tiff_gray1[internal] __________________ [gw18] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[internal]>> @pytest.fixture(scope="session", params=["internal", "pikepdf", "pdfrw"]) def tiff_gray1_pdf(tmp_path_factory, tiff_gray1_img, request): out_pdf = tmp_path_factory.mktemp("tiff_gray1_pdf") / "out.pdf" subprocess.check_call( [ "src/img2pdf.py", "--producer=", "--nodate", "--engine=" + request.param, "--output=" + str(out_pdf), str(tiff_gray1_img), ] ) with pikepdf.open(str(out_pdf)) as p: assert ( p.pages[0].Contents.read_bytes() == b"q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ" ) > assert p.pages[0].Resources.XObject.Im0.BitsPerComponent == 1 E assert 8 == 1 E +8 E -1 out_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray1_pdf0/out.pdf') p = <[TypeError("unhashable type: 'instancemethod'") raised in repr()] Pdf object at 0x7f4e1721ac70> request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[internal]>> tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f4e20712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) src/img2pdf_test.py:4490: AssertionError _________________ ERROR at setup of test_tiff_rgb14[internal] __________________ [gw20] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...1cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb14_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "14", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 14, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 14, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'standardDeviation': 6830.9827, 'kurtosis': -1.0011647, 'skewness': 0.91492813, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'standardDeviation': 6829.1886, 'kurtosis': -1.0010113, 'skewness': 0.91494407, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'standardDeviation': 6834.5041, 'kurtosis': -1.0067604, 'skewness': 0.91206772, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 16383, 'mean': 4773.06, 'median': 0, 'standardDeviation': 6829.2553, 'kurtosis': -0.99792336, 'skewness': 0.91701432, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'tainted': False, 'filesize': '19164B', 'numberPixels': '3600', 'pixelsPerSecond': '1699709B', 'userTime': '0.000u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 14, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99792336, 'max': 16383, 'mean': 4773.06, 'median': 0, 'min': 0, 'skewness': 0.91701432, 'standardDeviation': 6829.2553}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0067604, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'min': 0, 'skewness': 0.91206772, 'standardDeviation': 6834.5041}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0010113, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'min': 0, 'skewness': 0.91494407, 'standardDeviation': 6829.1886}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '19164B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0011647, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'min': 0, 'skewness': 0.91492813, 'standardDeviation': 6830.9827}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1699709B', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fdeb91cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) src/img2pdf_test.py:2515: AssertionError __________________ ERROR at setup of test_tiff_gray1[pikepdf] __________________ [gw18] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[pikepdf]>> @pytest.fixture(scope="session", params=["internal", "pikepdf", "pdfrw"]) def tiff_gray1_pdf(tmp_path_factory, tiff_gray1_img, request): out_pdf = tmp_path_factory.mktemp("tiff_gray1_pdf") / "out.pdf" subprocess.check_call( [ "src/img2pdf.py", "--producer=", "--nodate", "--engine=" + request.param, "--output=" + str(out_pdf), str(tiff_gray1_img), ] ) with pikepdf.open(str(out_pdf)) as p: assert ( p.pages[0].Contents.read_bytes() == b"q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ" ) > assert p.pages[0].Resources.XObject.Im0.BitsPerComponent == 1 E assert 8 == 1 E +8 E -1 out_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray1_pdf1/out.pdf') p = <[TypeError("unhashable type: 'instancemethod'") raised in repr()] Pdf object at 0x7f4e1763a8b0> request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[pikepdf]>> tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f4e20712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) src/img2pdf_test.py:4490: AssertionError __________________ ERROR at setup of test_tiff_rgb14[pikepdf] __________________ [gw20] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...1cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb14_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "14", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 14, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 14, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'standardDeviation': 6830.9827, 'kurtosis': -1.0011647, 'skewness': 0.91492813, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'standardDeviation': 6829.1886, 'kurtosis': -1.0010113, 'skewness': 0.91494407, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'standardDeviation': 6834.5041, 'kurtosis': -1.0067604, 'skewness': 0.91206772, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 16383, 'mean': 4773.06, 'median': 0, 'standardDeviation': 6829.2553, 'kurtosis': -0.99792336, 'skewness': 0.91701432, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'tainted': False, 'filesize': '19164B', 'numberPixels': '3600', 'pixelsPerSecond': '1699709B', 'userTime': '0.000u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 14, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99792336, 'max': 16383, 'mean': 4773.06, 'median': 0, 'min': 0, 'skewness': 0.91701432, 'standardDeviation': 6829.2553}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0067604, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'min': 0, 'skewness': 0.91206772, 'standardDeviation': 6834.5041}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0010113, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'min': 0, 'skewness': 0.91494407, 'standardDeviation': 6829.1886}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '19164B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0011647, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'min': 0, 'skewness': 0.91492813, 'standardDeviation': 6830.9827}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1699709B', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fdeb91cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) src/img2pdf_test.py:2515: AssertionError ___________________ ERROR at setup of test_tiff_rgb14[pdfrw] ___________________ [gw20] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...1cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') @pytest.fixture(scope="session") def tiff_rgb14_img(tmp_path_factory, tmp_normal16_png): in_img = tmp_path_factory.mktemp("tiff_rgb8") / "in.tiff" subprocess.check_call( ["convert", str(tmp_normal16_png), "-depth", "14", str(in_img)] ) identify = json.loads(subprocess.check_output(["convert", str(in_img), "json:"])) assert len(identify) == 1 # somewhere between imagemagick 6.9.7.4 and 6.9.9.34, the json output was # put into an array, here we cater for the older version containing just # the bare dictionary if "image" in identify: identify = [identify] assert "image" in identify[0] assert identify[0]["image"].get("format") == "TIFF", str(identify) assert identify[0]["image"].get("mimeType") == "image/tiff", str(identify) assert identify[0]["image"].get("geometry") == { "width": 60, "height": 60, "x": 0, "y": 0, }, str(identify) assert identify[0]["image"].get("colorspace") == "sRGB", str(identify) assert identify[0]["image"].get("type") == "TrueColor", str(identify) endian = "endianess" if identify[0].get("version", "0") < "1.0" else "endianness" assert identify[0]["image"].get(endian) in ["Undefined", "LSB",], str( identify ) # FIXME: should be LSB if identify[0].get("version", "0") < "1.0": assert identify[0]["image"].get("depth") == 14, str(identify) else: > assert identify[0]["image"].get("depth") == 16, str(identify) E AssertionError: [{'version': '1.0', 'image': {'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'baseName': 'in.tiff', 'format': 'TIFF', 'formatDescription': 'TIFF', 'mimeType': 'image/tiff', 'class': 'DirectClass', 'geometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'units': 'PixelsPerInch', 'type': 'TrueColor', 'endianness': 'LSB', 'colorspace': 'sRGB', 'depth': 32, 'baseDepth': 14, 'channelDepth': {'red': 32, 'green': 32, 'blue': 1}, 'pixels': 10800, 'imageStatistics': {'Overall': {'min': 0, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'standardDeviation': 6830.9827, 'kurtosis': -1.0011647, 'skewness': 0.91492813, 'entropy': 0.45560277}}, 'channelStatistics': {'red': {'min': 0, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'standardDeviation': 6829.1886, 'kurtosis': -1.0010113, 'skewness': 0.91494407, 'entropy': 0.45681467}, 'green': {'min': 0, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'standardDeviation': 6834.5041, 'kurtosis': -1.0067604, 'skewness': 0.91206772, 'entropy': 0.45564261}, 'blue': {'min': 0, 'max': 16383, 'mean': 4773.06, 'median': 0, 'standardDeviation': 6829.2553, 'kurtosis': -0.99792336, 'skewness': 0.91701432, 'entropy': 0.45435104}}, 'renderingIntent': 'Perceptual', 'gamma': 0.454545, 'chromaticity': {'redPrimary': {'x': 0.64, 'y': 0.33}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'bluePrimary': {'x': 0.15, 'y': 0.06}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'matteColor': '#BDBDBD', 'backgroundColor': '#FFFFFF', 'borderColor': '#DFDFDF', 'transparentColor': '#00000000', 'interlace': 'None', 'intensity': 'Undefined', 'compose': 'Over', 'pageGeometry': {'width': 60, 'height': 60, 'x': 0, 'y': 0}, 'dispose': 'Undefined', 'iterations': 0, 'compression': 'None', 'orientation': 'TopLeft', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'tainted': False, 'filesize': '19164B', 'numberPixels': '3600', 'pixelsPerSecond': '1699709B', 'userTime': '0.000u', 'elapsedTime': '0:01.002', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 https://imagemagick.org'}}] E assert 32 == 16 E +32 E -16 endian = 'endianness' identify = [{'image': {'backgroundColor': '#FFFFFF', 'baseDepth': 14, 'baseName': 'in.tiff', 'borderColor': '#DFDFDF', 'channelDepth': {'blue': 1, 'green': 32, 'red': 32}, 'channelStatistics': {'blue': {'entropy': 0.45435104, 'kurtosis': -0.99792336, 'max': 16383, 'mean': 4773.06, 'median': 0, 'min': 0, 'skewness': 0.91701432, 'standardDeviation': 6829.2553}, 'green': {'entropy': 0.45564261, 'kurtosis': -1.0067604, 'max': 16383, 'mean': 4790.2309, 'median': 0, 'min': 0, 'skewness': 0.91206772, 'standardDeviation': 6834.5041}, 'red': {'entropy': 0.45681467, 'kurtosis': -1.0010113, 'max': 16383, 'mean': 4782.3959, 'median': 0, 'min': 0, 'skewness': 0.91494407, 'standardDeviation': 6829.1886}}, 'chromaticity': {'bluePrimary': {'x': 0.15, 'y': 0.06}, 'greenPrimary': {'x': 0.3, 'y': 0.6}, 'redPrimary': {'x': 0.64, 'y': 0.33}, 'whitePrimary': {'x': 0.3127, 'y': 0.329}}, 'class': 'DirectClass', 'colorspace': 'sRGB', 'compose': 'Over', 'compression': 'None', 'depth': 32, 'dispose': 'Undefined', 'elapsedTime': '0:01.002', 'endianness': 'LSB', 'filesize': '19164B', 'format': 'TIFF', 'formatDescription': 'TIFF', 'gamma': 0.454545, 'geometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'imageStatistics': {'Overall': {'entropy': 0.45560277, 'kurtosis': -1.0011647, 'max': 16383, 'mean': 4781.8956, 'median': 0, 'min': 0, 'skewness': 0.91492813, 'standardDeviation': 6830.9827}}, 'intensity': 'Undefined', 'interlace': 'None', 'iterations': 0, 'matteColor': '#BDBDBD', 'mimeType': 'image/tiff', 'name': '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff', 'numberPixels': '3600', 'orientation': 'TopLeft', 'pageGeometry': {'height': 60, 'width': 60, 'x': 0, 'y': 0}, 'pixels': 10800, 'pixelsPerSecond': '1699709B', 'properties': {'date:create': '2021-08-22T12:32:47+00:00', 'date:modify': '2021-08-22T12:32:47+00:00', 'signature': '8cca4ba687f8704ddfb37ae89e7c35f9c73ff62c30b29d472ab783fe8cc949fc', 'tiff:alpha': 'unspecified', 'tiff:endian': 'lsb', 'tiff:photometric': 'RGB', 'tiff:rows-per-strip': '26'}, 'renderingIntent': 'Perceptual', 'tainted': False, 'transparentColor': '#00000000', 'type': 'TrueColor', 'units': 'PixelsPerInch', 'userTime': '0.000u', 'version': 'ImageMagick 7.1.0-4 Q32 x86_64 2021-07-18 ' 'https://imagemagick.org'}, 'version': '1.0'}] in_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/tiff_rgb80/in.tiff') tmp_normal16_png = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20/normal16_png0/normal16.png') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fdeb91cc3a0>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw20')) src/img2pdf_test.py:2515: AssertionError ___________________ ERROR at setup of test_tiff_gray1[pdfrw] ___________________ [gw18] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[pdfrw]>> @pytest.fixture(scope="session", params=["internal", "pikepdf", "pdfrw"]) def tiff_gray1_pdf(tmp_path_factory, tiff_gray1_img, request): out_pdf = tmp_path_factory.mktemp("tiff_gray1_pdf") / "out.pdf" subprocess.check_call( [ "src/img2pdf.py", "--producer=", "--nodate", "--engine=" + request.param, "--output=" + str(out_pdf), str(tiff_gray1_img), ] ) with pikepdf.open(str(out_pdf)) as p: assert ( p.pages[0].Contents.read_bytes() == b"q\n45.0000 0 0 45.0000 0.0000 0.0000 cm\n/Im0 Do\nQ" ) > assert p.pages[0].Resources.XObject.Im0.BitsPerComponent == 1 E assert 8 == 1 E +8 E -1 out_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray1_pdf2/out.pdf') p = <[TypeError("unhashable type: 'instancemethod'") raised in repr()] Pdf object at 0x7f4e1763acc0> request = <SubRequest 'tiff_gray1_pdf' for <Function test_tiff_gray1[pdfrw]>> tiff_gray1_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18/tiff_gray10/in.tiff') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f4e20712220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw18')) src/img2pdf_test.py:4490: AssertionError =================================== FAILURES =================================== _____________________________ test_png_icc[pdfrw] ______________________________ [gw10] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...5b8220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10')) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc_pdf0/out.pdf') @pytest.mark.skipif( sys.platform in ["darwin", "win32"], reason="test utilities not available on Windows and MacOS", ) def test_png_icc(tmp_path_factory, png_icc_img, png_icc_pdf): tmpdir = tmp_path_factory.mktemp("png_icc") > compare_ghostscript(tmpdir, png_icc_img, png_icc_pdf, exact=False, icc=True) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc_pdf0/out.pdf') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fc7c55b8220>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10')) tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc0') src/img2pdf_test.py:5285: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf_test.py:363: in compare_ghostscript compare(str(img), str(tmpdir / "gs-1.") + ext, exact, icc, False) exact = False ext = 'png' gsdevice = 'png16m' icc = True img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png') pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc_pdf0/out.pdf') tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc0') _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc0/gs-1.png' exact = False, icc = True, cmyk = False def compare(im1, im2, exact, icc, cmyk): if exact: if cmyk: raise Exception("cmyk cannot be exact") elif icc: raise Exception("icc cannot be exact") else: subprocess.check_call( [ "compare", "-metric", "AE", im1, im2, "null:", ] ) else: iccargs = [] if icc: if ICC_PROFILE is None: pytest.skip("Could not locate an ICC profile") iccargs = ["-profile", ICC_PROFILE] psnr = subprocess.run( ["compare"] + iccargs + [ "-metric", "PSNR", im1, im2, "null:", ], check=False, stderr=subprocess.PIPE, ).stderr assert psnr != b"0" > psnr = float(psnr.strip(b"0")) E ValueError: could not convert string to float: b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n" cmyk = False exact = False icc = True iccargs = ['-profile', PosixPath('/usr/share/ghostscript/9.54.0/iccprofiles/srgb.icc')] im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/png_icc0/gs-1.png' psnr = (b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/me" b'dia-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw10/icc_png0' b"/icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n") src/img2pdf_test.py:339: ValueError ____________________________ test_png_icc[internal] ____________________________ [gw8] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...fe56280>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8')) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc_pdf0/out.pdf') @pytest.mark.skipif( sys.platform in ["darwin", "win32"], reason="test utilities not available on Windows and MacOS", ) def test_png_icc(tmp_path_factory, png_icc_img, png_icc_pdf): tmpdir = tmp_path_factory.mktemp("png_icc") > compare_ghostscript(tmpdir, png_icc_img, png_icc_pdf, exact=False, icc=True) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc_pdf0/out.pdf') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f7d8fe56280>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8')) tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc0') src/img2pdf_test.py:5285: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf_test.py:363: in compare_ghostscript compare(str(img), str(tmpdir / "gs-1.") + ext, exact, icc, False) exact = False ext = 'png' gsdevice = 'png16m' icc = True img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png') pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc_pdf0/out.pdf') tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc0') _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc0/gs-1.png' exact = False, icc = True, cmyk = False def compare(im1, im2, exact, icc, cmyk): if exact: if cmyk: raise Exception("cmyk cannot be exact") elif icc: raise Exception("icc cannot be exact") else: subprocess.check_call( [ "compare", "-metric", "AE", im1, im2, "null:", ] ) else: iccargs = [] if icc: if ICC_PROFILE is None: pytest.skip("Could not locate an ICC profile") iccargs = ["-profile", ICC_PROFILE] psnr = subprocess.run( ["compare"] + iccargs + [ "-metric", "PSNR", im1, im2, "null:", ], check=False, stderr=subprocess.PIPE, ).stderr assert psnr != b"0" > psnr = float(psnr.strip(b"0")) E ValueError: could not convert string to float: b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n" cmyk = False exact = False icc = True iccargs = ['-profile', PosixPath('/usr/share/ghostscript/9.54.0/iccprofiles/srgb.icc')] im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/png_icc0/gs-1.png' psnr = (b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/me" b'dia-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw8/icc_png0/' b"icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n") src/img2pdf_test.py:339: ValueError ____________________________ test_png_icc[pikepdf] _____________________________ [gw9] linux -- Python 3.8.11 /usr/bin/python3.8 tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0...54a4280>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9')) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc_pdf0/out.pdf') @pytest.mark.skipif( sys.platform in ["darwin", "win32"], reason="test utilities not available on Windows and MacOS", ) def test_png_icc(tmp_path_factory, png_icc_img, png_icc_pdf): tmpdir = tmp_path_factory.mktemp("png_icc") > compare_ghostscript(tmpdir, png_icc_img, png_icc_pdf, exact=False, icc=True) png_icc_img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png') png_icc_pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc_pdf0/out.pdf') tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9'), _trace=<pluggy._tracing.TagTracerSub object at 0x7fc9b54a4280>, _basetemp=PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9')) tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc0') src/img2pdf_test.py:5285: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf_test.py:363: in compare_ghostscript compare(str(img), str(tmpdir / "gs-1.") + ext, exact, icc, False) exact = False ext = 'png' gsdevice = 'png16m' icc = True img = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png') pdf = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc_pdf0/out.pdf') tmpdir = PosixPath('/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc0') _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc0/gs-1.png' exact = False, icc = True, cmyk = False def compare(im1, im2, exact, icc, cmyk): if exact: if cmyk: raise Exception("cmyk cannot be exact") elif icc: raise Exception("icc cannot be exact") else: subprocess.check_call( [ "compare", "-metric", "AE", im1, im2, "null:", ] ) else: iccargs = [] if icc: if ICC_PROFILE is None: pytest.skip("Could not locate an ICC profile") iccargs = ["-profile", ICC_PROFILE] psnr = subprocess.run( ["compare"] + iccargs + [ "-metric", "PSNR", im1, im2, "null:", ], check=False, stderr=subprocess.PIPE, ).stderr assert psnr != b"0" > psnr = float(psnr.strip(b"0")) E ValueError: could not convert string to float: b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n" cmyk = False exact = False icc = True iccargs = ['-profile', PosixPath('/usr/share/ghostscript/9.54.0/iccprofiles/srgb.icc')] im1 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/icc.png' im2 = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/png_icc0/gs-1.png' psnr = (b"5.1771988compare: delegate library support not built-in '/var/tmp/portage/me" b'dia-gfx/img2pdf-0.4.1-r1/temp/pytest-of-portage/pytest-0/popen-gw9/icc_png0/' b"icc.png' (LCMS) @ warning/profile.c/ProfileImage/1004.\n") src/img2pdf_test.py:339: ValueError _______________________ test_general[mono.tif-internal] ________________________ [gw5] linux -- Python 3.8.11 /usr/bin/python3.8 mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: rawdata = b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x...\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00' colorspace = None, first_frame_only = False def read_images(rawdata, colorspace, first_frame_only=False): im = BytesIO(rawdata) im.seek(0) imgdata = None try: imgdata = Image.open(im) except IOError as e: # test if it is a jpeg2000 image if rawdata[:12] != b"\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A": raise ImageOpenError( "cannot read input image (not jpeg2000). " "PIL: error reading image: %s" % e ) # image is jpeg2000 imgformat = ImageFormat.JPEG2000 else: logger.debug("PIL format = %s", imgdata.format) imgformat = None for f in ImageFormat: if f.name == imgdata.format: imgformat = f if imgformat is None: imgformat = ImageFormat.other def cleanup(): if imgdata is not None: # the python-pil version 2.3.0-1ubuntu3 in Ubuntu does not have the # close() method try: imgdata.close() except AttributeError: pass im.close() logger.debug("imgformat = %s", imgformat.name) # depending on the input format, determine whether to pass the raw # image or the zlib compressed color information # JPEG and JPEG2000 can be embedded into the PDF as-is if imgformat == ImageFormat.JPEG or imgformat == ImageFormat.JPEG2000: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG") cleanup() return [ ( color, ndpi, imgformat, rawdata, imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ] # The MPO format is multiple JPEG images concatenated together # we use the offset and size information to dissect the MPO into its # individual JPEG images and then embed those into the PDF individually. # # The downside is, that this truncates the first JPEG as the MPO metadata # will still be in it but the referenced images are chopped off. We still # do it that way instead of adding the full MPO as the first image to not # store duplicate image data. if imgformat == ImageFormat.MPO: result = [] img_page_count = 0 for offset, mpent in zip( imgdata._MpoImageFile__mpoffsets, imgdata.mpinfo[0xB002] ): if first_frame_only and img_page_count > 0: break with BytesIO(rawdata[offset : offset + mpent["Size"]]) as rawframe: with Image.open(rawframe) as imframe: # The first frame contains the data that makes the JPEG a MPO # Could we thus embed an MPO into another MPO? Lets not support # such madness ;) if img_page_count > 0 and imframe.format != "JPEG": raise Exception("MPO payload must be a JPEG %s", imframe.format) ( color, ndpi, imgwidthpx, imgheightpx, rotation, iccp, ) = get_imgmetadata( imframe, ImageFormat.JPEG, default_dpi, colorspace ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG from MPO") result.append( ( color, ndpi, ImageFormat.JPEG, rawdata[offset : offset + mpent["Size"]], imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ) img_page_count += 1 cleanup() return result # We can directly embed the IDAT chunk of PNG images if the PNG is not # interlaced # # PIL does not provide the information whether a PNG was stored interlaced # or not. Thus, we retrieve that info manually by looking at byte 13 in the # IHDR chunk. We know where to find that in the file because the IHDR chunk # must be the first chunk. if imgformat == ImageFormat.PNG and rawdata[28] == 0: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) pngidat, palette = parse_png(rawdata) # PIL does not provide the information about the original bits per # sample. Thus, we retrieve that info manually by looking at byte 9 in # the IHDR chunk. We know where to find that in the file because the # IHDR chunk must be the first chunk depth = rawdata[24] if depth not in [1, 2, 4, 8, 16]: raise ValueError("invalid bit depth: %d" % depth) logger.debug("read_images() embeds a PNG") cleanup() return [ ( color, ndpi, imgformat, pngidat, imgwidthpx, imgheightpx, palette, False, depth, rotation, iccp, ) ] # If our input is not JPEG or PNG, then we might have a format that # supports multiple frames (like TIFF or GIF), so we need a loop to # iterate through all frames of the image. # # Each frame gets compressed using PNG compression *except* if: # # * The image is monochrome => encode using CCITT group 4 # # * The image is CMYK => zip plain RGB data # # * We are handling a CCITT encoded TIFF frame => embed data result = [] img_page_count = 0 # loop through all frames of the image (example: multipage TIFF) while True: try: imgdata.seek(img_page_count) except EOFError: break if first_frame_only and img_page_count > 0: break # PIL is unable to preserve the data of 16-bit RGB TIFF files and will # convert it to 8-bit without the possibility to retrieve the original # data # https://github.com/python-pillow/Pillow/issues/1888 # # Some tiff images do not have BITSPERSAMPLE set. Use this to create # such a tiff: tiffset -u 258 test.tif if ( imgformat == ImageFormat.TIFF and max(imgdata.tag_v2.get(TiffImagePlugin.BITSPERSAMPLE, [1])) > 8 ): raise ValueError("PIL is unable to preserve more than 8 bits per sample") # We can directly copy the data out of a CCITT Group 4 encoded TIFF, if it # only contains a single strip if ( imgformat == ImageFormat.TIFF and imgdata.info["compression"] == "group4" and len(imgdata.tag_v2[TiffImagePlugin.STRIPOFFSETS]) == 1 ): photo = imgdata.tag_v2[TiffImagePlugin.PHOTOMETRIC_INTERPRETATION] inverted = False if photo == 0: inverted = True elif photo != 1: raise ValueError( "unsupported photometric interpretation for " "group4 tiff: %d" % photo ) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) offset, length = ccitt_payload_location_from_pil(imgdata) im.seek(offset) rawdata = im.read(length) fillorder = imgdata.tag_v2.get(TiffImagePlugin.FILLORDER) if fillorder is None: # no FillOrder: nothing to do pass elif fillorder == 1: # msb-to-lsb: nothing to do pass elif fillorder == 2: logger.debug("fillorder is lsb-to-msb => reverse bits") # lsb-to-msb: reverse bits of each byte rawdata = bytearray(rawdata) for i in range(len(rawdata)): rawdata[i] = TIFFBitRevTable[rawdata[i]] rawdata = bytes(rawdata) else: raise ValueError("unsupported FillOrder: %d" % fillorder) logger.debug("read_images() embeds Group4 from TIFF") result.append( ( color, ndpi, ImageFormat.CCITTGroup4, rawdata, imgwidthpx, imgheightpx, [], inverted, 1, rotation, iccp, ) ) img_page_count += 1 continue logger.debug("Converting frame: %d" % img_page_count) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace ) newimg = None if color == Colorspace["1"]: try: > ccittdata = transcode_monochrome(imgdata) cleanup = <function read_images.<locals>.cleanup at 0x7f09a90c9820> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7f09a8e95ae0> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 src/img2pdf.py:1614: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> def transcode_monochrome(imgdata): """Convert the open PIL.Image imgdata to compressed CCITT Group4 data""" logger.debug("Converting monochrome to CCITT Group4") # Convert the image to Group 4 in memory. If libtiff is not installed and # Pillow is not compiled against it, .save() will raise an exception. newimgio = BytesIO() # we create a whole new PIL image or otherwise it might happen with some # input images, that libtiff fails an assert and the whole process is # killed by a SIGABRT: # https://gitlab.mister-muffin.de/josch/img2pdf/issues/46 > im = Image.frombytes(imgdata.mode, imgdata.size, imgdata.tobytes()) imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> newimgio = <_io.BytesIO object at 0x7f09a8e95c20> src/img2pdf.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> encoder_name = 'raw', args = '1' def tobytes(self, encoder_name="raw", *args): """ Return image as a bytes object. .. warning:: This method returns the raw image data from the internal storage. For compressed image data (e.g. PNG, JPEG) use :meth:`~.save`, with a BytesIO parameter for in-memory data. :param encoder_name: What encoder to use. The default is to use the standard "raw" encoder. :param args: Extra arguments to the encoder. :returns: A :py:class:`bytes` object. """ # may pass tuple instead of argument list if len(args) == 1 and isinstance(args[0], tuple): args = args[0] if encoder_name == "raw" and args == (): args = self.mode > self.load() args = '1' encoder_name = 'raw' self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> /usr/lib/python3.8/site-packages/PIL/Image.py:744: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> def load(self): if self.tile and self.use_load_libtiff: > return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> def _load_libtiff(self): """Overload method triggered when we detect a compressed tiff Calls out to libtiff""" Image.Image.load(self) self.load_prepare() if not len(self.tile) == 1: raise OSError("Not exactly one tile") # (self._compression, (extents tuple), # 0, (rawmode, self._compression, fp)) extents = self.tile[0][1] args = list(self.tile[0][3]) # To be nice on memory footprint, if there's a # file descriptor, use that instead of reading # into a string in python. # libtiff closes the file descriptor, so pass in a dup. try: fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) # flush the file descriptor, prevents error on pypy 2.4+ # should also eliminate the need for fp.tell # in _seek if hasattr(self.fp, "flush"): self.fp.flush() except OSError: # io.BytesIO have a fileno, but returns an OSError if # it doesn't use a file descriptor. fp = False if fp: args[2] = fp > decoder = Image._getdecoder( self.mode, "libtiff", tuple(args), self.decoderconfig ) args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError During handling of the above exception, another exception occurred: mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: general_input = 'mono.tif', engine = <Engine.internal: 1> @pytest.mark.parametrize("engine", ["internal", "pikepdf", "pdfrw"]) def test_general(general_input, engine): inputf = os.path.join(os.path.dirname(__file__), "tests", "input", general_input) outputf = os.path.join( os.path.dirname(__file__), "tests", "output", general_input + ".pdf" ) assert os.path.isfile(outputf) f = inputf out = outputf engine = getattr(img2pdf.Engine, engine) # we do not test animation.gif with pdfrw because it doesn't support # saving hexadecimal palette data if f.endswith(os.path.sep + "animation.gif") and engine == img2pdf.Engine.pdfrw: return with open(f, "rb") as inf: orig_imgdata = inf.read() > output = img2pdf.convert(orig_imgdata, nodate=True, engine=engine) engine = <Engine.internal: 1> f = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' general_input = 'mono.tif' inf = <_io.BufferedReader name='/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif'> inputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' orig_imgdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') out = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' outputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' src/img2pdf_test.py:6303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf.py:2102: in convert ) in read_images(rawdata, kwargs["colorspace"], kwargs["first_frame_only"]): _default_kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': None, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7f09a912c940>, 'moddate': None, 'nodate': False, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} default = None images = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00',) img = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': <Engine.internal: 1>, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7f09a912c940>, 'moddate': None, 'nodate': True, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} kwname = 'pdfa' pdf = <img2pdf.pdfdoc object at 0x7f09a8e8bd00> rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') src/img2pdf.py:1636: in read_images newimg = imgdata.convert("L") cleanup = <function read_images.<locals>.cleanup at 0x7f09a90c9820> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7f09a8e95ae0> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 /usr/lib/python3.8/site-packages/PIL/Image.py:915: in convert self.load() colors = 256 dither = None matrix = None mode = 'L' palette = 0 self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: in load return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: in _load_libtiff decoder = Image._getdecoder( args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F09A8EA66A0> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError ________________________ test_general[mono.tif-pikepdf] ________________________ [gw9] linux -- Python 3.8.11 /usr/bin/python3.8 mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: rawdata = b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x...\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00' colorspace = None, first_frame_only = False def read_images(rawdata, colorspace, first_frame_only=False): im = BytesIO(rawdata) im.seek(0) imgdata = None try: imgdata = Image.open(im) except IOError as e: # test if it is a jpeg2000 image if rawdata[:12] != b"\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A": raise ImageOpenError( "cannot read input image (not jpeg2000). " "PIL: error reading image: %s" % e ) # image is jpeg2000 imgformat = ImageFormat.JPEG2000 else: logger.debug("PIL format = %s", imgdata.format) imgformat = None for f in ImageFormat: if f.name == imgdata.format: imgformat = f if imgformat is None: imgformat = ImageFormat.other def cleanup(): if imgdata is not None: # the python-pil version 2.3.0-1ubuntu3 in Ubuntu does not have the # close() method try: imgdata.close() except AttributeError: pass im.close() logger.debug("imgformat = %s", imgformat.name) # depending on the input format, determine whether to pass the raw # image or the zlib compressed color information # JPEG and JPEG2000 can be embedded into the PDF as-is if imgformat == ImageFormat.JPEG or imgformat == ImageFormat.JPEG2000: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG") cleanup() return [ ( color, ndpi, imgformat, rawdata, imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ] # The MPO format is multiple JPEG images concatenated together # we use the offset and size information to dissect the MPO into its # individual JPEG images and then embed those into the PDF individually. # # The downside is, that this truncates the first JPEG as the MPO metadata # will still be in it but the referenced images are chopped off. We still # do it that way instead of adding the full MPO as the first image to not # store duplicate image data. if imgformat == ImageFormat.MPO: result = [] img_page_count = 0 for offset, mpent in zip( imgdata._MpoImageFile__mpoffsets, imgdata.mpinfo[0xB002] ): if first_frame_only and img_page_count > 0: break with BytesIO(rawdata[offset : offset + mpent["Size"]]) as rawframe: with Image.open(rawframe) as imframe: # The first frame contains the data that makes the JPEG a MPO # Could we thus embed an MPO into another MPO? Lets not support # such madness ;) if img_page_count > 0 and imframe.format != "JPEG": raise Exception("MPO payload must be a JPEG %s", imframe.format) ( color, ndpi, imgwidthpx, imgheightpx, rotation, iccp, ) = get_imgmetadata( imframe, ImageFormat.JPEG, default_dpi, colorspace ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG from MPO") result.append( ( color, ndpi, ImageFormat.JPEG, rawdata[offset : offset + mpent["Size"]], imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ) img_page_count += 1 cleanup() return result # We can directly embed the IDAT chunk of PNG images if the PNG is not # interlaced # # PIL does not provide the information whether a PNG was stored interlaced # or not. Thus, we retrieve that info manually by looking at byte 13 in the # IHDR chunk. We know where to find that in the file because the IHDR chunk # must be the first chunk. if imgformat == ImageFormat.PNG and rawdata[28] == 0: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) pngidat, palette = parse_png(rawdata) # PIL does not provide the information about the original bits per # sample. Thus, we retrieve that info manually by looking at byte 9 in # the IHDR chunk. We know where to find that in the file because the # IHDR chunk must be the first chunk depth = rawdata[24] if depth not in [1, 2, 4, 8, 16]: raise ValueError("invalid bit depth: %d" % depth) logger.debug("read_images() embeds a PNG") cleanup() return [ ( color, ndpi, imgformat, pngidat, imgwidthpx, imgheightpx, palette, False, depth, rotation, iccp, ) ] # If our input is not JPEG or PNG, then we might have a format that # supports multiple frames (like TIFF or GIF), so we need a loop to # iterate through all frames of the image. # # Each frame gets compressed using PNG compression *except* if: # # * The image is monochrome => encode using CCITT group 4 # # * The image is CMYK => zip plain RGB data # # * We are handling a CCITT encoded TIFF frame => embed data result = [] img_page_count = 0 # loop through all frames of the image (example: multipage TIFF) while True: try: imgdata.seek(img_page_count) except EOFError: break if first_frame_only and img_page_count > 0: break # PIL is unable to preserve the data of 16-bit RGB TIFF files and will # convert it to 8-bit without the possibility to retrieve the original # data # https://github.com/python-pillow/Pillow/issues/1888 # # Some tiff images do not have BITSPERSAMPLE set. Use this to create # such a tiff: tiffset -u 258 test.tif if ( imgformat == ImageFormat.TIFF and max(imgdata.tag_v2.get(TiffImagePlugin.BITSPERSAMPLE, [1])) > 8 ): raise ValueError("PIL is unable to preserve more than 8 bits per sample") # We can directly copy the data out of a CCITT Group 4 encoded TIFF, if it # only contains a single strip if ( imgformat == ImageFormat.TIFF and imgdata.info["compression"] == "group4" and len(imgdata.tag_v2[TiffImagePlugin.STRIPOFFSETS]) == 1 ): photo = imgdata.tag_v2[TiffImagePlugin.PHOTOMETRIC_INTERPRETATION] inverted = False if photo == 0: inverted = True elif photo != 1: raise ValueError( "unsupported photometric interpretation for " "group4 tiff: %d" % photo ) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) offset, length = ccitt_payload_location_from_pil(imgdata) im.seek(offset) rawdata = im.read(length) fillorder = imgdata.tag_v2.get(TiffImagePlugin.FILLORDER) if fillorder is None: # no FillOrder: nothing to do pass elif fillorder == 1: # msb-to-lsb: nothing to do pass elif fillorder == 2: logger.debug("fillorder is lsb-to-msb => reverse bits") # lsb-to-msb: reverse bits of each byte rawdata = bytearray(rawdata) for i in range(len(rawdata)): rawdata[i] = TIFFBitRevTable[rawdata[i]] rawdata = bytes(rawdata) else: raise ValueError("unsupported FillOrder: %d" % fillorder) logger.debug("read_images() embeds Group4 from TIFF") result.append( ( color, ndpi, ImageFormat.CCITTGroup4, rawdata, imgwidthpx, imgheightpx, [], inverted, 1, rotation, iccp, ) ) img_page_count += 1 continue logger.debug("Converting frame: %d" % img_page_count) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace ) newimg = None if color == Colorspace["1"]: try: > ccittdata = transcode_monochrome(imgdata) cleanup = <function read_images.<locals>.cleanup at 0x7fc9ac230f70> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7fc9abf1cbd0> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 src/img2pdf.py:1614: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> def transcode_monochrome(imgdata): """Convert the open PIL.Image imgdata to compressed CCITT Group4 data""" logger.debug("Converting monochrome to CCITT Group4") # Convert the image to Group 4 in memory. If libtiff is not installed and # Pillow is not compiled against it, .save() will raise an exception. newimgio = BytesIO() # we create a whole new PIL image or otherwise it might happen with some # input images, that libtiff fails an assert and the whole process is # killed by a SIGABRT: # https://gitlab.mister-muffin.de/josch/img2pdf/issues/46 > im = Image.frombytes(imgdata.mode, imgdata.size, imgdata.tobytes()) imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> newimgio = <_io.BytesIO object at 0x7fc9abf1c900> src/img2pdf.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> encoder_name = 'raw', args = '1' def tobytes(self, encoder_name="raw", *args): """ Return image as a bytes object. .. warning:: This method returns the raw image data from the internal storage. For compressed image data (e.g. PNG, JPEG) use :meth:`~.save`, with a BytesIO parameter for in-memory data. :param encoder_name: What encoder to use. The default is to use the standard "raw" encoder. :param args: Extra arguments to the encoder. :returns: A :py:class:`bytes` object. """ # may pass tuple instead of argument list if len(args) == 1 and isinstance(args[0], tuple): args = args[0] if encoder_name == "raw" and args == (): args = self.mode > self.load() args = '1' encoder_name = 'raw' self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> /usr/lib/python3.8/site-packages/PIL/Image.py:744: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> def load(self): if self.tile and self.use_load_libtiff: > return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> def _load_libtiff(self): """Overload method triggered when we detect a compressed tiff Calls out to libtiff""" Image.Image.load(self) self.load_prepare() if not len(self.tile) == 1: raise OSError("Not exactly one tile") # (self._compression, (extents tuple), # 0, (rawmode, self._compression, fp)) extents = self.tile[0][1] args = list(self.tile[0][3]) # To be nice on memory footprint, if there's a # file descriptor, use that instead of reading # into a string in python. # libtiff closes the file descriptor, so pass in a dup. try: fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) # flush the file descriptor, prevents error on pypy 2.4+ # should also eliminate the need for fp.tell # in _seek if hasattr(self.fp, "flush"): self.fp.flush() except OSError: # io.BytesIO have a fileno, but returns an OSError if # it doesn't use a file descriptor. fp = False if fp: args[2] = fp > decoder = Image._getdecoder( self.mode, "libtiff", tuple(args), self.decoderconfig ) args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError During handling of the above exception, another exception occurred: mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: general_input = 'mono.tif', engine = <Engine.pikepdf: 3> @pytest.mark.parametrize("engine", ["internal", "pikepdf", "pdfrw"]) def test_general(general_input, engine): inputf = os.path.join(os.path.dirname(__file__), "tests", "input", general_input) outputf = os.path.join( os.path.dirname(__file__), "tests", "output", general_input + ".pdf" ) assert os.path.isfile(outputf) f = inputf out = outputf engine = getattr(img2pdf.Engine, engine) # we do not test animation.gif with pdfrw because it doesn't support # saving hexadecimal palette data if f.endswith(os.path.sep + "animation.gif") and engine == img2pdf.Engine.pdfrw: return with open(f, "rb") as inf: orig_imgdata = inf.read() > output = img2pdf.convert(orig_imgdata, nodate=True, engine=engine) engine = <Engine.pikepdf: 3> f = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' general_input = 'mono.tif' inf = <_io.BufferedReader name='/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif'> inputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' orig_imgdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') out = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' outputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' src/img2pdf_test.py:6303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf.py:2102: in convert ) in read_images(rawdata, kwargs["colorspace"], kwargs["first_frame_only"]): _default_kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': None, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7fc9ac234940>, 'moddate': None, 'nodate': False, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} default = None images = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00',) img = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': <Engine.pikepdf: 3>, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7fc9ac234940>, 'moddate': None, 'nodate': True, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} kwname = 'pdfa' pdf = <img2pdf.pdfdoc object at 0x7fc9abf18640> rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') src/img2pdf.py:1636: in read_images newimg = imgdata.convert("L") cleanup = <function read_images.<locals>.cleanup at 0x7fc9ac230f70> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7fc9abf1cbd0> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 /usr/lib/python3.8/site-packages/PIL/Image.py:915: in convert self.load() colors = 256 dither = None matrix = None mode = 'L' palette = 0 self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: in load return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: in _load_libtiff decoder = Image._getdecoder( args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7FC9ABF252E0> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError _________________________ test_general[mono.tif-pdfrw] _________________________ [gw8] linux -- Python 3.8.11 /usr/bin/python3.8 mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: rawdata = b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x...\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00' colorspace = None, first_frame_only = False def read_images(rawdata, colorspace, first_frame_only=False): im = BytesIO(rawdata) im.seek(0) imgdata = None try: imgdata = Image.open(im) except IOError as e: # test if it is a jpeg2000 image if rawdata[:12] != b"\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A": raise ImageOpenError( "cannot read input image (not jpeg2000). " "PIL: error reading image: %s" % e ) # image is jpeg2000 imgformat = ImageFormat.JPEG2000 else: logger.debug("PIL format = %s", imgdata.format) imgformat = None for f in ImageFormat: if f.name == imgdata.format: imgformat = f if imgformat is None: imgformat = ImageFormat.other def cleanup(): if imgdata is not None: # the python-pil version 2.3.0-1ubuntu3 in Ubuntu does not have the # close() method try: imgdata.close() except AttributeError: pass im.close() logger.debug("imgformat = %s", imgformat.name) # depending on the input format, determine whether to pass the raw # image or the zlib compressed color information # JPEG and JPEG2000 can be embedded into the PDF as-is if imgformat == ImageFormat.JPEG or imgformat == ImageFormat.JPEG2000: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG") cleanup() return [ ( color, ndpi, imgformat, rawdata, imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ] # The MPO format is multiple JPEG images concatenated together # we use the offset and size information to dissect the MPO into its # individual JPEG images and then embed those into the PDF individually. # # The downside is, that this truncates the first JPEG as the MPO metadata # will still be in it but the referenced images are chopped off. We still # do it that way instead of adding the full MPO as the first image to not # store duplicate image data. if imgformat == ImageFormat.MPO: result = [] img_page_count = 0 for offset, mpent in zip( imgdata._MpoImageFile__mpoffsets, imgdata.mpinfo[0xB002] ): if first_frame_only and img_page_count > 0: break with BytesIO(rawdata[offset : offset + mpent["Size"]]) as rawframe: with Image.open(rawframe) as imframe: # The first frame contains the data that makes the JPEG a MPO # Could we thus embed an MPO into another MPO? Lets not support # such madness ;) if img_page_count > 0 and imframe.format != "JPEG": raise Exception("MPO payload must be a JPEG %s", imframe.format) ( color, ndpi, imgwidthpx, imgheightpx, rotation, iccp, ) = get_imgmetadata( imframe, ImageFormat.JPEG, default_dpi, colorspace ) if color == Colorspace["1"]: raise JpegColorspaceError("jpeg can't be monochrome") if color == Colorspace["P"]: raise JpegColorspaceError("jpeg can't have a color palette") if color == Colorspace["RGBA"]: raise JpegColorspaceError("jpeg can't have an alpha channel") logger.debug("read_images() embeds a JPEG from MPO") result.append( ( color, ndpi, ImageFormat.JPEG, rawdata[offset : offset + mpent["Size"]], imgwidthpx, imgheightpx, [], False, 8, rotation, iccp, ) ) img_page_count += 1 cleanup() return result # We can directly embed the IDAT chunk of PNG images if the PNG is not # interlaced # # PIL does not provide the information whether a PNG was stored interlaced # or not. Thus, we retrieve that info manually by looking at byte 13 in the # IHDR chunk. We know where to find that in the file because the IHDR chunk # must be the first chunk. if imgformat == ImageFormat.PNG and rawdata[28] == 0: color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) pngidat, palette = parse_png(rawdata) # PIL does not provide the information about the original bits per # sample. Thus, we retrieve that info manually by looking at byte 9 in # the IHDR chunk. We know where to find that in the file because the # IHDR chunk must be the first chunk depth = rawdata[24] if depth not in [1, 2, 4, 8, 16]: raise ValueError("invalid bit depth: %d" % depth) logger.debug("read_images() embeds a PNG") cleanup() return [ ( color, ndpi, imgformat, pngidat, imgwidthpx, imgheightpx, palette, False, depth, rotation, iccp, ) ] # If our input is not JPEG or PNG, then we might have a format that # supports multiple frames (like TIFF or GIF), so we need a loop to # iterate through all frames of the image. # # Each frame gets compressed using PNG compression *except* if: # # * The image is monochrome => encode using CCITT group 4 # # * The image is CMYK => zip plain RGB data # # * We are handling a CCITT encoded TIFF frame => embed data result = [] img_page_count = 0 # loop through all frames of the image (example: multipage TIFF) while True: try: imgdata.seek(img_page_count) except EOFError: break if first_frame_only and img_page_count > 0: break # PIL is unable to preserve the data of 16-bit RGB TIFF files and will # convert it to 8-bit without the possibility to retrieve the original # data # https://github.com/python-pillow/Pillow/issues/1888 # # Some tiff images do not have BITSPERSAMPLE set. Use this to create # such a tiff: tiffset -u 258 test.tif if ( imgformat == ImageFormat.TIFF and max(imgdata.tag_v2.get(TiffImagePlugin.BITSPERSAMPLE, [1])) > 8 ): raise ValueError("PIL is unable to preserve more than 8 bits per sample") # We can directly copy the data out of a CCITT Group 4 encoded TIFF, if it # only contains a single strip if ( imgformat == ImageFormat.TIFF and imgdata.info["compression"] == "group4" and len(imgdata.tag_v2[TiffImagePlugin.STRIPOFFSETS]) == 1 ): photo = imgdata.tag_v2[TiffImagePlugin.PHOTOMETRIC_INTERPRETATION] inverted = False if photo == 0: inverted = True elif photo != 1: raise ValueError( "unsupported photometric interpretation for " "group4 tiff: %d" % photo ) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace, rawdata ) offset, length = ccitt_payload_location_from_pil(imgdata) im.seek(offset) rawdata = im.read(length) fillorder = imgdata.tag_v2.get(TiffImagePlugin.FILLORDER) if fillorder is None: # no FillOrder: nothing to do pass elif fillorder == 1: # msb-to-lsb: nothing to do pass elif fillorder == 2: logger.debug("fillorder is lsb-to-msb => reverse bits") # lsb-to-msb: reverse bits of each byte rawdata = bytearray(rawdata) for i in range(len(rawdata)): rawdata[i] = TIFFBitRevTable[rawdata[i]] rawdata = bytes(rawdata) else: raise ValueError("unsupported FillOrder: %d" % fillorder) logger.debug("read_images() embeds Group4 from TIFF") result.append( ( color, ndpi, ImageFormat.CCITTGroup4, rawdata, imgwidthpx, imgheightpx, [], inverted, 1, rotation, iccp, ) ) img_page_count += 1 continue logger.debug("Converting frame: %d" % img_page_count) color, ndpi, imgwidthpx, imgheightpx, rotation, iccp = get_imgmetadata( imgdata, imgformat, default_dpi, colorspace ) newimg = None if color == Colorspace["1"]: try: > ccittdata = transcode_monochrome(imgdata) cleanup = <function read_images.<locals>.cleanup at 0x7f7d8a916040> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7f7d8a904c20> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 src/img2pdf.py:1614: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> def transcode_monochrome(imgdata): """Convert the open PIL.Image imgdata to compressed CCITT Group4 data""" logger.debug("Converting monochrome to CCITT Group4") # Convert the image to Group 4 in memory. If libtiff is not installed and # Pillow is not compiled against it, .save() will raise an exception. newimgio = BytesIO() # we create a whole new PIL image or otherwise it might happen with some # input images, that libtiff fails an assert and the whole process is # killed by a SIGABRT: # https://gitlab.mister-muffin.de/josch/img2pdf/issues/46 > im = Image.frombytes(imgdata.mode, imgdata.size, imgdata.tobytes()) imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> newimgio = <_io.BytesIO object at 0x7f7d8a904cc0> src/img2pdf.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> encoder_name = 'raw', args = '1' def tobytes(self, encoder_name="raw", *args): """ Return image as a bytes object. .. warning:: This method returns the raw image data from the internal storage. For compressed image data (e.g. PNG, JPEG) use :meth:`~.save`, with a BytesIO parameter for in-memory data. :param encoder_name: What encoder to use. The default is to use the standard "raw" encoder. :param args: Extra arguments to the encoder. :returns: A :py:class:`bytes` object. """ # may pass tuple instead of argument list if len(args) == 1 and isinstance(args[0], tuple): args = args[0] if encoder_name == "raw" and args == (): args = self.mode > self.load() args = '1' encoder_name = 'raw' self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> /usr/lib/python3.8/site-packages/PIL/Image.py:744: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> def load(self): if self.tile and self.use_load_libtiff: > return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> def _load_libtiff(self): """Overload method triggered when we detect a compressed tiff Calls out to libtiff""" Image.Image.load(self) self.load_prepare() if not len(self.tile) == 1: raise OSError("Not exactly one tile") # (self._compression, (extents tuple), # 0, (rawmode, self._compression, fp)) extents = self.tile[0][1] args = list(self.tile[0][3]) # To be nice on memory footprint, if there's a # file descriptor, use that instead of reading # into a string in python. # libtiff closes the file descriptor, so pass in a dup. try: fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) # flush the file descriptor, prevents error on pypy 2.4+ # should also eliminate the need for fp.tell # in _seek if hasattr(self.fp, "flush"): self.fp.flush() except OSError: # io.BytesIO have a fileno, but returns an OSError if # it doesn't use a file descriptor. fp = False if fp: args[2] = fp > decoder = Image._getdecoder( self.mode, "libtiff", tuple(args), self.decoderconfig ) args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError During handling of the above exception, another exception occurred: mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder > decoder = getattr(core, decoder_name + "_decoder") E AttributeError: module 'PIL._imaging' has no attribute 'libtiff_decoder' args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:430: AttributeError The above exception was the direct cause of the following exception: general_input = 'mono.tif', engine = <Engine.pdfrw: 2> @pytest.mark.parametrize("engine", ["internal", "pikepdf", "pdfrw"]) def test_general(general_input, engine): inputf = os.path.join(os.path.dirname(__file__), "tests", "input", general_input) outputf = os.path.join( os.path.dirname(__file__), "tests", "output", general_input + ".pdf" ) assert os.path.isfile(outputf) f = inputf out = outputf engine = getattr(img2pdf.Engine, engine) # we do not test animation.gif with pdfrw because it doesn't support # saving hexadecimal palette data if f.endswith(os.path.sep + "animation.gif") and engine == img2pdf.Engine.pdfrw: return with open(f, "rb") as inf: orig_imgdata = inf.read() > output = img2pdf.convert(orig_imgdata, nodate=True, engine=engine) engine = <Engine.pdfrw: 2> f = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' general_input = 'mono.tif' inf = <_io.BufferedReader name='/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif'> inputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/input/mono.tif' orig_imgdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') out = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' outputf = '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1/src/tests/output/mono.tif.pdf' src/img2pdf_test.py:6303: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src/img2pdf.py:2102: in convert ) in read_images(rawdata, kwargs["colorspace"], kwargs["first_frame_only"]): _default_kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': None, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7f7d8abf9940>, 'moddate': None, 'nodate': False, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} default = None images = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00',) img = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') kwargs = {'allow_oversized': True, 'artborder': None, 'author': None, 'bleedborder': None, 'colorspace': None, 'creationdate': None, 'creator': None, 'cropborder': None, 'engine': <Engine.pdfrw: 2>, 'first_frame_only': False, 'keywords': None, 'layout_fun': <function default_layout_fun at 0x7f7d8abf9940>, 'moddate': None, 'nodate': True, 'outputstream': None, 'pdfa': None, 'producer': None, 'subject': None, 'title': None, 'trimborder': None, 'viewer_center_window': False, 'viewer_fit_window': False, 'viewer_fullscreen': False, 'viewer_initial_page': None, 'viewer_magnification': None, 'viewer_page_layout': None, 'viewer_panes': None} kwname = 'pdfa' pdf = <img2pdf.pdfdoc object at 0x7f7d8a8fc880> rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') src/img2pdf.py:1636: in read_images newimg = imgdata.convert("L") cleanup = <function read_images.<locals>.cleanup at 0x7f7d8a916040> color = <Colorspace.1: 3> colorspace = None f = <ImageFormat.other: 7> first_frame_only = False iccp = None im = <_io.BytesIO object at 0x7f7d8a904c20> img_page_count = 0 imgdata = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> imgformat = <ImageFormat.TIFF: 5> imgheightpx = 48 imgwidthpx = 115 ndpi = (72, 72) newimg = None rawdata = (b'II*\x00*\x02\x00\x00x\x9c\xcd\xd2\xc1\r\xc3 \x0c\x05\xd0\x1fq\xc81#0\n\xa3t' b"\x14\x18\r\xa9\x0bt\x84\x8c\xe0\x9e\xea\x03\xe2'\xa4jc_\xabV*\xa7\xff\x0e" b'\x18\xd9\x86\xb4g\xe5\x7f\xf1\x16\x0f\n\x10*\x02\xcb4\xd2\x8b\x1d\xb0' b'l\xcb\x91V\xf6\xc8+\xa9IGz3wK\xc9t\xe4\xe7T_J\xd3\xc9\x8aY\x83c\xc3' b'\xc5\xb2c\xb6w\xf7\x06\x1d\x15\x8e,\xd9Q<59\xb6o\xf11\x86w\xf2\xee\xdf\x95XM' b'GA0Y\xea\xbe5C\x96\xf8\xe4\xcf~\xce\x06\x1f~L\xd4\x00\t\x00\x00\x01' b'\x03\x00\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00' b'\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01' b'\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00' b'\x00\x00\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01' b'\x04\x00\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00' b'\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00' b'\x00\x00\x00\x00\x0c\x00\x00\x01\x03\x00\x01\x00\x00\x00s\x00' b'\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x02\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00\x01\x00' b'\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x01\x00' b'\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x16\x01' b'\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00\x01\x00' b'\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\x1a\x02' b'\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00"\x02\x00\x00\x1c\x01' b'\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00' b'\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00' b'\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0c\x00\x00\x01\x03\x00' b'\x01\x00\x00\x00s\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00' b'\x02\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x01\x03\x00' b'\x01\x00\x00\x00\x08\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00' b'\x01\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00' b'\x16\x01\x03\x00\x01\x00\x00\x000\x00\x00\x00\x17\x01\x04\x00' b'\x01\x00\x00\x00\x8b\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00' b'\xc0\x02\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc8\x02\x00\x00' b'\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00' b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00' b'\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00') result = [] rotation = 0 /usr/lib/python3.8/site-packages/PIL/Image.py:915: in convert self.load() colors = 256 dither = None matrix = None mode = 'L' palette = 0 self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1122: in load return self._load_libtiff() __class__ = <class 'PIL.TiffImagePlugin.TiffImageFile'> self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> /usr/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:1180: in _load_libtiff decoder = Image._getdecoder( args = ['1', 'tiff_adobe_deflate', False, 554] extents = (0, 0, 115, 48) fp = False self = <PIL.TiffImagePlugin.TiffImageFile image mode=1 size=115x48 at 0x7F7D8A909C10> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ mode = '1', decoder_name = 'libtiff' args = ('1', 'tiff_adobe_deflate', False, 554), extra = () def _getdecoder(mode, decoder_name, args, extra=()): # tweak arguments if args is None: args = () elif not isinstance(args, tuple): args = (args,) try: decoder = DECODERS[decoder_name] except KeyError: pass else: return decoder(mode, *args + extra) try: # get decoder decoder = getattr(core, decoder_name + "_decoder") except AttributeError as e: > raise OSError(f"decoder {decoder_name} not available") from e E OSError: decoder libtiff not available args = ('1', 'tiff_adobe_deflate', False, 554) decoder_name = 'libtiff' extra = () mode = '1' /usr/lib/python3.8/site-packages/PIL/Image.py:432: OSError =========================== short test summary info ============================ ERROR src/img2pdf_test.py::test_tiff_rgb12[internal] - AssertionError: [{'ver... ERROR src/img2pdf_test.py::test_tiff_rgb12[pikepdf] - AssertionError: [{'vers... ERROR src/img2pdf_test.py::test_tiff_float[pdfrw] - AssertionError: [{'versio... ERROR src/img2pdf_test.py::test_tiff_float[pikepdf] - AssertionError: [{'vers... ERROR src/img2pdf_test.py::test_tiff_float[internal] - AssertionError: [{'ver... ERROR src/img2pdf_test.py::test_tiff_rgb12[pdfrw] - AssertionError: [{'versio... ERROR src/img2pdf_test.py::test_tiff_gray1[internal] - assert 8 == 1 ERROR src/img2pdf_test.py::test_tiff_rgb14[internal] - AssertionError: [{'ver... ERROR src/img2pdf_test.py::test_tiff_gray1[pikepdf] - assert 8 == 1 ERROR src/img2pdf_test.py::test_tiff_rgb14[pikepdf] - AssertionError: [{'vers... ERROR src/img2pdf_test.py::test_tiff_rgb14[pdfrw] - AssertionError: [{'versio... ERROR src/img2pdf_test.py::test_tiff_gray1[pdfrw] - assert 8 == 1 FAILED src/img2pdf_test.py::test_png_icc[pdfrw] - ValueError: could not conve... FAILED src/img2pdf_test.py::test_png_icc[internal] - ValueError: could not co... FAILED src/img2pdf_test.py::test_png_icc[pikepdf] - ValueError: could not con... FAILED src/img2pdf_test.py::test_general[mono.tif-internal] - OSError: decode... FAILED src/img2pdf_test.py::test_general[mono.tif-pikepdf] - OSError: decoder... FAILED src/img2pdf_test.py::test_general[mono.tif-pdfrw] - OSError: decoder l... ================== 6 failed, 330 passed, 12 errors in 20.11s =================== * ERROR: media-gfx/img2pdf-0.4.1-r1::gentoo failed (test phase): * pytest failed with python3.8 * * Call stack: * ebuild.sh, line 127: Called src_test * environment, line 2962: Called distutils-r1_src_test * environment, line 1278: Called _distutils-r1_run_foreach_impl 'python_test' * environment, line 533: Called python_foreach_impl 'distutils-r1_run_phase' 'python_test' * environment, line 2622: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 2095: Called _multibuild_run '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_test' * environment, line 2093: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'python_test' * environment, line 834: Called distutils-r1_run_phase 'python_test' * environment, line 1217: Called python_test * environment, line 2918: Called epytest '-n' 'auto' * environment, line 1611: Called die * The specific snippet of code: * "${@}" || die -n "pytest failed with ${EPYTHON}"; * * If you need support, post the output of `emerge --info '=media-gfx/img2pdf-0.4.1-r1::gentoo'`, * the complete build log and the output of `emerge -pqv '=media-gfx/img2pdf-0.4.1-r1::gentoo'`. * The complete build log is located at '/var/log/emerge-log/build/media-gfx/img2pdf-0.4.1-r1:20210822-123227.log'. * For convenience, a symlink to the build log is located at '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/temp/environment'. * Working directory: '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1' * S: '/var/tmp/portage/media-gfx/img2pdf-0.4.1-r1/work/img2pdf-0.4.1'