Version: 7.1 (using KDE KDE 3.3.2) Installed from: SuSE RPMs OS: Linux RAW camera formats tend to be TIFF formats, and contain accessible thumbnails and EXIF data. Using the parse.c you would be able to obtain thumbnails /much/ quicker than using dcraw, and get the exif information as well.
Sorry, should have mentioned that parse.c is also from Dave Coffin, like the dcraw.
Created attachment 8953 [details] Small program that extracts thumbnail and exif from RAW camera images Also on Dave Coffin's site, but I've attached it for convenience
One final reason why this would be neat: Fuji RAW formats store the image at 45 degree angle, and currently this is how RAW thumbnails display, which looks a bit strange. If you used parse.c, the builtin thumbnails are already rotated to the normal angle.
CVS commit by pahlibar: partial fix for #96459. try parse.c from dave coffin before trying dcraw to see if we can actually extract the thumbnail from the images. the speed difference doesn't seem too substantial though CCBUG: 96459 A parse.c 1.1 [UNKNOWN] M +2 -1 Makefile.am 1.13 M +32 -7 digikamthumbnail.cpp 1.14 --- kdeextragear-3/digikam/kioslave/Makefile.am #1.12:1.13 @@ -1,9 +1,10 @@ INCLUDES = $(IMLIB2_CFLAGS) $(LIBKEXIF_CFLAGS) -I$(top_srcdir)/digikam/sqlite $(all_includes) METASOURCES = AUTO +KDE_CFLAGS = -w kde_module_LTLIBRARIES = kio_digikamthumbnail.la kio_digikamtags.la \ kio_digikamio.la -kio_digikamthumbnail_la_SOURCES = digikamthumbnail.cpp +kio_digikamthumbnail_la_SOURCES = digikamthumbnail.cpp parse.c kio_digikamthumbnail_la_LIBADD = $(LIB_KIO) -ljpeg $(LIBPNG) kio_digikamthumbnail_la_LDFLAGS = -module -avoid-version $(all_libraries) \ --- kdeextragear-3/digikam/kioslave/digikamthumbnail.cpp #1.13:1.14 @@ -73,4 +73,8 @@ extern "C" using namespace KIO; +extern "C" +{ +int dcraw_identify(const char* infile, const char* outfile); +} static void exifRotate(const QString& filePath, QImage& thumb) @@ -312,6 +316,11 @@ void kio_digikamthumbnailProtocol::get(c // stat the original file struct stat st; - if (::stat(QFile::encodeName(url.path(-1)), &st) == 0) + if (::stat(QFile::encodeName(url.path(-1)), &st) != 0) { + error(KIO::ERR_INTERNAL, i18n("File doesnot exist")); + return; + } + + img = loadPNG(thumbPath); if (!img.isNull()) @@ -320,5 +329,4 @@ void kio_digikamthumbnailProtocol::get(c regenerate = false; } - } if (regenerate) @@ -564,4 +572,21 @@ bool kio_digikamthumbnailProtocol::loadI bool kio_digikamthumbnailProtocol::loadDCRAW(QImage& image, const QString& path) { + // first try with Dave Coffin's "parse" utility + + kdDebug() << k_funcinfo << "Parsing file: " << path << endl; + + KTempFile thumbFile(QString::null, "rawthumb"); + thumbFile.setAutoDelete(true); + if (thumbFile.status() == 0) + { + if (dcraw_identify(QFile::encodeName(path), + QFile::encodeName(thumbFile.name())) == 0) + { + image.load(thumbFile.name()); + if (!image.isNull()) + return true; + } + } + QCString command;
the exif handling is done outside digiKam using libkexif/libexif. That part will undergo some changes in the near future and i will try and see if parse.c can't be included in that.
I also would like to see ability to view EXIF info for RAW files.
additional comment: watch out with Nikon NEF files, the tiff thumbnail is tiny (160x120) so for NEF it may be better to do a dcraw convert instead. I'm using digikam 0.7.2 and the preview and showfoto both use the tiny thumbnail. PS: my installation is broken (dcraw not found when doing a raw convert), maybe the behaviour I'm seeing is atypical. Mail me for example NEF files if needed.
renaming
*** Bug 101281 has been marked as a duplicate of this bug. ***
I'm also having that problem with *.NEF files - I just have the 160x120 pixel thumbnail .. but dcraw is working without flaws you could also ask me if NEF files are needed
*** This bug has been confirmed by popular vote. ***
SVN commit 515268 by cgilles: digikam from trunk : Metadata support using Exiv2 : - New image properties sidebar tab named "Metadata" instead old "Exif". This area include : * Standard Exif tags viewer. * MarkerNote Exif tags viewer. * IPTC records viewer. - New capability to copy metadata in clipboard like text. - New capability to print metadata. - Tags name use the "user Friendly" conversion from Exiv2 instead the internal name provided by old Exif viewer based on libkexif. - Capability to read metadata from CRW files (Canon RAW files) - New class DMetadata to load/save metadata without loading image data. Actually JPEG, CRW, and PNG files are supported. About PNG (Exif and IPTC raw profiles generated by ImageMagick are supported. To support new file formats (like NEF, MRW, TIFF, DNG, etc), new image file parsers must be added to Exiv2 library. IMPORTANT: - Exiv2 do not support yet gettext for i18n rules. All informations in metadata viewers aren't yet i18n (tags name, tags values, and tags descriptions) - Any tag names use internal Exiv2 name, not the user friendly text transformations. This point must be fixed in Exiv2 libs. To 0.9.0, these tools are just metadata readers. Writting capabilities (metadata editors) will added later 0.9.0. The files in B.K.O directly or indirectly relevant of this commits are listed below : *Pending: 103255 106103 115764 111560 *Partially fixed: 91812 96459 109253 110598 118501 * To check before closing: 122264 * Fixed (can be closed): 103489 121371 105670 109319 CCMAIL: digikam-devel@kde.org, Andreas Huggel <ahuggel@gmx.net> CCBUGS: 103255, 106103, 115764, 111560, 91812, 96459, 109253, 110598, 118501, 122264, 103489, 121371, 105670, 109319 M +2 -1 libs/Makefile.am M +5 -4 libs/dimg/Makefile.am M +1 -1 libs/dimg/dimg.cpp M +1 -1 libs/dimg/dimg.h M +19 -1 libs/dimg/dimgloader.cpp M +4 -2 libs/dimg/dimgloader.h M +4 -61 libs/dimg/loaders/jpegloader.cpp M +5 -29 libs/dimg/loaders/pngloader.cpp M +2 -1 libs/dimg/loaders/rawloader.cpp A libs/dmetadata (directory) A libs/dmetadata/Makefile.am A libs/dmetadata/dmetadata.cpp [License: GPL] A libs/dmetadata/dmetadata.h [License: GPL] A libs/dmetadata/loaders (directory) A libs/dmetadata/loaders/Makefile.am A libs/dmetadata/loaders/dmetaloader.cpp [License: GPL] A libs/dmetadata/loaders/dmetaloader.h [License: GPL] A libs/dmetadata/loaders/jpegmetaloader.cpp [License: GPL] A libs/dmetadata/loaders/jpegmetaloader.h [License: GPL] A libs/dmetadata/loaders/pngmetaloader.cpp [License: GPL] A libs/dmetadata/loaders/pngmetaloader.h [License: GPL] A libs/dmetadata/loaders/rawmetaloader.cpp [License: GPL] A libs/dmetadata/loaders/rawmetaloader.h [License: GPL] A libs/dmetadata/loaders/tiffmetaloader.cpp [License: GPL] A libs/dmetadata/loaders/tiffmetaloader.h [License: GPL] M +3 -2 libs/imageproperties/Makefile.am M +82 -323 libs/imageproperties/imagepropertiesexiftab.cpp M +12 -25 libs/imageproperties/imagepropertiesexiftab.h M +19 -18 libs/imageproperties/imagepropertiessidebar.cpp M +10 -9 libs/imageproperties/imagepropertiessidebar.h M +27 -26 libs/imageproperties/imagepropertiessidebarcamgui.cpp M +2 -1 libs/imageproperties/imagepropertiessidebarcamgui.h M +16 -15 libs/imageproperties/imagepropertiessidebardb.cpp M +3 -1 libs/widgets/Makefile.am A libs/widgets/metadata (directory) A libs/widgets/metadata/Makefile.am A libs/widgets/metadata/exifwidget.cpp [License: GPL] A libs/widgets/metadata/exifwidget.h [License: GPL] A libs/widgets/metadata/iptcwidget.cpp [License: GPL] A libs/widgets/metadata/iptcwidget.h [License: GPL] A libs/widgets/metadata/makernotewidget.cpp [License: GPL] A libs/widgets/metadata/makernotewidget.h [License: GPL] A libs/widgets/metadata/mdkeylistviewitem.cpp [License: GPL] A libs/widgets/metadata/mdkeylistviewitem.h [License: GPL] A libs/widgets/metadata/metadatalistview.cpp [License: GPL] A libs/widgets/metadata/metadatalistview.h [License: GPL] A libs/widgets/metadata/metadatalistviewitem.cpp [License: GPL] A libs/widgets/metadata/metadatalistviewitem.h [License: GPL] A libs/widgets/metadata/metadatawidget.cpp [License: GPL] A libs/widgets/metadata/metadatawidget.h [License: GPL] M +24 -1 utilities/cameragui/cameraui.cpp
---- Gilles Caulier <caulier.gilles@free.fr> escribió: [bugs.kde.org quoted mail] Actually, I'm in contact with Exiv2 developer to try to implement myself support for NEF files. If somebody can/want to help, please drop me an email. Paco Cruz
Paco, this link can help you in your task : http://www.rags-int-inc.com/PhotoTechStuff/RawStandards/RawSummary.html Gilles
I think I'm affected by the 0.9 switch to Exiv2 - the MRW files I'm working with aren't producing accurate information when queried by digiKam. http://www.cricalix.net/~dhill/digikam/PICT2698.MRW.gz DiMAGE Master tells me that this image has the following meta-data: Shutter speed: 1/60 Aperture: 3.5 Flash: Yes (fill flash) ISO: 200 Lens focal length: 18mm Equivalent length: 27mm Brightness: 3.6 digiKam says: Shutter: 1/1000 Aperture: 4.5 Flash: No ISO: 200 Focal length: 26mm Equivalent: 39mm Brightness: 8.62 Makernotes don't even show up :( The focal length is a simple calculation issue. The rest I can only assume is Exiv2 mis-reading the RAW data, or digiKam misreading the output from Exiv2. One neat bit of makernote that dimage can pick up is the lens that was used. It'd be so sweet if digiKam could do that.
If I recall correctly, one of the posters on the digiKam list had a tool that could extract the RAW data from most cameras - perhaps they need to talk to the Exiv2 folks, and pool talent and resources to provide one powerful library.
Ducan, If you try the last Exiv2 source code (under developement from Exiv2 svn repository), there is a new TIFF/EP file parser to get Exif/IPTC/GPS info from all TIFF/EP files based (this include NEF, DNG, CR2, PEF, etc)... But this is not included MRW file because it's not a TIFF/EP file based. Later digiKam 0.9.0-beta1, i will working on Exiv2 project to add MRW support and Minolta makernotes. Please let's me any time (:=)))... Gilles Caulier
I just did that (checkout latest exiv2) and found that the configure script is missing from the svn account. So ./config will not work. Workaround: You can extract it from the tar ball.
Thanks for the info Gilles. I'm running digiKam SVN as production now (yes, I'm slightly nuts), so SVN of a dependency can't hurt :)
There is no configure script in the Exiv2 SVN repository as this is a generated script. Run 'make config' after checking out the source to generate it and read the README.
Ok, good to learn! But the README in svn file says to run ./configure && make && make install
Yes, that refers to the distributed tarball. Read on... In the meantime I'll try to re-word this so that it'll be clearer
SVN commit 539531 by cgilles: digikam from trunk : DMetadata MRW Raw file parser : add standard Minolta MakerNote support. Still todo Camera Settings. This code require last Exiv2 implementation from svn (future 0.9.2 Exiv2 release including my Minolta makernote parser implementation) CCMAIL: digikam-devel@kde.org CCBUGS: 96459 M +209 -251 mrwparser.cpp
SVN commit 539610 by cgilles: digikam from trunk : DMetadata::MRWparser: - support Dynax 5D camera settings makernote. - Fix memory leak (thanks mr valgrind) - added Exception rules to prevent crash if old Exiv2 release is used. CCBUGS: 96459 M +222 -97 mrwparser.cpp
SVN commit 539614 by cgilles: digikam from trunk : DMetadata::MRWparser: - support Dynax 7D camera settings makernote. - added Exception rules to prevent crash if old Exiv2 release is used (Again). CCBUGS: 96459 M +401 -271 mrwparser.cpp
SVN commit 539629 by cgilles: digikam from trunk : DMetadata::MRWparser: - support Sandard NEW camera settings makernote (like D5, D7, S304, and S404 camera). - support Sandard OLD camera settings makernote (like D7u, D7i, and D7hi camera). CCBUGS: 96459 M +298 -16 mrwparser.cpp M +15 -13 mrwparser.h
SVN commit 544159 by cgilles: digikam from trunk : bye bye MRW parser from digiKam core, Welcome to MRW parser from Exiv2 (0.10 release) !!! To resume: Exif/Makernote from RAW file formats are now extracted in digiKam using Exiv2 library (http://www.exiv2.org). Next release planed in a near future, will support (in read only) these RAW file formats: Adobe DNG, Canon CR2, Canon CRW, Nikon NEF, Pentax PEF, Sony SR2, Minolta MRW New RAW file formats will be added in the future, like X3F, ORF, RAF... Developpers : all contributions welcome to improve this great library ! I can close bug #96459 now. BUG: 96459 CCMAIL: digikam-devel@kde.org, ahuggel@gmx.net M +1 -1 Makefile.am D mrwparser.cpp D mrwparser.h M +2 -12 rawmetaloader.cpp --- trunk/extragear/graphics/digikam/libs/dmetadata/loaders/Makefile.am #544158:544159 @@ -4,7 +4,7 @@ noinst_LTLIBRARIES = libdmetadataloader.la libdmetadataloader_la_SOURCES = dmetaloader.cpp jpegmetaloader.cpp pngmetaloader.cpp tiffmetaloader.cpp \ - rawmetaloader.cpp mrwparser.cpp + rawmetaloader.cpp libdmetadataloader_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIBJPEG) $(LIB_TIFF) $(LIB_PNG) --- trunk/extragear/graphics/digikam/libs/dmetadata/loaders/rawmetaloader.cpp #544158:544159 @@ -24,7 +24,6 @@ // Local includes. -#include "mrwparser.h" #include "rawmetaloader.h" namespace Digikam @@ -42,28 +41,19 @@ bool RAWMetaLoader::load(const QString& filePath) { // In first we trying to use Exiv2 library + // Exiv2 0.10 support : DNG, CRW, CR2, NEF, PEF, MRW, SR2 if (loadWithExiv2(filePath)) return true; - // Try to parse MRW RAW file - - MRWParser mrwparser; - if (mrwparser.parseMRW(QFile::encodeName(filePath))) - { - exifMetadata() = mrwparser.getExif(); - return true; - } - + // TODO new experimental RAW parser can be added here. return false; } bool RAWMetaLoader::save(const QString& filePath) { - // In first we trying to use Exiv2 library if (saveWithExiv2(filePath)) return true; - // TODO return false; }