diff --git a/src/actions.cpp b/src/actions.cpp index 19fd2100..96a977fc 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -1020,6 +1020,16 @@ namespace Action { assert(image_.get() != 0); image_->readMetadata(); + if (!Params::instance().jpegComment_.empty()) { + if (Params::instance().verbose_) { + std::cout << "Setting Jpeg comment '" + << Params::instance().jpegComment_ + << "'" + << std::endl; + } + image_->setComment(Params::instance().jpegComment_); + } + // loop through command table and apply each command ModifyCmds& modifyCmds = Params::instance().modifyCmds_; ModifyCmds::const_iterator i = modifyCmds.begin(); diff --git a/src/exiv2.1 b/src/exiv2.1 index 85883fd6..e6c98347 100644 --- a/src/exiv2.1 +++ b/src/exiv2.1 @@ -54,7 +54,7 @@ Adjust EXIF timestamps by the given time. This action requires the option .TP .B mo | modify Apply commands to modify (add, set, delete) the EXIF/IPTC metadata of image -files. Requires option \fB\-m\fP or \fB\-M\fP. +files. Requires option \fB\-c\fP, \fB\-m\fP or \fB\-M\fP. .TP .B mv | rename Rename files and/or set file timestamps according to the EXIF create @@ -139,18 +139,21 @@ those for the \fB\-d\fP option. Filename format for the 'rename' action. The format string follows \fBstrftime\fP(3). Default filename format is %Y%m%d_%H%M%S. .TP +.B \-c \fItxt\fP +Jpeg comment string to set in the image ('modify' action). +.TP .B \-m \fIfile\fP -Command file for the modify action. +Command file for the 'modify' action. .TP .B \-M \fIcmd\fP -Command line for the modify action. The format for the commands is the same +Command line for the 'modify' action. The format for the commands is the same as that of the lines of a command file. .TP .B \-l \fIdir\fP Location (directory) for files to be inserted or extracted. .TP .B \-S \fI.suf\fP -Use suffix \fI.suf\fP for source files for insert command. +Use suffix \fI.suf\fP for source files in 'insert' action. .SH COMMANDS Commands for the 'modify' action can be read from a command file, e.g., .sp 1 diff --git a/src/exiv2.cpp b/src/exiv2.cpp index 9b71e907..e658fa43 100644 --- a/src/exiv2.cpp +++ b/src/exiv2.cpp @@ -197,8 +197,9 @@ void Params::help(std::ostream& os) const << " mv | rename Rename files and/or set file timestamps according to the\n" << " Exif create timestamp. The filename format can be set with\n" << " -r format, timestamp options are controlled with -t and -T.\n" - << " mo | modify Apply commands to modify (add, set, delete) the Exif\n" - << " and Iptc metadata of image files. Requires option -m or -M.\n" + << " mo | modify Apply commands to modify (add, set, delete) the Exif and\n" + << " Iptc metadata of image files or set the Jpeg comment.\n" + << " Requires option -c, -m or -M.\n" << "\nOptions:\n" << " -h Display this help and exit.\n" << " -V Show the program version and exit.\n" @@ -232,6 +233,7 @@ void Params::help(std::ostream& os) const << " -r fmt Filename format for the 'rename' action. The format string\n" << " follows strftime(3). Default filename format is " << format_ << ".\n" + << " -c txt Jpeg comment string to set in the image.\n" << " -m file Command file for the modify action. The format for commands is\n" << " set|add|del [[] ].\n" << " -M cmd Command line for the modify action. The format for the\n" @@ -258,6 +260,7 @@ int Params::option(int opt, const std::string& optarg, int optopt) case 'd': rc = evalDelete(optarg); break; case 'e': rc = evalExtract(optarg); break; case 'i': rc = evalInsert(optarg); break; + case 'c': rc = evalModify(opt, optarg); break; case 'm': rc = evalModify(opt, optarg); break; case 'M': rc = evalModify(opt, optarg); break; case 'l': directory_ = optarg; break; @@ -458,6 +461,7 @@ int Params::evalModify(int opt, const std::string& optarg) action_ = Action::modify; // fallthrough case Action::modify: + if (opt == 'c') jpegComment_ = optarg; if (opt == 'm') cmdFiles_.push_back(optarg); // parse the files later if (opt == 'M') cmdLines_.push_back(optarg); // parse the commands later break; @@ -567,9 +571,10 @@ int Params::getopt(int argc, char* const argv[]) << ": Adjust action requires option -a time\n"; rc = 1; } - if (action_ == Action::modify && cmdFiles_.empty() && cmdLines_.empty()) { + if ( action_ == Action::modify + && cmdFiles_.empty() && cmdLines_.empty() && jpegComment_.empty()) { std::cerr << progname() - << ": Modify action requires at least one -m or -M option\n"; + << ": Modify action requires at least one -c, -m or -M option\n"; rc = 1; } if (0 == files_.size()) { diff --git a/src/exiv2.hpp b/src/exiv2.hpp index 70462b04..6141212a 100644 --- a/src/exiv2.hpp +++ b/src/exiv2.hpp @@ -149,6 +149,7 @@ public: CmdFiles cmdFiles_; //!< Names of the modification command files CmdLines cmdLines_; //!< Commands from the command line ModifyCmds modifyCmds_; //!< Parsed modification commands + std::string jpegComment_; //!< Jpeg comment to set in the image std::string directory_; //!< Location for files to extract/insert std::string suffix_; //!< File extension of the file to insert Files files_; //!< List of non-option arguments. @@ -158,7 +159,7 @@ 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:m:M:l:S:"), + Params() : optstring_(":hVvfktTFa:r:p:d:e:i:c:m:M:l:S:"), help_(false), version_(false), verbose_(false), diff --git a/test/data/exiv2-test.out b/test/data/exiv2-test.out index 04711c92..6e2674e9 100644 --- a/test/data/exiv2-test.out +++ b/test/data/exiv2-test.out @@ -24,8 +24,8 @@ Actions: mv | rename Rename files and/or set file timestamps according to the Exif create timestamp. The filename format can be set with -r format, timestamp options are controlled with -t and -T. - mo | modify Apply commands to modify (add, set, delete) the Exif - and Iptc metadata of image files. Requires option -m or -M. + mo | modify Apply commands to modify (add, set, delete) the Exif and + Iptc metadata of image files. Requires option -c, -m or -M. Options: -h Display this help and exit. @@ -59,6 +59,7 @@ Options: are the same as those for the -d option. -r fmt Filename format for the 'rename' action. The format string follows strftime(3). Default filename format is %Y%m%d_%H%M%S. + -c txt Jpeg comment string to set in the image. -m file Command file for the modify action. The format for commands is set|add|del [[] ]. -M cmd Command line for the modify action. The format for the