Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JXL/HEIF/AVIF/WebP/PNG Exif data support #213

Merged
merged 9 commits into from
Jun 29, 2023
Merged

Conversation

qbnu
Copy link
Contributor

@qbnu qbnu commented Jun 20, 2023

Adds support for reading JPEG XL, HEIF, AVIF, WebP and PNG Exif data. Doesn't work for animated JXLs. e1852b2 fixes a memory leak I introduced in #208 (my bad) and 2ce3887 partially fixes #207.

@qbnu qbnu changed the title JXL Exif data support JXL/HEIF Exif data support Jun 21, 2023
@qbnu qbnu changed the title JXL/HEIF Exif data support JXL/HEIF/AVIF Exif data support Jun 21, 2023
@qbnu qbnu changed the title JXL/HEIF/AVIF Exif data support JXL/HEIF/AVIF/WebP/PNG Exif data support Jun 22, 2023
@sylikc
Copy link
Owner

sylikc commented Jun 23, 2023

thanks for all the new updates. I'm going to make sure to make time to merge them asap.

@sylikc sylikc added bug Something isn't working enhancement New feature or request format support Related to add/remove/change of a specific format support. labels Jun 23, 2023

if (!exif_blocks.empty()) {
std::vector<uint8_t> exif = handle.get_metadata(exif_blocks[0]);
if (exif.size() > 8 && exif.size() < 65538) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where's the magic 65538 number come from? I see it in other EXIF chunks of the code, where size+some number is 65538. It's an odd number, not a power of 2?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These libraries all have their own ideas about where to start the Exif data from. JPEG Exif blocks are in the format FF E1 SS SS 45 78 69 66 00 00 [data]. The SS SS is a big-endian unsigned short representing the size of everything after FF E1.

libjxl gives 00 00 00 00 [data], libheif gives 00 00 00 00 45 78 69 66 00 00 [data], libavif, libwebp and libpng give [data], so they have different limits for size. If you want I can change it to 65536 + an offset and add notes explaining why.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, now it makes sense. Regarding the documentation, I'll just refer to this comment. This is good investigative information.

@sylikc sylikc merged commit 4ac3ce3 into sylikc:master Jun 29, 2023
4 checks passed
@sylikc sylikc linked an issue Oct 7, 2023 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request format support Related to add/remove/change of a specific format support.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

JPEGView not displaying all the embedded metadata in JPEGs Feature request: Display HEIC Metadata
2 participants