Page 1 sur 1

[reglé] Watermark.php à appeler dans fonction

Posté : 03 nov. 2013, 10:56
par lecer144
Bonjour,
J'ai réussi à watermarker mes images via un fichier récupéré sur le net watermark.php qui est appelé par htaccess

Code : Tout sélectionner

RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f #RewriteRule ^([^tn].*\.(gif|jpg|png|jpeg))$ watermark.php?image=$1 [NC] RewriteRule ^(.*.(jpe?g|gif|png|bmp))$ watermark.php?image=$1 [NC]
mais certaines images ne sont pas affichées directement par le header et transitent par une fonction show_image_in_imgtag.php ... dans ce cas là, le watermark ne fonctionne plus.
Je voudrais savoir si au moins c'est réalisable de modifier le show_image_in_imgtag.php pour qu'il appelle le watermark.php avant d'afficher l'image Par avance merci pour votre réponse.
Ci-dessous le show_image_in_imgtag.php :

Code : Tout sélectionner

<?php define('_VALID_MOS', 1); // Get the Joomla! configuration file $config_file = '../../configuration.php'; include_once( $config_file ); if( isset($_REQUEST['mosConfig_absolute_path'])) die(); if( !isset( $mosConfig_absolute_path ) ) { // We are in J! 1.5 define( '_JEXEC', 1 ); $mosConfig_absolute_path = dirname( $config_file ); } include_once("../../administrator/components/com_virtuemart/virtuemart.cfg.php"); $resize_image = true; // check if dynamic thumbnails are disabled or the GD Library is not available if( PSHOP_IMG_RESIZE_ENABLE == '') { $resize_image = false; } elseif (!extension_loaded('gd') && !dl('gd.so')) { $resize_image = false; } include( CLASSPATH . "ps_main.php"); if( $resize_image ) { // Image2Thumbnail will resize your images include( CLASSPATH . "class.img2thumb.php"); } $basefilename = @basename(urldecode($_REQUEST['filename'])); $filenames[] = IMAGEPATH."product/".$basefilename; $resized_filenames[] = IMAGEPATH."product/resized/".$basefilename; $filenames[] = IMAGEPATH."category/".$basefilename; $resized_filenames[] = IMAGEPATH."category/resized/".$basefilename; $newxsize = (int)@$_REQUEST['newxsize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newxsize']; $newysize = (int)@$_REQUEST['newysize'] == 0 ? PSHOP_IMG_WIDTH : (int)@$_REQUEST['newysize']; // Don't allow sizes beyond 600 pixels $newxsize = min( $newxsize, 600 ); $newysize = min( $newysize, 600 ); //Don't allow sizes under 40 pixels $newxsize = max( $newxsize, 40 ); $newysize = max( $newysize, 40 ); if( $newxsize < $newysize ) { // Don't let $newxsize be smaller than 55% of $newysize $newxsize = max( $newxsize, 0.55 * $newysize ); } elseif( $newysize < $newxsize ) { // Don't let $newysize be smaller than 55% of $newxsize $newysize = max( $newysize, 0.55 * $newxsize ); } $maxsize = false; $bgred = 255; $bggreen = 255; $bgblue = 255; /* Minimum security */ $file_exists = false; $i = 0; foreach ( $filenames as $file ) { if( file_exists( $file ) ) { $file_exists = true; $filename = $file; break; } elseif( file_exists($resized_filenames[$i])) { $file_exists = true; $filename = $resized_filenames[$i]; break; } ++$i; } $file_exists or die('File does not exist'); $filename2 = $resized_filenames[$i]; $fileinfo = pathinfo( $filename ); $file = str_replace(".".$fileinfo['extension'], "", $fileinfo['basename']); // In class.img2thumb in the function NewImgShow() the extension .jpg will be added to .gif if imagegif does not exist. // If the image is a gif, and imagegif() returns false then make the extension ".gif.jpg" if( $fileinfo['extension'] == "gif") { if( function_exists("imagegif") ) { $ext = ".".$fileinfo['extension']; $noimgif=""; } else { $ext = ".jpg"; $noimgif = ".".$fileinfo['extension']; } } else { $ext = ".".$fileinfo['extension']; $noimgif=""; } if( $resize_image ) { if( file_exists($filename2)) { $fileout = $filename2; } else { $fileout = dirname( $filename2 ) .'/'.$file."_".$newxsize."x".$newysize.$noimgif.$ext; } } else { $fileout = $filename; } // Tell the user agent to cache this script/stylesheet for an hour $age = 3600; header( 'Expires: '.gmdate( 'D, d M Y H:i:s', time()+ $age ) . ' GMT' ); header( 'Cache-Control: max-age='.$age.', must-revalidate' ); if( file_exists( $fileout ) ) { // Try to delete the resized image if the original file is newer if (filemtime($fileout) < filemtime($filename)) @unlink($fileout); } if( file_exists( $fileout ) ) { /* We already have a resized image * So send the file to the browser */ switch(strtolower($ext)) { case ".gif": header ("Content-type: image/gif"); readfile($fileout); break; case ".jpg": header ("Content-type: image/jpeg"); readfile($fileout); break; case ".png": header ("Content-type: image/png"); readfile($fileout); break; } } else { /* We need to resize the image and Save the new one (all done in the constructor) */ $neu = new Img2Thumb($filename,$newxsize,$newysize,$fileout,$maxsize,$bgred,$bggreen,$bgblue); /* Send the file to the browser */ switch($ext) { case ".gif": header ("Content-type: image/gif"); readfile($fileout); break; case ".jpg": header ("Content-type: image/jpeg"); readfile($fileout); break; case ".png": header ("Content-type: image/png"); readfile($fileout); break; } } ?>
et ci-dessous le watermark.php :

