From b65625759caa70c8905f63b87a36e59951ed24fd Mon Sep 17 00:00:00 2001
From: Alan Jack Pippin <ajp@pippin.(none)>
Date: Sun, 14 Oct 2007 23:59:42 -0600
Subject: [PATCH] Finishing touches on initial support for watermarking video
 thumbnails

---
 ItemAddEmbedVideo.inc                         | 123 +++++++++++++++++-
 images/G2video_watermark1.png                 | Bin 0 -> 2134 bytes
 ...o_watermark.gif => G2video_watermark2.gif} | Bin
 module.inc                                    |  10 +-
 templates/EmbedVideoSiteAdmin.tpl             |   7 +
 5 files changed, 137 insertions(+), 3 deletions(-)
 create mode 100644 images/G2video_watermark1.png
 rename images/{G2video_watermark.gif => G2video_watermark2.gif} (100%)

diff --git a/ItemAddEmbedVideo.inc b/ItemAddEmbedVideo.inc
index 3a1fa79..03a54e9 100644
--- a/ItemAddEmbedVideo.inc
+++ b/ItemAddEmbedVideo.inc
@@ -70,6 +70,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   global $debugOutput, $useInternalFlvPlayer, $youtubeDevId;
 	   global $width, $height, $externalFlvPlayer, $externalFlvPlayerVars;
 	   global $flvThumbnail, $useRemoteSize, $autoStart;
+	   global $watermarkVideos, $watermarkImage;
 
 	   /* Find out what value our parameters should have by looking to see if they
             * are defined in our overrides section or default section. If they are not
@@ -86,6 +87,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   $flvThumbnail = $this->getParameter($ItemAddEmbedVideo, 'flvThumbnail', "");
 	   $useRemoteSize = $this->getParameter($ItemAddEmbedVideo, 'useRemoteSize', "false");
 	   $autoStart = $this->getParameter($ItemAddEmbedVideo, 'autoStart', "false");
+	   $watermarkImage = $this->getParameter($ItemAddEmbedVideo, 'watermarkImage', "");
+	   $watermarkVideos = $this->getParameter($ItemAddEmbedVideo, 'watermarkVideos', "false");
 
 	   /* Print our stored/set Parameters */
 	   if(!strcmp($debugOutput,"true")) {
@@ -102,6 +105,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	     print "flvThumbnail=$flvThumbnail<br>";
 	     print "useRemoteSize=$useRemoteSize<br>";
 	     print "autoStart=$autoStart<br>";
+	     print "watermarkVideos=$watermarkVideos<br>";
+	     print "watermarkImage=$watermarkImage<br>";
 	     print "<hr>";
 	   }
 
@@ -132,7 +137,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   /* Gallery2 specific paths and variables */
 	   $urlGenerator =& $gallery->getUrlGenerator();
 	   $gallery2_url = $urlGenerator->getCurrentUrlDir();
-	   $gallery2_flv_thumbnail = "modules/thumbnail/images/G2video.jpg";
+	   $gallery2_flv_thumbnail = "modules/embedvideo/images/G2video_thumbnail.jpg";
+	   $gallery2_video_watermark = "modules/embedvideo/images/G2video_watermark1.png";
 	   $gallery2_flv_player = "modules/flashvideo/lib/G2flv.swf";
 	   
 	   /* Store the passed URL in a shorter local variable */
@@ -643,6 +649,121 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	       print "$debugString";
 	       print "<hr>";
 	   }
