[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:46:28 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=4c8158d

The following commit has been merged in the master branch:
commit 4c8158d1d1e499ab7a3d632a67fd35c388e9b497
Author: Robin Mills <robin at clanmills.com>
Date:   Wed May 11 07:22:36 2016 +0000

    #1183  Sample code: samples/toexv.cpp to support the article http://dev.exiv2.org/projects/exiv2/wiki/Guidance_about_serialising_metadata_using_MemIo_and_ExvImage_Classes
---
 samples/toexv.cpp | 112 +++++++++++++++++++++++++++++++++++++-----------------
 samples/toexv.hpp |   6 ++-
 2 files changed, 83 insertions(+), 35 deletions(-)

diff --git a/samples/toexv.cpp b/samples/toexv.cpp
index 44881f7..49ea123 100644
--- a/samples/toexv.cpp
+++ b/samples/toexv.cpp
@@ -33,6 +33,15 @@
 #include "utils.hpp"
 #include "toexv.hpp"
 
+static size_t exifMetadataCount(Exiv2::Image::AutoPtr& image)
+{
+	size_t result = 0 ;
+	Exiv2::ExifData&                  exif = image->exifData();
+	Exiv2::ExifData::const_iterator    end = exif.end();
+	for (Exiv2::ExifData::const_iterator i = exif.begin(); i != end; ++i) result++;
+	return result;
+}
+
 // *****************************************************************************
 // Main
 int main(int argc, char* const argv[])
@@ -47,40 +56,60 @@ int main(int argc, char* const argv[])
 		assert(readImage.get() != 0);
 		readImage->readMetadata();
 
-		Exiv2::Image::AutoPtr writeImage = Exiv2::ImageFactory::create(Exiv2::ImageType::exv,params.write_);
-		assert(writeImage.get() != 0);
-
-		if (params.all_    ) writeImage->setMetadata  (*readImage);
-		if (params.iptc_   ) writeImage->setIptcData  (readImage->iptcData());
-		if (params.exif_   ) writeImage->setExifData  (readImage->exifData());
-		if (params.ICC_    ) writeImage->setIccProfile(*readImage->iccProfile());
-		if (params.comment_) writeImage->setComment   (readImage->comment());
-		if (params.xmp_    ) writeImage->setXmpData   (readImage->xmpData());
-
-		writeImage->writeMetadata();
+		if ( params.write_ == "+" ) {
+			std::cout << "exifMetadataCount = " << exifMetadataCount(readImage) << std::endl;
+
+			// create an in-memory file and write the metadata
+			Exiv2::BasicIo::AutoPtr memIo   (new Exiv2::MemIo());
+			Exiv2::Image::AutoPtr   memImage(new Exiv2::ExvImage(memIo,true));
+			memImage->setMetadata  (*readImage);
+			memImage->writeMetadata();
+
+            // serialize the in-memory file into buff
+            size_t       size = memImage->io().size();
+			Exiv2::byte  buff[size];
+			memImage->io().seek(0,Exiv2::BasicIo::beg);
+			memImage->io().read(buff,size);
+
+			std::cout << "size = " << size << std::endl;
+
+			// create an in-memory file with buff and read the metadata into buffImage
+			Exiv2::BasicIo::AutoPtr buffIo   (new Exiv2::MemIo(buff,size));
+			Exiv2::Image::AutoPtr   buffImage(new Exiv2::ExvImage(buffIo,false));
+			assert(buffImage.get() != 0);
+			buffImage->readMetadata();
+
+			std::cout << "exifMetadataCount = " << exifMetadataCount(buffImage) << std::endl;
+
+		} else if ( params.write_ != "-" ) {
+			// create a file and write the metadata
+			Exiv2::Image::AutoPtr writeImage = Exiv2::ImageFactory::create(Exiv2::ImageType::exv,params.write_);
+			params.copyMetadata(readImage,writeImage);
+		} else {
+			// create an in-memory file
+			Exiv2::BasicIo::AutoPtr memIo   (new Exiv2::MemIo());
+			Exiv2::Image::AutoPtr   memImage(new Exiv2::ExvImage(memIo,true));
+			params.copyMetadata(readImage,memImage);
+
+			// read a few bytes from the in-memory file
+            size_t       size = memImage->io().size();
+            if (size>32) size = 32;
+			Exiv2::byte  data[size];
+
+			memImage->io().seek(0,Exiv2::BasicIo::beg);
+			memImage->io().read(data,size);
+
+			// dump the bytes
+			for ( size_t i = 0 ; i < size ; i++ ) {
+				char c = (char) data[i] ;
+				if ( !isascii(c) ) c = '.' ;
+				std::cout << c ;
+			}
+			std::cout << std::endl;
+		}
 
-		if ( params.size_ ) std::cout << params.write_ << " " << writeImage->io().size() << std::endl;
 		return 0;
 
-#if 0
-		// This is prototype code for working on writing metadata to memory
-		// This has been discussed with Andrea Ferrora (PhotoFlow)
-		// And useful for sending the exv to a webservice.
-		uint32_t     size = 54321;
-		Exiv2::byte  data[size];
-		Exiv2::BasicIo::AutoPtr memIo   (new Exiv2::MemIo(data,size));
-		Exiv2::Image::AutoPtr   memImage(new Exiv2::ExvImage(memIo,true));
-		memImage->setMetadata(*image);
-		std::cout << "wrote " << memImage->writeMetadata() << std::endl;
-
-		for ( size_t i = 0 ; i < 20 ; i++ ) {
-			char c = (char) data[i] ;
-			if ( c < 32 || c > 127 ) c = '.' ;
-			std::cout <<  c;
-		}
-		std::cout << std::endl;
-#endif
-
 	} catch (Exiv2::AnyError& e) {
 		std::cerr << "Caught Exiv2 exception '" << e << "'
";
 		return 3;
@@ -98,8 +127,21 @@ Params::Params( const char* opts)
 , comment_(false)
 , xmp_(false)
 , size_(false)
+, usage_(false)
 {}
 
+void Params::copyMetadata(Exiv2::Image::AutoPtr& readImage,Exiv2::Image::AutoPtr& writeImage)
+{
+	if (all_    ) writeImage->setMetadata  (*readImage);
+	if (iptc_   ) writeImage->setIptcData  ( readImage->iptcData());
+	if (exif_   ) writeImage->setExifData  ( readImage->exifData());
+	if (ICC_    ) writeImage->setIccProfile(*readImage->iccProfile());
+	if (comment_) writeImage->setComment   ( readImage->comment());
+	if (xmp_    ) writeImage->setXmpData   ( readImage->xmpData());
+
+	writeImage->writeMetadata();
+	if ( size_ ) std::cout << write_ << " " << writeImage->io().size() << std::endl;
+}
 
 int Params::option(int opt, const std::string& /*optarg*/, int optopt)
 {
@@ -150,8 +192,9 @@ int Params::nonoption(const std::string& argv)
 int Params::getopt(int argc, char* const argv[])
 {
     int rc = Util::Getopt::getopt(argc, argv, optstring_);
+    if ( argc == 1 ) usage_ = true;
     // Further consistency checks
-    if (help_==false) {
+    if ( !help_ && !usage_ ) {
         if (rc==0 && read_.empty() ) {
             std::cerr << progname() << ": Read and write files must be specified
";
             rc = 1;
@@ -162,15 +205,16 @@ int Params::getopt(int argc, char* const argv[])
         }
     }
     if ( argc == 3 ) { all_ = true; size_ = true; }
+    if ( usage_ ) return 2 ;
     return rc;
 }
 
 int Params::usage(std::ostream& os) const
 {
-    os << "
Reads and writes raw metadata. Use -h option for help.
"
+    os << "Reads and writes raw metadata. Use -h option for help.
"
        << "Usage: " << progname()
        << " [-" << optstring_ << "]"
-       << " readfile writefile
";
+       << " readfile {-|+|writefile}
";
     return 2;
 }
 
diff --git a/samples/toexv.hpp b/samples/toexv.hpp
index 1178c82..e5b2e5f 100644
--- a/samples/toexv.hpp
+++ b/samples/toexv.hpp
@@ -37,7 +37,8 @@ public:
     bool all_ ;                    //!< All option flag
     bool comment_;                 //!< JPEG comment option flag.
     bool xmp_;                     //!< XMP option flag.
-    bool size_    ;                //!< Size option flag.
+    bool size_;                    //!< Size option flag.
+    bool usage_;                   //!< Usage option flag.
     std::string read_;             //!< Source file
     std::string write_;            //!< Destination file
 
@@ -71,6 +72,9 @@ public:
     //! Print further usage explanations to an output stream.
     int help(std::ostream& os =std::cout) const;
 
+    //! copy metadata from one image to another.
+	void copyMetadata(Exiv2::Image::AutoPtr& readImage,Exiv2::Image::AutoPtr& writeImage);
+
 }; // class Params
 
 #endif // _TOEXV_HPP_

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list