From: Alan Jack Pippin <ajp@pippin.(none)>
Date: Mon, 15 Oct 2007 05:59:42 +0000 (-0600)
Subject: Finishing touches on initial support for watermarking video thumbnails
X-Git-Tag: 1_1_1~17
X-Git-Url: http://git.pippins.net/.%24link.?a=commitdiff_plain;h=b65625759caa70c8905f63b87a36e59951ed24fd;p=embedvideo%2F.git

Finishing touches on initial support for watermarking video thumbnails
---

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_watermark.gif b/images/G2video_watermark.gif
deleted file mode 100755
index 8ec7a76..0000000
Binary files a/images/G2video_watermark.gif and /dev/null differ
diff --git a/images/G2video_watermark1.png b/images/G2video_watermark1.png
new file mode 100644
index 0000000..0a6038a
Binary files /dev/null and b/images/G2video_watermark1.png differ
diff --git a/images/G2video_watermark2.gif b/images/G2video_watermark2.gif
new file mode 100755
index 0000000..8ec7a76
Binary files /dev/null and b/images/G2video_watermark2.gif differ
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>