[ 
https://issues.apache.org/jira/browse/TIKA-4937?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18120014#comment-18120014
 ] 

ASF GitHub Bot commented on TIKA-4937:
--------------------------------------

dschmidt opened a new pull request, #3266:
URL: https://github.com/apache/tika/pull/3266

   https://issues.apache.org/jira/browse/TIKA-4937
   
   `ImageParser` claimed `image/x-icon`, but ImageIO has no ICO reader, so a 
`.ico` yielded nothing beyond its content type. This PR adds a small dedicated 
`ICOParser` (no new dependency) for `image/vnd.microsoft.icon` and 
`image/x-win-bitmap`:
   
   - Reads the ICONDIR and the header of every image, PNG IHDR or 
BITMAPINFOHEADER. The directory's own width/height/bpp fields are unreliable 
(256 px is stored as 0) and serve only as fallback.
   - Sets `tiff:ImageWidth`, `tiff:ImageLength`, `tiff:BitsPerSample` of the 
largest image (larger area first, then higher colour depth, as Windows picks), 
`icon:image-count`, one `icon:images` value per image (`WxH@bpp encoding`) and, 
for cursors, `icon:hotspot-x` / `icon:hotspot-y`.
   - Nothing is decoded. Images beyond the end of the file or without a 
readable header are counted in a warning, never an exception.
   - Adds `image/x-win-bitmap` (Windows cursor, `*.cur`, magic `00 00 02 00`) 
to `tika-mimetypes.xml`, registers the `icon:` keys in `tika-metadata-schema` 
(regenerated, four keys added, nothing dropped), removes `image/x-icon` from 
`ImageParser`, and documents the parser.
   
   Fixtures are generated: an icon with 16/32 px BMP and 256 px PNG images, a 
BMP-only icon and a two-image cursor. Tests cover both encodings, cursor 
hotspots, auto-detection, truncation, directory fallback and rejection of 
non-icon input; `TestMimeTypes` covers `.ico`/`.cur` detection.
   
   Follows up on TIKA-4936, whose embedded EXE/DLL icons now get dimensions in 
`/rmeta`.




> Extract image dimensions and entry list from ICO/CUR files
> ----------------------------------------------------------
>
>                 Key: TIKA-4937
>                 URL: https://issues.apache.org/jira/browse/TIKA-4937
>             Project: Tika
>          Issue Type: New Feature
>            Reporter: Dominik Schmidt
>            Priority: Major
>
> h3. Background
> Tika detects {{image/vnd.microsoft.icon}} (alias {{image/x-icon}}) and 
> {{ImageParser}} claims the type, but ImageIO has no ICO reader on the 
> classpath, so a {{.ico}} yields nothing beyond the content type: no 
> dimensions, no bit depth, no image count.
> Since TIKA-4936 every Windows EXE/DLL emits its icon groups as embedded 
> {{.ico}} documents (the first one typed {{THUMBNAIL}}), so an index now sees 
> plenty of .ico entries without width/height.
> h3. Proposal
> Read the ICONDIR/ICONDIRENTRY structure of {{.ico}} and {{.cur}} files 
> directly (no decoding, no new dependency) and set:
> * {{tiff:ImageWidth}} / {{tiff:ImageLength}} and {{tiff:BitsPerSample}} of 
> the largest image. Entries of 256 px are stored as 0 in the directory, and 
> the directory's width/height/bpp fields are unreliable in general, so take 
> the values from each image's header instead: the PNG IHDR for PNG-encoded 
> entries, the BITMAPINFOHEADER for BMP-encoded ones (height there is doubled 
> to include the AND mask).
> * the number of images
> * one multi-valued property listing each entry as {{WxH@bpp}} plus its 
> encoding (bmp/png), in directory order
> * for cursors ({{.cur}}, type 2 in the header): the hotspot of the largest 
> image
> No text content. Malformed files (directory beyond EOF, entry offsets outside 
> the file, count 0, unknown encoding) must not throw: emit what can be read 
> and record a warning.
> Implementation: a dedicated small parser in {{tika-parser-image-module}} for 
> {{image/vnd.microsoft.icon}} and {{image/x-win-bitmap}}, replacing the 
> {{image/x-icon}} entry in {{ImageParser}}'s supported types (which currently 
> finds no reader).
> h3. Out of scope
> * Decoding or rendering the images (the thumbnail presets keep passing the 
> .ico through as stored)
> * Animated cursors ({{.ani}}), {{RT_GROUP_CURSOR}} extraction from PE files
> h3. Acceptance criteria
> * {{tika -m}} on a .ico with 16/32 px BMP entries and a 256 px PNG entry 
> reports 256x256, 32 bpp, 3 images and the per-entry list.
> * The embedded icons of TIKA-4936's fixtures show width/height in {{/rmeta}} 
> output.
> * A .cur reports type cursor and the hotspot.
> * Truncated or corrupt .ico files yield a warning, not an exception.
> * Fixtures: {{testWindows-icons-app.ico}} / {{-doc.ico}} from TIKA-4936 plus 
> one generated .cur.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to