Added -b, -u and -P options to the utility. The -P option implements feature #468.
This commit is contained in:
parent
93e6a8a307
commit
c0ff4bd4b0
204
src/actions.cpp
204
src/actions.cpp
@ -198,9 +198,7 @@ namespace Action {
|
||||
int rc = 0;
|
||||
switch (Params::instance().printMode_) {
|
||||
case Params::pmSummary: rc = printSummary(); break;
|
||||
case Params::pmInterpreted: rc = printInterpreted(); break;
|
||||
case Params::pmValues: rc = printValues(); break;
|
||||
case Params::pmHexdump: rc = printHexdump(); break;
|
||||
case Params::pmList: rc = printList(); break;
|
||||
case Params::pmIptc: rc = printIptc(); break;
|
||||
case Params::pmComment: rc = printComment(); break;
|
||||
}
|
||||
@ -501,7 +499,7 @@ namespace Action {
|
||||
return rc;
|
||||
} // Print::printTag
|
||||
|
||||
int Print::printInterpreted()
|
||||
int Print::printList()
|
||||
{
|
||||
if (!Exiv2::fileExists(path_, true)) {
|
||||
std::cerr << path_
|
||||
@ -518,67 +516,108 @@ namespace Action {
|
||||
return -3;
|
||||
}
|
||||
Exiv2::ExifData::const_iterator md;
|
||||
bool manyFiles = Params::instance().files_.size() > 1;
|
||||
bool const manyFiles = Params::instance().files_.size() > 1;
|
||||
for (md = exifData.begin(); md != exifData.end(); ++md) {
|
||||
std::cout << std::setfill(' ') << std::left;
|
||||
if (manyFiles) {
|
||||
std::cout << std::setw(20) << path_ << " ";
|
||||
if ( Params::instance().unknown_
|
||||
&& md->tagName().substr(0, 2) == "0x") {
|
||||
continue;
|
||||
}
|
||||
std::cout << std::setw(44)
|
||||
<< md->key() << " "
|
||||
<< std::setw(9) << std::setfill(' ') << std::left
|
||||
<< md->typeName() << " "
|
||||
<< std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->count() << " "
|
||||
<< std::dec << *md
|
||||
<< std::endl;
|
||||
if (manyFiles) {
|
||||
std::cout << std::setfill(' ') << std::left << std::setw(20)
|
||||
<< path_ << " ";
|
||||
}
|
||||
bool first = true;
|
||||
if (Params::instance().printItems_ & Params::prTag) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << "0x" << std::setw(4) << std::setfill('0')
|
||||
<< std::right << std::hex
|
||||
<< md->tag();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prGroup) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::setw(12) << std::setfill(' ') << std::left
|
||||
<< md->groupName();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prKey) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::setfill(' ') << std::left << std::setw(44)
|
||||
<< md->key();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prName) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::setw(27) << std::setfill(' ') << std::left
|
||||
<< md->tagName();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prLabel) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::setw(30) << std::setfill(' ') << std::left
|
||||
<< md->tagLabel();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prType) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::setw(9) << std::setfill(' ') << std::left
|
||||
<< md->typeName();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prCount) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->count();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prSize) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
std::cout << std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->size();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prValue) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
if ( Params::instance().binary_
|
||||
&& md->typeId() == Exiv2::undefined
|
||||
&& md->size() > 100) {
|
||||
std::cout << "(Binary value suppressed)" << std::endl;
|
||||
continue;
|
||||
}
|
||||
std::cout << std::dec << md->value();
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prTrans) {
|
||||
if (!first) std::cout << " ";
|
||||
first = false;
|
||||
if ( Params::instance().binary_
|
||||
&& md->typeId() == Exiv2::undefined
|
||||
&& md->size() > 100) {
|
||||
std::cout << "(Binary value suppressed)" << std::endl;
|
||||
continue;
|
||||
}
|
||||
std::cout << std::dec << *md;
|
||||
}
|
||||
if (Params::instance().printItems_ & Params::prHex) {
|
||||
if (!first) std::cout << std::endl;
|
||||
first = false;
|
||||
if ( Params::instance().binary_
|
||||
&& md->typeId() == Exiv2::undefined
|
||||
&& md->size() > 100) {
|
||||
std::cout << "(Binary value suppressed)" << std::endl;
|
||||
continue;
|
||||
}
|
||||
Exiv2::DataBuf buf(md->size());
|
||||
md->copy(buf.pData_, exifData.byteOrder());
|
||||
Exiv2::hexdump(std::cout, buf.pData_, buf.size_);
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // Print::printInterpreted
|
||||
|
||||
int Print::printValues()
|
||||
{
|
||||
if (!Exiv2::fileExists(path_, true)) {
|
||||
std::cerr << path_
|
||||
<< ": Failed to open the file\n";
|
||||
return -1;
|
||||
}
|
||||
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path_);
|
||||
assert(image.get() != 0);
|
||||
image->readMetadata();
|
||||
Exiv2::ExifData &exifData = image->exifData();
|
||||
if (exifData.empty()) {
|
||||
std::cerr << path_
|
||||
<< ": No Exif data found in the file\n";
|
||||
return -3;
|
||||
}
|
||||
Exiv2::ExifData::const_iterator end = exifData.end();
|
||||
Exiv2::ExifData::const_iterator md;
|
||||
bool manyFiles = Params::instance().files_.size() > 1;
|
||||
for (md = exifData.begin(); md != end; ++md) {
|
||||
if (manyFiles) {
|
||||
std::cout << std::setfill(' ') << std::left
|
||||
<< std::setw(20) << path_ << " ";
|
||||
}
|
||||
std::cout << "0x" << std::setw(4) << std::setfill('0') << std::right
|
||||
<< std::hex << md->tag() << " "
|
||||
<< std::setw(9) << std::setfill(' ') << std::left
|
||||
<< md->ifdName() << " "
|
||||
<< std::setw(27) << std::setfill(' ') << std::left
|
||||
<< md->tagName() << " "
|
||||
<< std::setw(9) << std::setfill(' ') << std::left
|
||||
<< md->typeName() << " "
|
||||
<< std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->count() << " "
|
||||
<< std::dec << md->value()
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // Print::printValues
|
||||
} // Print::printList
|
||||
|
||||
int Print::printIptc()
|
||||
{
|
||||
@ -618,51 +657,6 @@ namespace Action {
|
||||
return 0;
|
||||
} // Print::printIptc
|
||||
|
||||
int Print::printHexdump()
|
||||
{
|
||||
if (!Exiv2::fileExists(path_, true)) {
|
||||
std::cerr << path_
|
||||
<< ": Failed to open the file\n";
|
||||
return -1;
|
||||
}
|
||||
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(path_);
|
||||
assert(image.get() != 0);
|
||||
image->readMetadata();
|
||||
Exiv2::ExifData &exifData = image->exifData();
|
||||
if (exifData.empty()) {
|
||||
std::cerr << path_
|
||||
<< ": No Exif data found in the file\n";
|
||||
return -3;
|
||||
}
|
||||
Exiv2::ExifData::const_iterator md;
|
||||
bool manyFiles = Params::instance().files_.size() > 1;
|
||||
for (md = exifData.begin(); md != exifData.end(); ++md) {
|
||||
std::cout << std::setfill(' ') << std::left;
|
||||
if (manyFiles) {
|
||||
std::cout << std::setw(20) << path_ << " ";
|
||||
}
|
||||
std::cout << std::setw(4)
|
||||
<< md->ifdName() << " "
|
||||
<< "0x" << std::setw(4) << std::setfill('0') << std::right
|
||||
<< std::hex << md->tag() << " "
|
||||
<< std::setw(9) << std::setfill(' ') << std::left
|
||||
<< md->typeName() << " "
|
||||
<< std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->count() << " "
|
||||
<< std::dec << std::setw(3)
|
||||
<< std::setfill(' ') << std::right
|
||||
<< md->size() << " "
|
||||
<< std::setw(27) << std::setfill(' ') << std::left
|
||||
<< md->tagName() << std::endl;
|
||||
Exiv2::DataBuf buf(md->size());
|
||||
md->copy(buf.pData_, exifData.byteOrder());
|
||||
Exiv2::hexdump(std::cout, buf.pData_, buf.size_);
|
||||
}
|
||||
|
||||
return 0;
|
||||
} // Print::printHexdump
|
||||
|
||||
int Print::printComment()
|
||||
{
|
||||
if (!Exiv2::fileExists(path_, true)) {
|
||||
|
||||
@ -166,12 +166,8 @@ namespace Action {
|
||||
int printIptc();
|
||||
//! Print Exif summary information
|
||||
int printSummary();
|
||||
//! Print the interpreted value for each Exif tag
|
||||
int printInterpreted();
|
||||
//! Print uninterpreted Exif information
|
||||
int printValues();
|
||||
//! Print Exif information in hexdump format
|
||||
int printHexdump();
|
||||
//! Print the list of Exif data in user defined format
|
||||
int printList();
|
||||
//! Print the label for a summary line
|
||||
void printLabel(const std::string& label) const;
|
||||
/*!
|
||||
|
||||
38
src/exiv2.1
38
src/exiv2.1
@ -80,6 +80,12 @@ Show the program version and exit.
|
||||
.B \-v
|
||||
Be verbose during the program run.
|
||||
.TP
|
||||
.B \-b
|
||||
Don't show large binary values.
|
||||
.TP
|
||||
.B \-u
|
||||
Don't show unknown tags.
|
||||
.TP
|
||||
.B \-k
|
||||
Preserve file timestamps when updating files (keep). Can be used with
|
||||
all options which update files. The flag is ignored by read-only
|
||||
@ -112,16 +118,42 @@ Print mode for the 'print' action. Possible modes are:
|
||||
.br
|
||||
s : print a summary of the EXIF metadata (the default)
|
||||
.br
|
||||
t : interpreted (translated) EXIF data
|
||||
t : interpreted (translated) EXIF data (shortcut for -Pkyct)
|
||||
.br
|
||||
v : plain EXIF data values
|
||||
v : plain EXIF data values (shortcut for -Pxgnycv)
|
||||
.br
|
||||
h : hexdump of the EXIF data
|
||||
h : hexdump of the EXIF data (shortcut for -Pxgnycsh)
|
||||
.br
|
||||
i : IPTC data values
|
||||
.br
|
||||
c : JPEG comment
|
||||
.TP
|
||||
.B \-P \fIcols\fP
|
||||
Print columns for the Exif taglist ('print' action), allows detailed
|
||||
control of the print output. Valid are:
|
||||
.br
|
||||
x : print a column with the tag value
|
||||
.br
|
||||
g : group name
|
||||
.br
|
||||
k : key
|
||||
.br
|
||||
l : tag label
|
||||
.br
|
||||
n : tag name
|
||||
.br
|
||||
y : type
|
||||
.br
|
||||
c : number of components (count)
|
||||
.br
|
||||
s : size in bytes
|
||||
.br
|
||||
v : plain data value
|
||||
.br
|
||||
t : interpreted (translated) data
|
||||
.br
|
||||
h : hexdump of the data
|
||||
.TP
|
||||
.B \-d \fItgt\fP
|
||||
Delete target(s) for the 'delete' action. Possible targets are:
|
||||
.br
|
||||
|
||||
@ -218,6 +218,8 @@ void Params::help(std::ostream& os) const
|
||||
<< " -h Display this help and exit.\n"
|
||||
<< " -V Show the program version and exit.\n"
|
||||
<< " -v Be verbose during the program run.\n"
|
||||
<< " -b Don't show large binary values.\n"
|
||||
<< " -u Don't show unknown tags.\n"
|
||||
<< " -k Preserve file timestamps (keep).\n"
|
||||
<< " -t Also set the file timestamp in 'rename' action (overrides -k).\n"
|
||||
<< " -T Only set the file timestamp in 'rename' action, do not rename\n"
|
||||
@ -228,11 +230,23 @@ void Params::help(std::ostream& os) const
|
||||
<< " is only used with the 'adjust' action.\n"
|
||||
<< " -p mode Print mode for the 'print' action. Possible modes are:\n"
|
||||
<< " s : print a summary of the Exif metadata (the default)\n"
|
||||
<< " t : interpreted (translated) Exif data\n"
|
||||
<< " v : plain Exif data values\n"
|
||||
<< " h : hexdump of the Exif data\n"
|
||||
<< " t : interpreted (translated) Exif data (shortcut for -Pkyct)\n"
|
||||
<< " v : plain Exif data values (shortcut for -Pxgnycv)\n"
|
||||
<< " h : hexdump of the Exif data (shortcut for -Pxgnycsh)\n"
|
||||
<< " i : Iptc data values\n"
|
||||
<< " c : Jpeg comment\n"
|
||||
<< " -P cols Print columns for the Exif taglist ('print' action). Valid are:\n"
|
||||
<< " x : print a column with the tag value\n"
|
||||
<< " g : group name\n"
|
||||
<< " k : key\n"
|
||||
<< " l : tag label\n"
|
||||
<< " n : tag name\n"
|
||||
<< " y : type\n"
|
||||
<< " c : number of components (count)\n"
|
||||
<< " s : size in bytes\n"
|
||||
<< " v : plain data value\n"
|
||||
<< " t : interpreted (translated) data\n"
|
||||
<< " h : hexdump of the data\n"
|
||||
<< " -d tgt Delete target(s) for the 'delete' action. Possible targets are:\n"
|
||||
<< " a : all supported metadata (the default)\n"
|
||||
<< " e : Exif section\n"
|
||||
@ -264,6 +278,8 @@ int Params::option(int opt, const std::string& optarg, int optopt)
|
||||
case 'V': version_ = true; break;
|
||||
case 'v': verbose_ = true; break;
|
||||
case 'k': preserve_ = true; break;
|
||||
case 'b': binary_ = true; break;
|
||||
case 'u': unknown_ = true; break;
|
||||
case 'f': force_ = true; fileExistsPolicy_ = overwritePolicy; break;
|
||||
case 'F': force_ = true; fileExistsPolicy_ = renamePolicy; break;
|
||||
case 'r': rc = evalRename(opt, optarg); break;
|
||||
@ -271,6 +287,7 @@ int Params::option(int opt, const std::string& optarg, int optopt)
|
||||
case 'T': rc = evalRename(opt, optarg); break;
|
||||
case 'a': rc = evalAdjust(optarg); break;
|
||||
case 'p': rc = evalPrint(optarg); break;
|
||||
case 'P': rc = evalPrintCols(optarg); break;
|
||||
case 'd': rc = evalDelete(optarg); break;
|
||||
case 'e': rc = evalExtract(optarg); break;
|
||||
case 'i': rc = evalInsert(optarg); break;
|
||||
@ -358,12 +375,11 @@ int Params::evalPrint(const std::string& optarg)
|
||||
int rc = 0;
|
||||
switch (action_) {
|
||||
case Action::none:
|
||||
action_ = Action::print;
|
||||
switch (optarg[0]) {
|
||||
case 's': printMode_ = pmSummary; break;
|
||||
case 't': printMode_ = pmInterpreted; break;
|
||||
case 'v': printMode_ = pmValues; break;
|
||||
case 'h': printMode_ = pmHexdump; break;
|
||||
case 't': rc = evalPrintCols("kyct"); break;
|
||||
case 'v': rc = evalPrintCols("xgnycv"); break;
|
||||
case 'h': rc = evalPrintCols("xgnycsh"); break;
|
||||
case 'i': printMode_ = pmIptc; break;
|
||||
case 'c': printMode_ = pmComment; break;
|
||||
default:
|
||||
@ -386,6 +402,47 @@ int Params::evalPrint(const std::string& optarg)
|
||||
return rc;
|
||||
} // Params::evalPrint
|
||||
|
||||
int Params::evalPrintCols(const std::string& optarg)
|
||||
{
|
||||
int rc = 0;
|
||||
switch (action_) {
|
||||
case Action::none:
|
||||
action_ = Action::print;
|
||||
printMode_ = pmList;
|
||||
for (std::size_t i = 0; i < optarg.length(); ++i) {
|
||||
switch (optarg[i]) {
|
||||
case 'x': printItems_ |= prTag; break;
|
||||
case 'g': printItems_ |= prGroup; break;
|
||||
case 'k': printItems_ |= prKey; break;
|
||||
case 'l': printItems_ |= prLabel; break;
|
||||
case 'n': printItems_ |= prName; break;
|
||||
case 'y': printItems_ |= prType; break;
|
||||
case 'c': printItems_ |= prCount; break;
|
||||
case 's': printItems_ |= prSize; break;
|
||||
case 'v': printItems_ |= prValue; break;
|
||||
case 't': printItems_ |= prTrans; break;
|
||||
case 'h': printItems_ |= prHex; break;
|
||||
default:
|
||||
std::cerr << progname() << ": Unrecognized print item `"
|
||||
<< optarg[i] << "'\n";
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Action::print:
|
||||
std::cerr << progname()
|
||||
<< ": Ignoring surplus option -P" << optarg << "\n";
|
||||
break;
|
||||
default:
|
||||
std::cerr << progname()
|
||||
<< ": Option -P is not compatible with a previous option\n";
|
||||
rc = 1;
|
||||
break;
|
||||
}
|
||||
return rc;
|
||||
} // Params::evalPrintCols
|
||||
|
||||
int Params::evalDelete(const std::string& optarg)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
@ -123,8 +123,23 @@ public:
|
||||
void cleanup();
|
||||
|
||||
//! Enumerates print modes
|
||||
enum PrintMode { pmSummary, pmInterpreted, pmValues, pmHexdump, pmIptc,
|
||||
pmComment };
|
||||
enum PrintMode { pmSummary, pmList, pmIptc, pmComment };
|
||||
|
||||
//! Individual items to print
|
||||
enum PrintItem {
|
||||
prTag = 1,
|
||||
prGroup = 2,
|
||||
prKey = 4,
|
||||
prName = 8,
|
||||
prLabel = 16,
|
||||
prType = 32,
|
||||
prCount = 64,
|
||||
prSize = 128,
|
||||
prValue = 256,
|
||||
prTrans = 512,
|
||||
prHex = 1024
|
||||
};
|
||||
|
||||
//! Enumerates common targets, bitmap
|
||||
enum CommonTarget { ctExif = 1, ctIptc = 2, ctComment = 4, ctThumb = 8 };
|
||||
//! Enumerates the policies to handle existing files in rename action
|
||||
@ -134,12 +149,15 @@ public:
|
||||
bool version_; //!< Version option flag.
|
||||
bool verbose_; //!< Verbose (talkative) option flag.
|
||||
bool force_; //!< Force overwrites flag.
|
||||
bool binary_; //!< Suppress long binary values.
|
||||
bool unknown_; //!< Suppress unknown tags.
|
||||
bool preserve_; //!< Preserve timestamps flag.
|
||||
bool timestamp_; //!< Rename also sets the file timestamp.
|
||||
bool timestampOnly_; //!< Rename only sets the file timestamp.
|
||||
FileExistsPolicy fileExistsPolicy_; //!< What to do if file to rename exists.
|
||||
bool adjust_; //!< Adjustment flag.
|
||||
PrintMode printMode_; //!< Print mode.
|
||||
unsigned long printItems_; //!< Print items.
|
||||
//! %Action (integer rather than TaskType to avoid dependency).
|
||||
int action_;
|
||||
int target_; //!< What common target to process.
|
||||
@ -159,17 +177,20 @@ private:
|
||||
@brief Default constructor. Note that optstring_ is initialized here.
|
||||
The c'tor is private to force instantiation through instance().
|
||||
*/
|
||||
Params() : optstring_(":hVvfktTFa:r:p:d:e:i:c:m:M:l:S:"),
|
||||
Params() : optstring_(":hVvfbuktTFa:r:p:P:d:e:i:c:m:M:l:S:"),
|
||||
help_(false),
|
||||
version_(false),
|
||||
verbose_(false),
|
||||
force_(false),
|
||||
binary_(false),
|
||||
unknown_(false),
|
||||
preserve_(false),
|
||||
timestamp_(false),
|
||||
timestampOnly_(false),
|
||||
fileExistsPolicy_(askPolicy),
|
||||
adjust_(false),
|
||||
printMode_(pmSummary),
|
||||
printItems_(0),
|
||||
action_(0),
|
||||
target_(ctExif|ctIptc|ctComment),
|
||||
adjustment_(0),
|
||||
@ -184,6 +205,7 @@ private:
|
||||
int evalRename(int opt, const std::string& optarg);
|
||||
int evalAdjust(const std::string& optarg);
|
||||
int evalPrint(const std::string& optarg);
|
||||
int evalPrintCols(const std::string& optarg);
|
||||
int evalDelete(const std::string& optarg);
|
||||
int evalExtract(const std::string& optarg);
|
||||
int evalInsert(const std::string& optarg);
|
||||
|
||||
@ -4,9 +4,9 @@ Added key "Exif.Image.PrimaryChromaticities", value "1/2 1/3 2/3 3/4"
|
||||
Modified key "Exif.Image.PrimaryChromaticities", new value "2000:12:31 23:59:59"
|
||||
Modified key "Exif.Image.PrimaryChromaticities", new value "1/2 1/3 88/77 3/4"
|
||||
Deleted key "Exif.Image.PrimaryChromaticities"
|
||||
0x0110 IFD0 Model Ascii 7 Test 1
|
||||
0x0115 IFD0 SamplesPerPixel Short 1 162
|
||||
0x011a IFD0 XResolution SLong 1 -2
|
||||
0x011b IFD0 YResolution SRational 1 -2/3
|
||||
0x8769 IFD0 ExifTag Long 1 89
|
||||
0x9003 Exif DateTimeOriginal Ascii 20 2000:12:31 23:59:59
|
||||
0x0110 Image Model Ascii 7 Test 1
|
||||
0x0115 Image SamplesPerPixel Short 1 162
|
||||
0x011a Image XResolution SLong 1 -2
|
||||
0x011b Image YResolution SRational 1 -2/3
|
||||
0x8769 Image ExifTag Long 1 89
|
||||
0x9003 Photo DateTimeOriginal Ascii 20 2000:12:31 23:59:59
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -14,49 +14,49 @@ File 1/1: exiv2-empty.jpg
|
||||
Iptc.Application2.Credit String 12 mee too! (1)
|
||||
Iptc.Application2.Headline String 8 Headline
|
||||
File 1/2: exiv2-empty.jpg
|
||||
exiv2-empty.jpg Exif.Image.DateTime Ascii 19 Zwanzig nach fuenf
|
||||
exiv2-empty.jpg Exif.Image.Artist Ascii 17 Vincent van Gogh
|
||||
exiv2-empty.jpg Exif.Image.WhitePoint Short 5 32 12 4 5 6
|
||||
exiv2-empty.jpg Exif.Image.ExifTag Long 1 108
|
||||
exiv2-empty.jpg Exif.Photo.UserComment Undefined 37 This is an ASCII Exif comment
|
||||
exiv2-empty.jpg Exif.Image.DateTime Ascii 19 Zwanzig nach fuenf
|
||||
exiv2-empty.jpg Exif.Image.Artist Ascii 17 Vincent van Gogh
|
||||
exiv2-empty.jpg Exif.Image.WhitePoint Short 5 32 12 4 5 6
|
||||
exiv2-empty.jpg Exif.Image.ExifTag Long 1 108
|
||||
exiv2-empty.jpg Exif.Photo.UserComment Undefined 37 This is an ASCII Exif comment
|
||||
File 2/2: exiv2-gc.jpg
|
||||
exiv2-gc.jpg Exif.Image.ImageDescription Ascii 18 Exif JPEG
|
||||
exiv2-gc.jpg Exif.Image.Make Ascii 8 Camera
|
||||
exiv2-gc.jpg Exif.Image.Model Ascii 16 DC-4300
|
||||
exiv2-gc.jpg Exif.Image.Orientation Short 1 top, left
|
||||
exiv2-gc.jpg Exif.Image.XResolution Rational 1 72
|
||||
exiv2-gc.jpg Exif.Image.YResolution Rational 1 72
|
||||
exiv2-gc.jpg Exif.Image.ResolutionUnit Short 1 inch
|
||||
exiv2-gc.jpg Exif.Image.Software Ascii 22 Exiv2 utility!!
|
||||
exiv2-gc.jpg Exif.Image.DateTime Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Image.YCbCrPositioning Short 1 Co-sited
|
||||
exiv2-gc.jpg Exif.Image.ExifTag Long 1 6480
|
||||
exiv2-gc.jpg Exif.Photo.ExposureTime Rational 1 1/95 s
|
||||
exiv2-gc.jpg Exif.Photo.FNumber Rational 1 F9.1
|
||||
exiv2-gc.jpg Exif.Photo.ExposureProgram Short 1 Landscape mode
|
||||
exiv2-gc.jpg Exif.Photo.ISOSpeedRatings Short 1 100
|
||||
exiv2-gc.jpg Exif.Photo.ExifVersion Undefined 4 48 50 49 48
|
||||
exiv2-gc.jpg Exif.Photo.DateTimeOriginal Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Photo.DateTimeDigitized Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Photo.ComponentsConfiguration Undefined 4 YCbCr
|
||||
exiv2-gc.jpg Exif.Photo.ShutterSpeedValue SRational 1 1/97 s
|
||||
exiv2-gc.jpg Exif.Photo.ApertureValue Rational 1 F9.2
|
||||
exiv2-gc.jpg Exif.Photo.ExposureBiasValue SRational 1 0
|
||||
exiv2-gc.jpg Exif.Photo.MaxApertureValue Rational 1 F2.9
|
||||
exiv2-gc.jpg Exif.Photo.MeteringMode Short 1 Matrix
|
||||
exiv2-gc.jpg Exif.Photo.LightSource Short 1 Unknown
|
||||
exiv2-gc.jpg Exif.Photo.Flash Short 1 No
|
||||
exiv2-gc.jpg Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48
|
||||
exiv2-gc.jpg Exif.Photo.ColorSpace Short 1 sRGB
|
||||
exiv2-gc.jpg Exif.Photo.PixelXDimension Long 1 1600
|
||||
exiv2-gc.jpg Exif.Photo.PixelYDimension Long 1 2400
|
||||
exiv2-gc.jpg Exif.Photo.InteroperabilityTag Long 1 6738
|
||||
exiv2-gc.jpg Exif.Photo.FileSource Undefined 1 Digital still camera
|
||||
exiv2-gc.jpg Exif.Iop.InteroperabilityIndex Ascii 4 R98
|
||||
exiv2-gc.jpg Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48
|
||||
exiv2-gc.jpg Exif.Thumbnail.ImageWidth Long 1 133
|
||||
exiv2-gc.jpg Exif.Thumbnail.ImageLength Long 1 200
|
||||
exiv2-gc.jpg Exif.Thumbnail.Compression Short 1 JPEG
|
||||
exiv2-gc.jpg Exif.Thumbnail.Orientation Short 1 top, left
|
||||
exiv2-gc.jpg Exif.Thumbnail.JPEGInterchangeFormat Long 1 0
|
||||
exiv2-gc.jpg Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 6144
|
||||
exiv2-gc.jpg Exif.Image.ImageDescription Ascii 18 Exif JPEG
|
||||
exiv2-gc.jpg Exif.Image.Make Ascii 8 Camera
|
||||
exiv2-gc.jpg Exif.Image.Model Ascii 16 DC-4300
|
||||
exiv2-gc.jpg Exif.Image.Orientation Short 1 top, left
|
||||
exiv2-gc.jpg Exif.Image.XResolution Rational 1 72
|
||||
exiv2-gc.jpg Exif.Image.YResolution Rational 1 72
|
||||
exiv2-gc.jpg Exif.Image.ResolutionUnit Short 1 inch
|
||||
exiv2-gc.jpg Exif.Image.Software Ascii 22 Exiv2 utility!!
|
||||
exiv2-gc.jpg Exif.Image.DateTime Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Image.YCbCrPositioning Short 1 Co-sited
|
||||
exiv2-gc.jpg Exif.Image.ExifTag Long 1 6480
|
||||
exiv2-gc.jpg Exif.Photo.ExposureTime Rational 1 1/95 s
|
||||
exiv2-gc.jpg Exif.Photo.FNumber Rational 1 F9.1
|
||||
exiv2-gc.jpg Exif.Photo.ExposureProgram Short 1 Landscape mode
|
||||
exiv2-gc.jpg Exif.Photo.ISOSpeedRatings Short 1 100
|
||||
exiv2-gc.jpg Exif.Photo.ExifVersion Undefined 4 48 50 49 48
|
||||
exiv2-gc.jpg Exif.Photo.DateTimeOriginal Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Photo.DateTimeDigitized Ascii 20 2004:06:08 16:04:50
|
||||
exiv2-gc.jpg Exif.Photo.ComponentsConfiguration Undefined 4 YCbCr
|
||||
exiv2-gc.jpg Exif.Photo.ShutterSpeedValue SRational 1 1/97 s
|
||||
exiv2-gc.jpg Exif.Photo.ApertureValue Rational 1 F9.2
|
||||
exiv2-gc.jpg Exif.Photo.ExposureBiasValue SRational 1 0
|
||||
exiv2-gc.jpg Exif.Photo.MaxApertureValue Rational 1 F2.9
|
||||
exiv2-gc.jpg Exif.Photo.MeteringMode Short 1 Matrix
|
||||
exiv2-gc.jpg Exif.Photo.LightSource Short 1 Unknown
|
||||
exiv2-gc.jpg Exif.Photo.Flash Short 1 No
|
||||
exiv2-gc.jpg Exif.Photo.FlashpixVersion Undefined 4 48 49 48 48
|
||||
exiv2-gc.jpg Exif.Photo.ColorSpace Short 1 sRGB
|
||||
exiv2-gc.jpg Exif.Photo.PixelXDimension Long 1 1600
|
||||
exiv2-gc.jpg Exif.Photo.PixelYDimension Long 1 2400
|
||||
exiv2-gc.jpg Exif.Photo.InteroperabilityTag Long 1 6738
|
||||
exiv2-gc.jpg Exif.Photo.FileSource Undefined 1 Digital still camera
|
||||
exiv2-gc.jpg Exif.Iop.InteroperabilityIndex Ascii 4 R98
|
||||
exiv2-gc.jpg Exif.Iop.InteroperabilityVersion Undefined 4 48 49 48 48
|
||||
exiv2-gc.jpg Exif.Thumbnail.ImageWidth Long 1 133
|
||||
exiv2-gc.jpg Exif.Thumbnail.ImageLength Long 1 200
|
||||
exiv2-gc.jpg Exif.Thumbnail.Compression Short 1 JPEG
|
||||
exiv2-gc.jpg Exif.Thumbnail.Orientation Short 1 top, left
|
||||
exiv2-gc.jpg Exif.Thumbnail.JPEGInterchangeFormat Long 1 0
|
||||
exiv2-gc.jpg Exif.Thumbnail.JPEGInterchangeFormatLength Long 1 6144
|
||||
|
||||
Loading…
Reference in New Issue
Block a user