[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a
Maximiliano Curia
maxy at moszumanska.debian.org
Thu Jul 13 17:36:51 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=e99ecbd
The following commit has been merged in the master branch:
commit e99ecbd34568440e5974c3b8e18e6716a925b0c8
Author: Andreas Huggel <ahuggel at gmx.net>
Date: Sat Dec 11 17:01:09 2004 +0000
Added delete targets for different types of metadata
Added insert thumbnail option
Various fixes
---
src/actions.cpp | 130 ++++++++++++++++++++++++++++++++++++-----------
src/actions.hpp | 20 +++++++-
src/exiv2.cpp | 42 ++++++++-------
test/data/exiv2-test.out | 70 ++++++++++++-------------
4 files changed, 175 insertions(+), 87 deletions(-)
diff --git a/src/actions.cpp b/src/actions.cpp
index 847f4fb..d96cf21 100644
--- a/src/actions.cpp
+++ b/src/actions.cpp
@@ -676,16 +676,38 @@ namespace Action {
int Erase::run(const std::string& path)
try {
path_ = path;
- Exiv2::ExifData exifData;
- int rc = exifData.read(path);
+
+ Exiv2::Image::AutoPtr image
+ = Exiv2::ImageFactory::instance().open(path_);
+ if (image.get() == 0) {
+ std::cerr << path_
+ << ": The file contains data of an unknown image type
";
+ return -2;
+ }
+ int rc = image->readMetadata();
if (rc) {
- std::cerr << Exiv2::ExifData::strError(rc, path) << "
";
- return rc;
+ std::cerr << Exiv2::ExifData::strError(rc, path_) << "
";
+ }
+ // Thumbnail must be before Exif
+ if (0 == rc && Params::instance().target_ & Params::ctThumb) {
+ rc = eraseThumbnail(image.get());
+ }
+ if (0 == rc && Params::instance().target_ & Params::ctExif) {
+ rc = eraseExifData(image.get());
+ }
+ if (0 == rc && Params::instance().target_ & Params::ctIptc) {
+ rc = eraseIptcData(image.get());
+ }
+ if (0 == rc && Params::instance().target_ & Params::ctComment) {
+ rc = eraseComment(image.get());
}
- switch (Params::instance().target_) {
- case Params::ctExif: rc = eraseExifData(exifData); break;
- case Params::ctThumb: rc = eraseThumbnail(exifData); break;
+ if (0 == rc) {
+ rc = image->writeMetadata();
+ if (rc) {
+ std::cerr << Exiv2::ExifData::strError(rc, path_) << "
";
+ }
}
+
return rc;
}
catch(const Exiv2::Error& e)
@@ -695,37 +717,57 @@ namespace Action {
return 1;
} // Erase::run
- int Erase::eraseThumbnail(Exiv2::ExifData& exifData) const
+ int Erase::eraseThumbnail(Exiv2::Image* image) const
{
+ if (image->sizeExifData() == 0) {
+ return 0;
+ }
int rc = 0;
- std::string thumbExt = exifData.thumbnailExtension();
- if (thumbExt.empty()) {
- std::cerr << path_ << ": Image does not contain an Exif thumbnail
";
+ Exiv2::ExifData exifData;
+ rc = exifData.read(image->exifData(), image->sizeExifData());
+ if (rc) {
+ std::cerr << Exiv2::ExifData::strError(rc, path_) << "
";
}
- else {
- long delta = exifData.eraseThumbnail();
- if (Params::instance().verbose_) {
- std::cout << "Erasing " << delta << " Bytes of thumbnail data"
- << std::endl;
- }
- rc = exifData.write(path_);
- if (rc) {
- std::cerr << Exiv2::ExifData::strError(rc, path_) << "
";
+ if (0 == rc) {
+ std::string thumbExt = exifData.thumbnailExtension();
+ if (!thumbExt.empty()) {
+ long delta = exifData.eraseThumbnail();
+ if (Params::instance().verbose_) {
+ std::cout << "Erasing " << delta
+ << " Bytes of thumbnail data" << std::endl;
+ }
+ Exiv2::DataBuf buf(exifData.copy());
+ image->setExifData(buf.pData_, buf.size_);
}
}
return rc;
}
- int Erase::eraseExifData(Exiv2::ExifData& exifData) const
+ int Erase::eraseExifData(Exiv2::Image* image) const
{
- if (Params::instance().verbose_) {
+ if (Params::instance().verbose_ && image->sizeExifData() > 0) {
std::cout << "Erasing Exif data from the file" << std::endl;
}
- int rc = exifData.erase(path_);
- if (rc) {
- std::cerr << Exiv2::ExifData::strError(rc, path_) << "
";
+ image->clearExifData();
+ return 0;
+ }
+
+ int Erase::eraseIptcData(Exiv2::Image* image) const
+ {
+ if (Params::instance().verbose_ && image->sizeIptcData() > 0) {
+ std::cout << "Erasing Iptc data from the file" << std::endl;
}
- return rc;
+ image->clearIptcData();
+ return 0;
+ }
+
+ int Erase::eraseComment(Exiv2::Image* image) const
+ {
+ if (Params::instance().verbose_ && image->comment().size() > 0) {
+ std::cout << "Erasing Jpeg comment from the file" << std::endl;
+ }
+ image->clearComment();
+ return 0;
}
Erase::AutoPtr Erase::clone() const
@@ -815,9 +857,19 @@ namespace Action {
int Insert::run(const std::string& path)
try {
- std::string exvPath = Util::dirname(path) + SEPERATOR_STR
- + Util::basename(path, true) + ".exv";
- return metacopy(exvPath, path);
+ int rc = 0;
+ if (Params::instance().target_ & Params::ctThumb) {
+ rc = insertThumbnail(path);
+ }
+ if ( rc == 0
+ && Params::instance().target_ & Params::ctExif
+ || Params::instance().target_ & Params::ctIptc
+ || Params::instance().target_ & Params::ctComment) {
+ std::string exvPath = Util::dirname(path) + SEPERATOR_STR
+ + Util::basename(path, true) + ".exv";
+ rc = metacopy(exvPath, path);
+ }
+ return rc;
}
catch(const Exiv2::Error& e)
{
@@ -826,6 +878,26 @@ namespace Action {
return 1;
} // Insert::run
+ int Insert::insertThumbnail(const std::string& path) const
+ {
+ std::string thumbPath = Util::dirname(path) + SEPERATOR_STR
+ + Util::basename(path, true) + "-thumb.jpg";
+ if (!Util::fileExists(thumbPath, true)) {
+ std::cerr << thumbPath
+ << ": Failed to open the file
";
+ return -1;
+ }
+ Exiv2::ExifData exifData;
+ int rc = exifData.read(path);
+ if (rc) {
+ std::cerr << Exiv2::ExifData::strError(rc, path) << "
";
+ return rc;
+ }
+ exifData.setJpegThumbnail(thumbPath);
+ return exifData.write(path);
+
+ } // Insert::insertThumbnail
+
Insert::AutoPtr Insert::clone() const
{
return AutoPtr(clone_());
diff --git a/src/actions.hpp b/src/actions.hpp
index 9b02083..7bf100f 100644
--- a/src/actions.hpp
+++ b/src/actions.hpp
@@ -42,6 +42,7 @@
namespace Exiv2 {
class ExifData;
+ class Image;
}
// *****************************************************************************
@@ -222,11 +223,19 @@ namespace Action {
/*!
@brief Delete the thumbnail image, incl IFD1 metadata from the file.
*/
- int eraseThumbnail(Exiv2::ExifData& exifData) const;
+ int eraseThumbnail(Exiv2::Image* image) const;
/*!
@brief Erase the complete Exif data block from the file.
*/
- int eraseExifData(Exiv2::ExifData& exifData) const;
+ int eraseExifData(Exiv2::Image* image) const;
+ /*!
+ @brief Erase all Iptc data from the file.
+ */
+ int eraseIptcData(Exiv2::Image* image) const;
+ /*!
+ @brief Erase Jpeg comment from the file.
+ */
+ int eraseComment(Exiv2::Image* image) const;
private:
virtual Erase* clone_() const;
@@ -268,6 +277,13 @@ namespace Action {
typedef std::auto_ptr<Insert> AutoPtr;
AutoPtr clone() const;
+ /*!
+ @brief Insert a Jpeg thumbnail image from a file into file \path.
+ The filename of the thumbanail is expected to be the image
+ filename (\em path) minus its suffix plus "-thumb.jpg".
+ */
+ int insertThumbnail(const std::string& path) const;
+
private:
virtual Insert* clone_() const;
diff --git a/src/exiv2.cpp b/src/exiv2.cpp
index 2a13d28..8ff6837 100644
--- a/src/exiv2.cpp
+++ b/src/exiv2.cpp
@@ -162,17 +162,18 @@ void Params::help(std::ostream& os) const
<< " h : hexdump of the Exif data
"
<< " i : Iptc data values
"
<< " c : Jpeg comment
"
- << " -d tgt Delete target for the `delete' action. Possible targets are
"
- << " `e' to delete the whole Exif section (the default) and `t'
"
- << " to delete only the Exif thumbnail from the files.
"
- << " -i tgt Insert target(s) for the `insert' action. Possible targets are:
"
- << " a : all supported metadata (default)
"
- << " e : Exif data
"
+ << " -d tgt Delete target(s) for the `delete' action. Possible targets are:
"
+ << " a : all supported metadata (the default)
"
+ << " e : Exif section
"
+ << " t : Exif thumbnail only
"
<< " i : Iptc data
"
<< " c : Jpeg comment
"
+ << " to delete only the Exif thumbnail from the files.
"
+ << " -i tgt Insert target(s) for the `insert' action. Possible targets are
"
+ << " the same as those for the -d option. Only Jpeg thumbnails can
"
+ << " <file>-thumb.jpg can be inserted.
"
<< " -e tgt Extract target(s) for the `extract' action. Possible targets
"
- << " are the same as those for the -i option plus:
"
- << " t : extract the Exif thumbnail to an image file
"
+ << " 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 "
<< format_ << ".
";
@@ -258,20 +259,18 @@ int Params::option(int opt, const std::string& optarg, int optopt)
switch (action_) {
case Action::none:
action_ = Action::erase;
- switch (optarg[0]) {
- case 'e': target_ = ctExif; break;
- case 't': target_ = ctThumb; break;
- default:
- std::cerr << progname() << ": Unrecognized delete target `"
- << optarg << "'
";
+ target_ = 0;
+ // fallthrough
+ case Action::erase:
+ rc = parseCommonTargets(optarg, "erase");
+ if (rc > 0) {
+ target_ |= rc;
+ rc = 0;
+ }
+ else {
rc = 1;
- break;
}
break;
- case Action::erase:
- std::cerr << progname()
- << ": Ignoring surplus option -d" << optarg << "
";
- break;
default:
std::cerr << progname()
<< ": Option -d is not compatible with a previous option
";
@@ -378,7 +377,6 @@ int Params::nonoption(const std::string& argv)
}
action = true;
action_ = Action::erase;
- target_ = ctExif;
}
if (argv == "ex" || argv == "extract") {
if (action_ != Action::none && action_ != Action::extract) {
@@ -489,7 +487,7 @@ namespace {
{
int rc = 0;
int target = 0;
- for (size_t i = 0; i < optarg.size(); ++i) {
+ for (size_t i = 0; rc == 0 && i < optarg.size(); ++i) {
switch (optarg[i]) {
case 'e': target |= Params::ctExif; break;
case 'i': target |= Params::ctIptc; break;
@@ -500,7 +498,7 @@ namespace {
| Params::ctComment; break;
default:
std::cerr << Params::instance().progname() << ": Unrecognized "
- << action << " target `" << optarg << "'
";
+ << action << " target `" << optarg[i] << "'
";
rc = -1;
break;
}
diff --git a/test/data/exiv2-test.out b/test/data/exiv2-test.out
index 83635ca..5e8d9df 100644
--- a/test/data/exiv2-test.out
+++ b/test/data/exiv2-test.out
@@ -37,17 +37,18 @@ Options:
h : hexdump of the Exif data
i : Iptc data values
c : Jpeg comment
- -d tgt Delete target for the `delete' action. Possible targets are
- `e' to delete the whole Exif section (the default) and `t'
- to delete only the Exif thumbnail from the files.
- -i tgt Insert target(s) for the `insert' action. Possible targets are:
- a : all supported metadata (default)
- e : Exif data
+ -d tgt Delete target(s) for the `delete' action. Possible targets are:
+ a : all supported metadata (the default)
+ e : Exif section
+ t : Exif thumbnail only
i : Iptc data
c : Jpeg comment
+ to delete only the Exif thumbnail from the files.
+ -i tgt Insert target(s) for the `insert' action. Possible targets are
+ the same as those for the -d option. Only Jpeg thumbnails can
+ <file>-thumb.jpg can be inserted.
-e tgt Extract target(s) for the `extract' action. Possible targets
- are the same as those for the -i option plus:
- t : extract the Exif thumbnail to an image file
+ 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.
@@ -991,63 +992,64 @@ Compare image data and extracted data ------------------------------------
Delete Thumbnail ---------------------------------------------------------
File 1/9: exiv2-empty.jpg
-exiv2-empty.jpg: No Exif data found in the file
File 2/9: 20031214_000043.jpg
-Erasing Exif data from the file
+Erasing 6200 Bytes of thumbnail data
File 3/9: 20000506_020544.jpg
-Erasing Exif data from the file
+Erasing 7923 Bytes of thumbnail data
File 4/9: 20040329_224245.jpg
-Erasing Exif data from the file
+Erasing 9038 Bytes of thumbnail data
File 5/9: 20010405_235039.jpg
-Erasing Exif data from the file
+Erasing 4756 Bytes of thumbnail data
File 6/9: 20030925_201850.jpg
Warning: Upper boundary of data for Makernote entry 25 is out of bounds:
Offset = 1384, size = 48, exceeds buffer size by 24 Bytes; Truncating the data.
-Erasing Exif data from the file
+Erasing 9858 Bytes of thumbnail data
File 7/9: 20001026_044550.jpg
-Erasing Exif data from the file
+Erasing 20910 Bytes of thumbnail data
File 8/9: 20030926_111535.jpg
-Erasing Exif data from the file
+Erasing 9696 Bytes of thumbnail data
File 9/9: 20040316_075137.jpg
-Erasing Exif data from the file
+Erasing 12104 Bytes of thumbnail data
File 1/9: exiv2-empty.jpg
exiv2-empty.jpg: No Exif data found in the file
File 2/9: 20031214_000043.jpg
-20031214_000043.jpg: No Exif data found in the file
+20031214_000043.jpg: Image does not contain an Exif thumbnail
File 3/9: 20000506_020544.jpg
-20000506_020544.jpg: No Exif data found in the file
+20000506_020544.jpg: Image does not contain an Exif thumbnail
File 4/9: 20040329_224245.jpg
-20040329_224245.jpg: No Exif data found in the file
+20040329_224245.jpg: Image does not contain an Exif thumbnail
File 5/9: 20010405_235039.jpg
-20010405_235039.jpg: No Exif data found in the file
+20010405_235039.jpg: Image does not contain an Exif thumbnail
File 6/9: 20030925_201850.jpg
-20030925_201850.jpg: No Exif data found in the file
+Warning: Upper boundary of data for Makernote entry 25 is out of bounds:
+ Offset = 1384, size = 48, exceeds buffer size by 24 Bytes; Truncating the data.
+20030925_201850.jpg: Image does not contain an Exif thumbnail
File 7/9: 20001026_044550.jpg
-20001026_044550.jpg: No Exif data found in the file
+20001026_044550.jpg: Image does not contain an Exif thumbnail
File 8/9: 20030926_111535.jpg
-20030926_111535.jpg: No Exif data found in the file
+20030926_111535.jpg: Image does not contain an Exif thumbnail
File 9/9: 20040316_075137.jpg
-20040316_075137.jpg: No Exif data found in the file
+20040316_075137.jpg: Image does not contain an Exif thumbnail
Delete Exif data ---------------------------------------------------------
File 1/9: exiv2-empty.jpg
-exiv2-empty.jpg: No Exif data found in the file
File 2/9: 20031214_000043.jpg
-20031214_000043.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 3/9: 20000506_020544.jpg
-20000506_020544.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 4/9: 20040329_224245.jpg
-20040329_224245.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 5/9: 20010405_235039.jpg
-20010405_235039.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 6/9: 20030925_201850.jpg
-20030925_201850.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 7/9: 20001026_044550.jpg
-20001026_044550.jpg: No Exif data found in the file
+Erasing Exif data from the file
+Erasing Jpeg comment from the file
File 8/9: 20030926_111535.jpg
-20030926_111535.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 9/9: 20040316_075137.jpg
-20040316_075137.jpg: No Exif data found in the file
+Erasing Exif data from the file
File 1/9: exiv2-empty.jpg
exiv2-empty.jpg: No Exif data found in the file
File 2/9: 20031214_000043.jpg
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list