TIFF without XResolution/YResolution reports dpi (1, 1)
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #10339 di @brettdavies — integrata
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 75/100
Direzione di ricerca
Inizia seguendo il modo in cui il plugin TIFF legge XResolution, YResolution e ResolutionUnit in im.info, quindi confrontalo con il comportamento di PNG e JPEG menzionato nell’issue. Aggiungi o modifica un test di regressione per un TIFF salvato senza tag di risoluzione e verifica che la sua chiave dpi sia assente; preserva il comportamento previsto per i TIFF che includono tag di risoluzione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What did you do?
I'm building an image-optimization tool that prepares screenshots and photos for PDFs: it picks the output format, carries the DPI so pages place at the right size, and checks that lossless steps keep every pixel. Its test suite generates each input type Pillow opens and runs it through the tool, which is where this came up. A TIFF saved without resolution tags reported dpi == (1, 1), and the tool carried 1 DPI into its PNG and JPEG output, which a DPI-aware PDF tool would place at 96 inches wide for a 96-pixel image.
import io
from PIL import Image
buf = io.BytesIO()
Image.new("L", (16, 16)).save(buf, "TIFF")
with Image.open(buf) as im:
print(im.tag_v2.get(282), im.tag_v2.get(283), im.tag_v2.get(296))
print(im.info.get("dpi"), im.info.get("resolution"))
What did you expect to happen?
No dpi key, as for a PNG or JPEG saved without resolution.
What actually happened?
None None None
(1, 1) (1, 1)
xres = self.tag_v2.get(X_RESOLUTION, 1) and the same for Y supply 1 when the tags are absent. I understand this may be kept for compatibility; #10187 dropped BMP's (0, 0) placeholder in the same spirit.
Related: #10331 (JPEG dpi read from EXIF).
What are your OS, Python and Pillow versions?
- OS: Ubuntu 24.04 (Linux x86_64)
- Python: 3.13.13
- Pillow: 13.0.0 (also reproduces on 12.3.0)
--------------------------------------------------------------------
Pillow 13.0.0
Python 3.13.13 (main, May 10 2026, 19:26:54) [Clang 22.1.3 ]
--------------------------------------------------------------------
Python executable is ~/.venv/bin/python
Environment Python files loaded from ~/.venv
System Python files loaded from ~/.local/share/uv/python/cpython-3.13.13-linux-x86_64-gnu
--------------------------------------------------------------------
Python Pillow modules loaded from ~/.venv/lib/python3.13/site-packages/PIL
Binary Pillow modules loaded from ~/.venv/lib/python3.13/site-packages/PIL
--------------------------------------------------------------------
--- PIL CORE support ok, compiled for 13.0.0
--- TKINTER support ok, loaded 9.0
--- FREETYPE2 support ok, loaded 2.14.3
--- LITTLECMS2 support ok, loaded 2.19
--- WEBP support ok, loaded 1.6.0
--- AVIF support ok, loaded 1.4.2
--- JPEG support ok, compiled for libjpeg-turbo 3.2.0
--- OPENJPEG (JPEG2000) support ok, loaded 2.5.4
--- ZLIB (PNG/ZIP) support ok, loaded 1.3, compiled for zlib-ng 2.3.3
--- LIBTIFF support ok, loaded 4.7.2
--- RAQM (Bidirectional Text) support ok, loaded 0.11.0, fribidi 1.0.13, harfbuzz 14.5.0
*** LIBIMAGEQUANT (Quantization method) support not installed
--- XCB (X protocol) support ok
--------------------------------------------------------------------
- Lingua principale
- Python
- Stelle
- 13.9k
- Fork
- 2.6k
- Merge medio
- 1g 4h
- PR unite (30g)
- 173
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di python-pillow/Pillow
-
Warn that pre-applying arabic_reshaper + python-bidi corrupts text on a Raqm buildForse già presa @Syamjith-NK l’ha presa 62 giorni fa. ApertaDocumentation Font Rendering PNG Third Party Framework
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
python-pillow/Pillow#9907 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Image.putpixel incorrectly labels supported arguments in type annotationsForse già presa @radarhere l’ha presa 190 giorni fa. ApertaPNG
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
python-pillow/Pillow#9584 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
`ImageDraw.arc()` segfaults on a tuple subclass whose `__len__` is too largeForse già presa @Parsiffall1 l’ha presa oggi. Aperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 58/100
python-pillow/Pillow#10358 ·
I maintainer di solito rispondono entro 1 giorno
-
JPEG saved with keep_rgb=True and dpi reopens with incorrect colorsForse già presa @Muguett-DBY l’ha presa 2 giorni fa. Aperta🤖-assisted JPEG
Difficoltà 4/5 1-2 giorni Idoneità per principianti 25/100
python-pillow/Pillow#10344 ·
I maintainer di solito rispondono entro 1 giorno
-
JPEG dpi read from EXIF uses XResolution for both axesForse già presa @unvisible789 l’ha presa 3 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 20/100
python-pillow/Pillow#10331 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di python-pillow/Pillow
Issue simili
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
awslabs/visual-asset-management-system#937 ·
I maintainer di solito rispondono entro 1 giorno
-
Admin member of a research group cannot see the HX2 allocation until they've been added to itAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
follow-up
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 83/100
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 2 giorni