Read thumbnail/embedded JPEG in DNG file

I have a compressed DNG file which I can preview in the Photos app on Windows 11, possibly because there is an embedded JPEG aka thumbnail in the DNG file. Is there a way to read this thumbnail into Matlab? I figure if Windows Photos can do it, Matlab should be able to also. I can't seem to use imread as suggeted here to get the preview, however:
imread('SomeCompressedDngFile.DNG') % Error: Unable to read TIFF file "SomeCompressedDngFile.DNG". File is corrupt or image does not
contain any readable tiles.
imread('SomeCompressedDngFile.DNG', 'jpeg') % Error: 'SomeCompressedDngFile.DNG is not a jpeg file

2 Comments

Thanks for these suggestions. With the FEX program, I was getting errors ("Error using tifflib. Unable to retrieve SubIFD") with the compressed version of the DNG files, so I tried it on the uncompressed version, which fails at,
curve = uint16(info.SubIFDs{1}.LinearizationTable);
Unrecognized field name "LinearizationTable".
But just to make sure I'm heading down the right path, I don't need to access the TIFF data, just the JPEG preview that Windows Photos can display. Is there a way to do this? [I ended up using an external program and made it as an answer in case it helps someone].

Sign in to comment.

 Accepted Answer

KAE
KAE on 3 Mar 2023
Edited: KAE on 6 Mar 2023
In case it helps someone, here's one approach. The program exiftool contains functions to extract the embedded jpg, and here's how to run it from Matlab,
% Run exiftool.exe from Matlab command line using system
% Format of exiftool command was taken from examples displayed if exiftool
% is run without any arguments
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -a -b -W %d%f_%t%-c.%s -preview:all SomeDngUncompressedFile.dng');
% Creates SomeDngUncompressedFile_PreviewImage.jpg
% Read in the jpg and display it
imshow(imread('SomeDngUncompressedFile_PreviewImage.jpg'));
This worked on the uncompressed version of the DNG files, and not on the compressed.
You can also get helpful info on the uncompressed or compressed file,
% Generate a TXT file containing information about the DNG file including
% the preview thumbnail
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -s -s SomeDngCompressedFile.dng > SomeDngCompressedFile_EXIF.txt')

5 Comments

For some reason Matlab can't access the creation date of a DNG file using "dir" or System.IO.File.GetCreationTime('SomeDngCompressedFile.dng'). Both return the modification date. So, you can get the creation date as
follows,
system('"C:\LongPathName\Image-ExifTool-12.57\exiftool" -CreateDate SomeDngCompressedFile.dng')
But it will be very slow on large files, see here.
KAE
KAE on 6 Mar 2023
Edited: KAE on 6 Mar 2023
Using "system" or "!" from Matlab on my Windows machine resulted in 'getfattr' is not recognized as an internal or external command.' Same error for "ntfsinfo". What am I missing?
Oddly, that is also showing the file modification date, see here. My final workaround will likely be outside of Matlab and I'll post it when I figure it out! Thank you for all your help.

Sign in to comment.

More Answers (0)

Categories

Asked:

KAE
on 28 Feb 2023

Commented:

KAE
on 7 Mar 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!