+ /* Resize the thumbnail image to the size indicated by our album */
+ $debugString="";
+ list ($ret, $toolkit) = GalleryCoreApi::getToolkitByOperation($mimeType, 'resize');
+ if (!$ret) {
+ $debugString.="Checking to see if a toolkit that can resize images was found. <br>";
+ if (isset($toolkit)) {
+ $newTmpFile = $platform->tempnam($tmpDir, 'add');
+ $newTmpFile.= ".jpg";
+ $thumbnailSize = 150;
+ list ($ret, $preferences) =
+ GalleryCoreApi::fetchDerivativePreferencesForItem($item->getId());
+ if(!$ret) {
+ foreach ($preferences as $preference) {
+ if (preg_match('/thumbnail\|(\d+)/',
+ $preference['derivativeOperations'], $matches)) {
+ $thumbnailSize = $matches[1];
+ $debugString.="Found thumbnail size in album preferences: $thumbnailSize <br>";
+ break;
+ }
+ }
+ }
+
+ // Obtain the width and height of the original thumbnail, finding out it's ratio,
+ // and using that ratio when determining the width of the video below.
+ // Example: youtube: 130x97 google: 160x120 metacafe: 90x76 yahoo: 100x70
+ // Set the thumbnailHeight to the current thumbnailSize
+ // Set the thumbnailWidth to the appropriate size based on the thumbnailHeight * ratio
+ $image_data = @getimagesize($tmpFile);
+ if(!$image_data) {
+ return array(GalleryCoreApi::error(ERROR_STORAGE_FAILURE,__FILE__,__LINE__,
+ "Unable to retrieve thumbnail dimensions for: $tmpFile"),null,null);
+ }
+ $ratio = $image_data[0] / $image_data[1];
+ $debugString.="Using ratio from original thumbnail of $ratio. ";
+ $thumbnailHeight=$thumbnailSize;
+ $thumbnailWidth=round($thumbnailHeight * $ratio);
+ $debugString.="Resizing thumbnail image to $thumbnailWidth x $thumbnailHeight: $tmpFile -> $newTmpFile <br>";
+ $toolkit->performOperation($mimeType, 'resize', $tmpFile, $newTmpFile,
+ array($thumbnailWidth,$thumbnailHeight));
+ }
+ }
+ if(!strcmp($debugOutput,"true")) {
+ print "<h2>Thumbnail Resize</h2>";
+ 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). Skip this part if it is a local path.
+ */
+ if(!preg_match("/^\//", $watermarkImage)) {
+ 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);
+ }
+ } else {
+ $tmpDir = $gallery->getConfig('data.gallery.tmp');
+ $watermark = $platform->tempnam($tmpDir, 'wmk_img_');
+ $watermark.= "." . $watermarkExt;
+ if(!$platform->copy($watermarkImage, $watermark)) {
+ return array(GalleryCoreApi::error(ERROR_STORAGE_FAILURE,__FILE__,__LINE__,
+ "Unable to copy watermark image from path: $watermarkImage"),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);
+ if(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,
+ $watermarkAlignment, 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;
+
+ }
+