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 commentaires

Walter Roberson
Walter Roberson le 28 Fév 2023
Note that the TIFF content itself is probably not going to make sense as DNG images are typically compressed in a way that the Tiff class does not know how to handle.
KAE
KAE le 3 Mar 2023
Modifié(e) : KAE le 3 Mar 2023
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].

Connectez-vous pour commenter.

 Réponse acceptée

KAE
KAE le 3 Mar 2023
Modifié(e) : KAE le 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 commentaires

KAE
KAE le 6 Mar 2023
Modifié(e) : KAE le 6 Mar 2023
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 le 6 Mar 2023
Modifié(e) : KAE le 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?
It looks like the answer might be to use .NET
System.IO.File.GetCreationTime(PATH)
KAE
KAE le 7 Mar 2023
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.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur MATLAB Report Generator dans Centre d'aide et File Exchange

Question posée :

KAE
le 28 Fév 2023

Commenté :

KAE
le 7 Mar 2023

Community Treasure Hunt

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

Start Hunting!

Translated by