Code : Tout sélectionner

<?php function watermark($original_image) { $path_cache_image = "/monsite.fr/cache"."/".md5($original_image).".jpeg"; $path_watermark="/monsite.fr/images/watermark/image_water.png"; $p = 'c'; /* p correspond a la position souhaitee pour le watermark : tl = top left tc = top center tr = top right cl = center left c = center of the image cr = center right bl = bottom left bc = bottom center br = bottom right */ $image=imagecreatefromjpeg($original_image); list($imagewidth,$imageheight)=getimagesize($original_image); $watermark=imagecreatefrompng($path_watermark); list($watermarkwidth,$watermarkheight)=getimagesize($path_watermark); if($watermarkwidth >= $imagewidth || $watermarkheight >= $imageheight) { $water_resize_factor_width = $imagewidth / $watermarkwidth; $water_resize_factor_height = $imageheight / $watermarkheight; if ($water_resize_factor_width <= $water_resize_factor_height) { $new_watermarkwidth = $watermarkwidth * $water_resize_factor_width / 1.2; $new_watermarkheight = $watermarkheight * $water_resize_factor_width / 1.2; } else { $new_watermarkwidth = $watermarkwidth * $water_resize_factor_height / 1.2; $new_watermarkheight = $watermarkheight * $water_resize_factor_height / 1.2; } $new_watermark = imagecreatetruecolor($new_watermarkwidth , $new_watermarkheight); imagealphablending($new_watermark , false); imagecopyresampled($new_watermark , $watermark, 0, 0, 0, 0, $new_watermarkwidth, $new_watermarkheight, $watermarkwidth, $watermarkheight); $watermarkwidth = $new_watermarkwidth; $watermarkheight = $new_watermarkheight; $watermark = $new_watermark; } if($watermarkheight>$imageheight) { $water_resize_factor = $imagewidth / $watermarkwidth; $new_watermarkwidth = $watermarkwidth * $water_resize_factor / 1.2; $new_watermarkheight = $watermarkheight * $water_resize_factor / 1.2; $new_watermark = imagecreatetruecolor($new_watermarkwidth , $new_watermarkheight); imagealphablending($new_watermark , false); imagecopyresampled($new_watermark , $watermark, 0, 0, 0, 0, $new_watermarkwidth, $new_watermarkheight, $watermarkwidth, $watermarkheight); $watermarkwidth = $new_watermarkwidth; $watermarkheight = $new_watermarkheight; $watermark = $new_watermark; } //getting the image size for the watermark $w_w = imagesx($watermark); $w_h = imagesy($watermark); if($p == "tl") { $dest_x = 0; $dest_y = 0; } elseif ($p == "tc") { $dest_x = ($imagewidth - $w_w)/2; $dest_y = 0; } elseif ($p == "tr") { $dest_x = $imagewidth - $w_w; $dest_y = 0; } elseif ($p == "cl") { $dest_x = 0; $dest_y = ($imageheight - $w_h)/2; } elseif ($p == "c") { $dest_x = ($imagewidth - $w_w)/2; $dest_y = ($imageheight - $w_h)/2; } elseif ($p == "cr") { $dest_x = $imagewidth - $w_w; $dest_y = ($imageheight - $w_h)/2; } elseif ($p == "bl") { $dest_x = 0; $dest_y = $imageheight - $w_h; } elseif ($p == "bc") { $dest_x = ($imagewidth - $w_w)/2; $dest_y = $imageheight - $w_h; } elseif ($p == "br") { $dest_x = $imagewidth - $w_w; $dest_y = $imageheight - $w_h; } imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermarkwidth, $watermarkheight); if(file_exists($path_cache_image)) { $fp = fopen($path_cache_image, 'r'); // stream the image directly from the cachefile fpassthru($fp); } else { imagejpeg($image,$path_cache_image); // pas encore d image watermarkee >> ecriture dans le cache imagedestroy($image); // liberation memoire $fp = fopen($path_cache_image, 'r'); // stream the image directly from the cachefile fpassthru($fp); } } header("Content-type:image/jpeg"); watermark($_GET['image']); ?>
ps : J'ai tenté dans le show_image_in_imgtag.php de remplacer les readfile($fileout) par readfile(watermark($fileout)) mais sans résultat (image vide) et watermark($fileout) à la place de readfile($fileout) fait une erreur 500 :?

Re: Watermark.php à appeler dans fonction plutot que htacess

Posté : 03 nov. 2013, 12:11
par lecer144
avec un p'tit require_once "watermark.php";
et bah, ça fonctionne ... yeeessss !