+
+	   /* Watermark the video thumbnail image if indicated by our parameter */
+	   if(!strcmp($watermarkVideos,"true")) {
+	     
+	     /*
+	      * If no watermarkImage parameter is set, set it to a default value.
+	      */
+	     if(preg_match("/\w+/", $watermarkImage)) {
+	       $watermarkImage = $watermarkImage;
+	     } else {
+	       $watermarkImage = $gallery2_url.$gallery2_video_watermark;
+	     }
+
+	     /* Get the watermark Image Extension */
+	     preg_match('/\.(...)$/', $watermarkImage, $matches);
+	     $watermarkExt=$matches[1];
+	     
+	     /*
+	      * Check to make sure the URL to the watermark image file is valid
+	      * (That the file exists at the URL given)
+	      */
+	     list ($successfullyCopied, $response, $headers) =
+	       $this->fetchWebFileHeaders($watermarkImage, $extraHeaders);
+	     if (!$successfullyCopied) {
+	       return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+			    "Unable to find the watermark image at url: $watermarkImage - $response"),NULL,NULL);
+	     }
+	     
+	     /* Download the watermark image to a local file */
+	     $tmpDir = $gallery->getConfig('data.gallery.tmp');
+	     $watermark = $platform->tempnam($tmpDir, 'wmk_img_');
+	     $watermark.= "." . $watermarkExt;
+	     list ($successfullyCopied, $response, $headers) =
+	       GalleryCoreApi::fetchWebFile($watermarkImage, $watermark, $extraHeaders);
+	     if (!$successfullyCopied) {
+	       return array(GalleryCoreApi::error(ERROR_STORAGE_FAILURE,__FILE__,__LINE__,
+			    "Unable to copy watermark image from url: $watermarkImage - $response"),null,null);
+	     }
+	     
+	     /* See if there is a toolkit installed that can perform a composite operation */
+	     list ($ret, $toolkit) = GalleryCoreApi::getToolkitByOperation($mimeType, 'composite');
+	     if ($ret) {
+	       return array($ret->wrap(__FILE__, __LINE__,
+		      "Unable to locate a toolkit module to perform the 'composite' watermark operation"), null);
+	     }
+
+	     /* Make sure we can access the toolkit found */
+	     if (!isset($toolkit)) {
+	       return array(GalleryStatus::error(ERROR_PERMISSION_DENIED, __FILE__, __LINE__,
+		      "Unable to access the toolkit module to perform the 'composite' watermark operation"), null);
+	     }
+	     
+	     /* Get the image dimensions of the thumbnail */
+	     $image_data = @getimagesize($newTmpFile);
+	     if(!$image_data) {
+	       return array(GalleryCoreApi::error(ERROR_STORAGE_FAILURE,__FILE__,__LINE__,
+		      "Unable to retrieve thumbnail dimensions for: $tmpFile"),null,null);
+	     }
+	     $thumbnailWidth = $image_data[0];
+	     $thumbnailHeight = $image_data[1];
+
+	     /* Get the image dimensions of the watermark */
+	     $image_data = @getimagesize($watermark);
+	     if(!$image_data) {
+	       return array(GalleryCoreApi::error(ERROR_STORAGE_FAILURE,__FILE__,__LINE__,
+		      "Unable to retrieve watermark dimensions for: $tmpFile"),null,null);
+	     }
+	     $watermarkWidth = $image_data[0];
+	     $watermarkHeight = $image_data[1];
+
+	     /* Obtain the mimeType of the watermark */
+	     list ($ret, $watermarkMimeType) = GalleryCoreApi::getMimeType($watermark);
+
+	     /* Remove the gallery base path from the watermark image path */
+	     /* This has to be done to satisfy the argument requirement for the toolkit operation */
+	     $dataDir = $gallery->getConfig('data.gallery.base');
+	     $dataDir=preg_replace("/\//","\\/",$dataDir);
+	     preg_match("/$dataDir(.*)/", $watermark, $matches);
+	     $watermark = $matches[1];
+	     
+	     /* General debug output */
+	     if(!strcmp($debugOutput,"true")) {
+	       print "<h2>Watermark Operation</h2>";
+	       print "watermarkImage: $watermarkImage <br>";
+	       print "watermarkTmpImage: $watermark <br>";
+	       print "watermarkMimeType: $watermarkMimeType <br>";
+	       print "watermarkWidth: $watermarkWidth <br>";
+	       print "watermarkHeight: $watermarkHeight <br>";
+	       print "watermarkedWidth: $thumbnailWidth <br>";
+	       print "watermarkedHeight: $thumbnailHeight <br>";
+	     }
+
+	     /* Apply the watermark image to the thumbnail */
+	     $tmpFile = $platform->tempnam($tmpDir, 'wmk_');
+	     list ($ret, $mimeType) = $toolkit->performOperation(
+								 $mimeType, 'composite', $newTmpFile, $tmpFile,
+								 array($watermark, $watermarkMimeType,
+								       $watermarkWidth, $watermarkHeight,
+								       'bottom-left', 0, 0));
+	     
+	     /* Check the return code of the composite operation */
+ 	     if ($ret) {
+	       return array($ret->wrap(__FILE__, __LINE__,
+				       "Unable to apply watermark to the video thumbnail image"), null);
+	     }
+
+	     if(!strcmp($debugOutput,"true")) {
+	       print "watermarked Image: $tmpFile <br>";
+	       print "<hr>";
+	     }
+		       
+	     /* Update the path of our thumbnail to point to the new watermarked thumbnail instead */
+	     $newTmpFile = $tmpFile;
+	     
+	   }
 	   
 	   /* Make the gallery2 call to add this item to the album */
 	   list ($ret, $newItem) = GalleryCoreApi::addItemToAlbum($newTmpFile,
diff --git a/images/G2video_watermark1.png b/images/G2video_watermark1.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a6038a2cf266dbe94ff662b5da1d605a64ce53b
GIT binary patch
literal 2134
zcmeAS@N?(olHy`uVBq!ia0vp^JPZts{TysSR)(6PDv)AHcl32+VA$AK^E+@dkgt&J
z5#-CjPz980Xl7ve`5#EXU|=XUU|@Kaz`$TNoq<6-fBMRqR~Q)BA9}hthE&W+N=Zog
zao&N6fkQzpNTiv;fnnkrMumom36}r=Czs1AD=W|86>w0w%>X2_fr=)XGO!4olwx4&
zNa1B*Wcg(0Daei@ugs^=;IR#8gvT{ZJx@BAfkx!Q%|X+PVzx`s5k{a@W-$BE^}^iX
zvWcyMLCNwF$Vt*rccJSAxfP-=k{RejnL-d3E{3KTY#vx0C?q`kEP%$}1lfU2FG3yI
zyY4bT<8wfEVABg0Lj((2P@(BXr~?NJT2P_sMU5KtphD9-8q7#hG#boEIbk$4BNaHK
rg$B-YAH94<FK|Z7<^it)*%;=yZjp6dcIG*-VZh+&>gTe~DWM4f!EOby

literal 0
HcmV?d00001

diff --git a/images/G2video_watermark.gif b/images/G2video_watermark2.gif
similarity index 100%
rename from images/G2video_watermark.gif
rename to images/G2video_watermark2.gif
diff --git a/module.inc b/module.inc
index 0cc2e4b..8b051ab 100644
--- a/module.inc
+++ b/module.inc
@@ -33,7 +33,7 @@ class EmbedVideoModule extends GalleryModule {
 	$this->setId('embedvideo');
 	$this->setName($gallery->i18n('Embed Video'));
 	$this->setDescription($gallery->i18n('Add embedded videos from the web'));
-	$this->setVersion('1.0.5');
+	$this->setVersion('1.0.6');
 	$this->setGroup('import', $gallery->i18n('Import'));
 	$this->setCallbacks('getSiteAdminViews');
 	$this->setRequiredCoreApi(array(7, 4));
@@ -77,7 +77,13 @@ class EmbedVideoModule extends GalleryModule {
 
         if (!isset($params['embedvideodefaultVariables'])) {
             $ret = $this->setParameter('embedvideodefaultVariables',
-		   'height=240|width=320|useInternalFlvPlayer=true|useRemoteSize=false|youtubeShowRelated=false');
+				       'height=240'.
+				       '|width=320'.
+				       '|useInternalFlvPlayer=true'.
+				       '|useRemoteSize=false'.
+				       '|youtubeShowRelated=false'.
+				       '|watermarkVideos=true'
+				       );
             if ($ret) {
                 return $ret;
             }
diff --git a/templates/EmbedVideoSiteAdmin.tpl b/templates/EmbedVideoSiteAdmin.tpl
index 8d5f2e9..f86a633 100644
--- a/templates/EmbedVideoSiteAdmin.tpl
+++ b/templates/EmbedVideoSiteAdmin.tpl
@@ -145,6 +145,13 @@
     <tr class="gbEven"><td>flvThumbnail</td><td>URL path</td>
       <td>{g->text text="URL path to a jpg to use as a thumbnail for all directly linked/embedded flv files."}</td></tr>
 
+    <tr class="gbOdd"><td>watermarkVideos</td><td>true/false</td>
+      <td>{g->text text="specify whether you want to apply a watermark to the video thumbnails when they are added."}</td></tr>
+
+    <tr class="gbEven"><td>watermarkImage</td><td>URL path</td>
+      <td>{g->text text="URL path to an image to use as a watermark for all video thumbnails."}</td></tr>
+
+
   </table>
 
 </div>
-- 
2.34.1