File indexing completed on 2025-03-09 03:57:01
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2013-11-28 0007 * Description : a command line tool to export ExifTool metadata 0008 * 0009 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * 0013 * ============================================================ */ 0014 0015 // Qt includes 0016 0017 #include <QString> 0018 #include <QStringList> 0019 #include <QTextStream> 0020 #include <QCoreApplication> 0021 #include <QVariant> 0022 #include <QObject> 0023 0024 // Local includes 0025 0026 #include "dimg.h" 0027 #include "digikam_debug.h" 0028 #include "dpluginloader.h" 0029 #include "metaengine.h" 0030 #include "exiftoolparser.h" 0031 0032 using namespace Digikam; 0033 0034 int main(int argc, char** argv) 0035 { 0036 QCoreApplication app(argc, argv); 0037 0038 if (argc != 2) 0039 { 0040 qCDebug(DIGIKAM_TESTS_LOG) << "exiftoolexport_cli - CLI tool to export ExifTool metadata from image"; 0041 qCDebug(DIGIKAM_TESTS_LOG) << "Usage: <image>"; 0042 return -1; 0043 } 0044 0045 MetaEngine::initializeExiv2(); 0046 DPluginLoader::instance()->init(); 0047 0048 // Create ExifTool parser instance. 0049 0050 ExifToolParser* const parser = new ExifToolParser(qApp); 0051 0052 // Read metadata from the file. Start ExifToolParser 0053 0054 if (!parser->loadChunk(QString::fromUtf8(argv[1]))) 0055 { 0056 qCWarning(DIGIKAM_TESTS_LOG) << "Metadata chunk cannot be loaded"; 0057 return -1; 0058 } 0059 0060 ExifToolParser::ExifToolData chunk = parser->currentData(); 0061 0062 qCDebug(DIGIKAM_TESTS_LOG) << "Metadata chunk loaded"; 0063 0064 ExifToolParser::ExifToolData::iterator it = chunk.find(QLatin1String("EXV")); 0065 0066 if (it == chunk.end()) 0067 { 0068 qCWarning(DIGIKAM_TESTS_LOG) << "Metadata chunk is empty"; 0069 return -1; 0070 } 0071 0072 QVariantList varLst = it.value(); 0073 0074 MetaEngine meta; 0075 0076 QByteArray exv = varLst[0].toByteArray(); 0077 0078 if (!exv.isEmpty()) 0079 { 0080 qCDebug(DIGIKAM_TESTS_LOG) << "EXV chunk size" << exv.size(); 0081 meta.loadFromData(exv); 0082 } 0083 0084 QFile ef(QLatin1String("output.exv")); 0085 0086 if (!ef.open(QIODevice::WriteOnly)) 0087 { 0088 qCWarning(DIGIKAM_TESTS_LOG) << "Cannot open target EXV file"; 0089 return -1; 0090 } 0091 0092 ef.write(exv); 0093 ef.close(); 0094 0095 DImg file(1, 1, false); 0096 file.setMetadata(meta.data()); 0097 file.save(QLatin1String("output.jpg"), DImg::JPEG); 0098 0099 return 0; 0100 }