imagecatalog

Create a PDF contact sheet from a set of images


Keywords
contactsheet
License
MirOS
Install
pip install imagecatalog==0.1.6

Documentation

imagecatalog

Docs PyPI Python Version License codecov

Create a PDF contact sheet from a list of files.

Installation

Install from PyPI

pip install imagecatalog

or get latest dev version from GitHub.

pip install git+https://github.com/tdmorello/imagecatalog.git

Usage

Command line

# for full list of options
imagecatalog -h
imagecatalog -i images/*.png -o example.pdf --title 'Image Catalog'

PDF output

imagecatalog   \
    -i images/*.png \
    -o example_landscape.pdf \
    --rows 2   \
    --cols 4   \
    --orientation landscape \
    --title 'Catalog with Landscape Layout' \

PDF output

File paths and metadata can also be supplied from a csv file with headers "image", "label", "note"

$ head -n5 sample.csv
image,label,note
images/image_00.png,Image 0,image 0 note
images/image_01.png,Image 1,image 1 note
images/image_02.png,Image 2,image 2 note
images/image_03.png,Image 3,image 3 note
imagecatalog --csv sample.csv --title 'Catalog from CSV' -o example_csv.pdf

PDF output

Other features: apply image filters

imagecatalog -i images/*.png -o catalog.pdf \
    --invert    \
    --grayscale \
    --autocontrast

integrate with shell utilities

# make a catalog with all images created within the last day
find . -ctime 1d | xargs imagecatalog -o catalog.pdf -i

use regular expressions to filter files

# make a catalog with images that have '1' and/or '2' in the filename
imagecatalog -i images/*.png -o catalog.pdf --regex '.*(1|2).*'

Scripting

from imagecatalog import Catalog

# Catalog inherits from FPDF
# see https://github.com/PyFPDF/fpdf2 for more methods
catalog = Catalog()

# optionally add a title
catalog.set_title("Image Catalog")

# grab a set of existing images from a local directory
images = [f"images/image_{i:02}.png" for i in range(12)]

# optionally add labels (defaults to filenames)
labels = [f"Image {i}" for i in range(len(images))]

# optionally add notes
notes = [f"note for image {i}" for i in range(len(images))]

# generate the pdf
catalog.add_page()
catalog.build_table(images, labels, notes, rows=4, cols=3)

# save
catalog.output("example.pdf")

Contributions

imagecatalog uses poetry for building and package management. Pull requests are welcome.