Overview
I investigated cases where ImageMagick does not work properly when creating pyramidal TIFFs for IIIF image delivery.
References
Conversion methods are explained on pages like the following.
Using the VIPS command line
# For a 3-channel source image
vips tiffsave source_image.tif output_image.tif --tile --pyramid --compression jpeg --tile-width 256 --tile-height 256
# For a source image with an alpha channel
vips extract_band source_image.tif temp_image.v 0 --n 3 \
&& vips tiffsave temp_image.v output_image.tif --tile --pyramid --compression jpeg --tile-width 256 --tile-height 256 \
&& rm temp_image.v
Using ImageMagick
convert source_image.tif -alpha off \
-define tiff:tile-geometry=256x256 \
-define tiff:generate-pyramids=true \
-compress jpeg \
'ptif:output_image.tif'
Target Data
The following image was used.
"Izumi no Kuni Ezu" (Map of Izumi Province), manuscript copy. National Diet Library Digital Collection https://dl.ndl.go.jp/pid/1286201 (accessed 2025-03-11)
wget -O input.jpg https://dl.ndl.go.jp/api/iiif/1286201/R0000001/full/full/0/default.jpg
VIPS command line
Perform the conversion.
vips tiffsave input.jpg output_vips.tif --tile --pyramid --compression jpeg --tile-width 256 --tile-height 256
Then verify the result with the following.
tiffinfo output_vips.tif
=== TIFF directory 0 ===
TIFF Directory at offset 0x962908 (9840904)
Image Width: 13300 Image Length: 10400
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Sample Format: unsigned integer
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 1 ===
TIFF Directory at offset 0xc8d468 (13161576)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 6650 Image Length: 5200
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 2 ===
TIFF Directory at offset 0xd74710 (14108432)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 3325 Image Length: 2600
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 3 ===
TIFF Directory at offset 0xdb5228 (14373416)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 1662 Image Length: 1300
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 4 ===
TIFF Directory at offset 0xdc72c4 (14447300)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 831 Image Length: 650
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 5 ===
TIFF Directory at offset 0xdcca76 (14469750)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 415 Image Length: 325
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
=== TIFF directory 6 ===
TIFF Directory at offset 0xdce62a (14476842)
Subfile Type: reduced-resolution image (1 = 0x1)
Image Width: 207 Image Length: 162
Tile Width: 256 Tile Length: 256
Resolution: 72, 72 pixels/inch
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: YCbCr
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
JPEG Tables: (574 bytes)
Multiple TIFF directories (layers) exist, and it appears to have been properly created as a pyramidal TIFF (multi-resolution TIFF).
ImageMagick
Perform the conversion.
convert input.jpg -alpha off \
-define tiff:tile-geometry=256x256 \
-define tiff:generate-pyramids=true \
-compress jpeg \
'ptif:output_convert.tif'
Then verify the result with the following.
tiffinfo output_convert.tif
=== TIFF directory 0 ===
TIFF Directory at offset 0x1989f46 (26779462)
Image Width: 13300 Image Length: 10400
Tile Width: 256 Tile Length: 256
Bits/Sample: 8
Compression Scheme: JPEG
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Planar Configuration: single image plane
Page Number: 0-1
White Point: 0.3127-0.329
PrimaryChromaticities: 0.640000,0.330000,0.300000,0.600000,0.150000,0.060000
JPEG Tables: (289 bytes)
Only TIFF directory 0 exists, indicating that it is very likely not a pyramidal TIFF (multi-resolution TIFF).
Summary
The results seem to vary depending on the ImageMagick version, but we were able to confirm cases where pyramidal TIFFs cannot be created.
I was not able to identify the specific cause, but it appears necessary to consider using VIPS or other tools instead.
This is somewhat incomplete information, but I hope it serves as a helpful reference.




Comments
โฆ