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]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;
}
}
?>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']);
?>