fix 987: Added options all and ALL to samples/taglist

v0.27.3
clanmills 6 years ago committed by Dan Čermák
parent 961409a4e4
commit 34f10994fb
No known key found for this signature in database
GPG Key ID: E632C3380610D1C5

@ -482,7 +482,13 @@ Test conversions from string to long, float and Rational types.
#### taglist
```
Usage: taglist [--group name|Groups|Exif|Canon|CanonCs|CanonSi|CanonCf|Fujifilm|Minolta|Nikon1|Nikon2|Nikon3|Olympus|Panasonic|Pentax|Sigma|Sony|Iptc|dc|xmp|xmpRights|xmpMM|xmpBJ|xmpTPg|xmpDM|pdf|photoshop|crs|tiff|exif|aux|iptc]
$ taglist --help
Usage: taglist [--help]
[--group name|
Groups|Exif|Canon|CanonCs|CanonSi|CanonCf|Fujifilm|Minolta|Nikon1|Nikon2|Nikon3|Olympus|
Panasonic|Pentax|Sigma|Sony|Iptc|
dc|xmp|xmpRights|xmpMM|xmpBJ|xmpTPg|xmpDM|pdf|photoshop|crs|tiff|exif|aux|iptc|all|ALL
]
Print Exif tags, MakerNote tags, or Iptc datasets
```
@ -494,7 +500,7 @@ The data from this program is formatted as HTML on the web-site. https://exiv2.
For example, to show the binary definition of Group `Nikon3`:
```
1516 rmills@rmillsmbp:~/gnu/github/exiv2/0.27-maintenance $ taglist Nikon3
$ taglist Nikon3
Version, 1, 0x0001, Nikon3, Exif.Nikon3.Version, Undefined, Nikon Makernote version
ISOSpeed, 2, 0x0002, Nikon3, Exif.Nikon3.ISOSpeed, Short, ISO speed setting
ColorMode, 3, 0x0003, Nikon3, Exif.Nikon3.ColorMode, Ascii, Color mode
@ -511,15 +517,52 @@ We can see those tags being used:
```
$ exiv2 -pa --grep Nikon3 http://clanmills.com/Stonehenge.jpg
1519 rmills@rmillsmbp:~/gnu/github/exiv2/0.27-maintenance $ exiv2 -pa --grep Nikon3 http://clanmills.com/Stonehenge.jpg
Exif.Nikon3.Version Undefined 4 2.11
Exif.Nikon3.ISOSpeed Short 2 200
1520 rmills@rmillsmbp:~/gnu/github/exiv2/0.27-maintenance $
...
```
This information is formatted (search Nikon (format 3) MakerNote Tags): [https://exiv2.org/tags-nikon.html](https://exiv2.org/tags-nikon.html)
#### taglist all
These options are provided to list every Exif tag known to Exiv2. The option `all` prints Group.Name for every tag. The option `ALL` print Group.Name followed by the TagInfo for that tag. For example:
```bash
$ taglist all | grep ISOSpeed$
Photo.ISOSpeed
PanasonicRaw.ISOSpeed
CanonCs.ISOSpeed
CanonSi.ISOSpeed
Casio2.ISOSpeed
MinoltaCs5D.ISOSpeed
MinoltaCs7D.ISOSpeed
Nikon1.ISOSpeed
Nikon2.ISOSpeed
Nikon3.ISOSpeed
Olympus.ISOSpeed
Olympus2.ISOSpeed
```
```bash
$ taglist ALL | grep ISOSpeed,
Photo.ISOSpeed, 34867, 0x8833, Photo, Exif.Photo.ISOSpeed, Long, This tag indicates the ISO speed value of a camera or input device that is defined in ISO 12232. When recording this tag, the PhotographicSensitivity and SensitivityType tags shall also be recorded.
PanasonicRaw.ISOSpeed, 23, 0x0017, PanasonicRaw, Exif.PanasonicRaw.ISOSpeed, Short, ISO speed setting
CanonCs.ISOSpeed, 16, 0x0010, CanonCs, Exif.CanonCs.ISOSpeed, SShort, ISO speed setting
CanonSi.ISOSpeed, 2, 0x0002, CanonSi, Exif.CanonSi.ISOSpeed, Short, ISO speed used
Casio2.ISOSpeed, 20, 0x0014, Casio2, Exif.Casio2.ISOSpeed, Short, ISO Speed
MinoltaCs5D.ISOSpeed, 38, 0x0026, MinoltaCs5D, Exif.MinoltaCs5D.ISOSpeed, Short, ISO speed setting
MinoltaCs7D.ISOSpeed, 28, 0x001c, MinoltaCs7D, Exif.MinoltaCs7D.ISOSpeed, Short, ISO speed setting
Nikon1.ISOSpeed, 2, 0x0002, Nikon1, Exif.Nikon1.ISOSpeed, Short, ISO speed setting
Nikon2.ISOSpeed, 6, 0x0006, Nikon2, Exif.Nikon2.ISOSpeed, Short, ISO speed setting
Nikon3.ISOSpeed, 2, 0x0002, Nikon3, Exif.Nikon3.ISOSpeed, Short, ISO speed setting
Olympus.ISOSpeed, 4097, 0x1001, Olympus, Exif.Olympus.ISOSpeed, SRational, ISO speed value
Olympus2.ISOSpeed, 4097, 0x1001, Olympus, Exif.Olympus.ISOSpeed, SRational, ISO speed value
Sony1MltCs7D.ISOSpeed, 28, 0x001c, MinoltaCs7D, Exif.MinoltaCs7D.ISOSpeed, Short, ISO speed setting
```
[Sample](#TOC1) Programs [Test](#TOC2) Programs
<div id="tiff-test">

@ -12,42 +12,27 @@
#include <iostream>
#include <string>
#include <sstream>
using namespace Exiv2;
int main(int argc, char* argv[])
{
int rc = 0;
std::ostringstream out;
try {
int rc = 0;
bool bHelp = false;
switch (argc) {
case 2: {
std::string item(argv[1]);
if ( item == "--help" ) {
bHelp = true;
break;
}
if (item == "Groups") {
/*
https://cgit.kde.org/digikam.git/tree/core/libs/dmetadata/metaengine_exif.cpp#n1077
const Exiv2::GroupInfo* gi = Exiv2::ExifTags::groupList();
while (gi->tagList_ != 0)
{
// NOTE: See BUG #375809 : MPF tags = exception Exiv2 0.26
if (QLatin1String(gi->ifdName_) != QLatin1String("Makernote"))
{
Exiv2::TagListFct tl = gi->tagList_;
const Exiv2::TagInfo* ti = tl();
while (ti->tag_ != 0xFFFF)
{
tags << ti;
++ti;
}
}
++gi;
}
*/
const GroupInfo* groupList = ExifTags::groupList();
if (groupList) {
while (groupList->tagList_) {
@ -58,6 +43,26 @@ int main(int argc, char* argv[])
break;
}
if (item == "all" || item == "ALL" ) {
const GroupInfo* groupList = ExifTags::groupList();
if (groupList) {
while (groupList->tagList_) {
std::ostringstream tags;
ExifTags::taglist(tags,groupList->groupName_);
// https://en.cppreference.com/w/cpp/string/basic_string/getline
std::istringstream input(tags.str()) ;
for (std::string line,comma(","); std::getline(input, line); ) {
std::cout << groupList->groupName_ << "."
<< (item == "all" ? line.substr(0,line.find(comma)) : line)
<< std::endl;
}
groupList++;
}
}
break;
}
if (item == "Exif") {
ExifTags::taglist(std::cout);
break;
@ -78,6 +83,7 @@ int main(int argc, char* argv[])
} catch (const AnyError&) {
rc = 2;
}
std::cerr << "Unexpected argument " << argv[1] << std::endl;
break;
}
@ -120,20 +126,22 @@ int main(int argc, char* argv[])
default:
rc = 1;
break;
break;
}
if (rc) {
std::cout << "Usage: " << argv[0]
<< " [--group "
"name|Groups|Exif|Canon|CanonCs|CanonSi|CanonCf|Fujifilm|Minolta|Nikon1|Nikon2|Nikon3|Olympus|"
"Panasonic|Pentax|Sigma|Sony|Iptc"
<< "|dc|xmp|xmpRights|xmpMM|xmpBJ|xmpTPg|xmpDM|pdf|photoshop|crs|tiff|exif|aux|iptc]\n"
<< "Print Exif tags, MakerNote tags, or Iptc datasets\n";
if (rc || bHelp) {
std::cout << "Usage: taglist [--help]" << std::endl
<< " [--group name|" << std::endl
<< " Groups|Exif|Canon|CanonCs|CanonSi|CanonCf|Fujifilm|Minolta|Nikon1|Nikon2|Nikon3|Olympus|" << std::endl
<< " Panasonic|Pentax|Sigma|Sony|Iptc|" << std::endl
<< " dc|xmp|xmpRights|xmpMM|xmpBJ|xmpTPg|xmpDM|pdf|photoshop|crs|tiff|exif|aux|iptc|all|ALL" << std::endl
<< " ]" << std::endl
<< "Print Exif tags, MakerNote tags, or Iptc datasets" << std::endl
;
}
return rc;
} catch (AnyError& e) {
std::cout << "Caught Exiv2 exception '" << e << "'\n";
return 1;
rc = 1 ;
}
return rc;
}

Loading…
Cancel
Save