how ever I recently change rule. # BEGIN WP-PICShield <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} \.(jpg|jpeg|png|gif)$ [NC] RewriteCond %{REMOTE_ADDR} !^(127.0.0.1|your server ip|your website ip)$ [NC] RewriteCond %{REMOTE_ADDR} !^66.6.(32|33|36|44|45|46). [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?(www.mydomain.com|translate.google.com|translate.googleusercontent.com|www.microsofttranslator.com|pinterest.com|tumblr.com|facebook.com|plus.google|twitter.com) [NC] RewriteCond %{HTTP_USER_AGENT} !(googlebot|Googlebot-Image|Bingbot|Mediapartners-Google|Mediapartners|Googlebot-Mobile|Googlebot-Video|Googlebot-News|msnbot|baiduspider|slurp|webcrawler|teoma|facebookexternalhit|pinterest|feedfetcher) [NC] RewriteRule (.*) byrev-wp-picshield.php?key=kjE0-nxJL&src=$1 [L] </IfModule> # END WP-PICShield <?php define('_GTFO_KEY','kjE0-nxJL'); if (!array_key_exists('key', $_GET) OR ($_GET['key'] != _GTFO_KEY) ){ header('HTTP/1.0 401 Unauthorized'); echo 'Unauthorized!'; die(401); } define('_WATERMARK_ENABLED', true); define('_REDIRECT_DIRECT_LINK_IMAGES_FROM_GOOGLE', true); define('_HOTLINK_CACHE_FOLDER', '~hotlink-cache'); define('_IMAGE_SOURCE_TRANSPARENCY', 65); define('_BLEND_BAR_WATERMARK', true); define('_BLEND_BAR_OPACITY', 25); define('_WRITE_HOST_SOURCE', true); define('_WATERMARK_POSITION', 1); define('_WRITE_CREDIT_PLUGIN', true); define('_MAXIMUM_MEGAPIXELS_SIZE', 3); define('_WATERMARK_PNG_FILE', 'watermark.png'); define('_SEND_HOTLINK_GTFO_HEADER_SIGNATURE', true); $image = strip_tags( $_GET['src'] ); if (_SEND_HOTLINK_GTFO_HEADER_SIGNATURE) { header('X-Protect: ByREV WP-PICShield , HOTLINK Defence'); } #~~~~ headers = watermarked file NOT cache header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); #~~~~ REDIRECT DIRECT LINK IMAGES with GOOGLE IMAGES REFERRER if (_REDIRECT_DIRECT_LINK_IMAGES_FROM_GOOGLE) : if (array_key_exists('HTTP_REFERER', $_SERVER)) { require_once('byrev-wp-image2url.php'); } endif; #~~~~ if watermak is disabled function img_get_mime_type($file) { $mime_types = array( "gif"=>"image/gif", "png"=>"image/png", "jpeg"=>"image/jpg", "jpg"=>"image/jpg", ); $file_exp = explode('.',$file); $extension = strtolower(end($file_exp)); if (array_key_exists($extension, $mime_types)) { return $mime_types[$extension]; } return "application/force-download"; } if (!_WATERMARK_ENABLED) { $mime = img_get_mime_type($image); header('Content-type: '.$mime); fpassthru(fopen($image, 'rb')); exit(); } #~~~~ $dir = dirname(__FILE__); $watermarked = $dir.'/'._HOTLINK_CACHE_FOLDER.'/'.$image; #~~ create WATERMARK cache folders if not exists; $watermark_folder = dirname($watermarked); if(!is_dir($watermark_folder)) { mkdir($watermark_folder, 0777, true); } function byrev_image_type_to_extension($imagetype) { if(empty($imagetype)) return false; switch($imagetype) { case IMAGETYPE_GIF : return 'gif'; case IMAGETYPE_JPEG : return 'jpeg'; case IMAGETYPE_PNG : return 'png'; case IMAGETYPE_SWF : return 'swf'; case IMAGETYPE_PSD : return 'psd'; case IMAGETYPE_BMP : return 'bmp'; case IMAGETYPE_TIFF_II : return 'tiff'; case IMAGETYPE_TIFF_MM : return 'tiff'; case IMAGETYPE_JPC : return 'jpc'; case IMAGETYPE_JP2 : return 'jp2'; case IMAGETYPE_JPX : return 'jpf'; case IMAGETYPE_JB2 : return 'jb2'; case IMAGETYPE_SWC : return 'swc'; case IMAGETYPE_IFF : return 'aiff'; case IMAGETYPE_WBMP : return 'wbmp'; case IMAGETYPE_XBM : return 'xbm'; default : return false; } } #~~ if file exist, is serverd from disk, else is generated only once; if(file_exists($image)&& !file_exists($watermarked)){ #~~~ image type $image_size = getimagesize($image); $image_mime = $image_size['mime']; $image_type = $image_size[2]; $image_extension = byrev_image_type_to_extension($image_type); $imagecreatefrom = 'imagecreatefrom'.$image_extension; if (!function_exists($imagecreatefrom)) { header("Content-type: {$image_mime}"); fpassthru(fopen($image, 'rb')); exit; } $sizex = $image_size[0]; $sizey = $image_size[1]; #~~ file si to big, may not be enough memory ... / exit $max_size = _MAXIMUM_MEGAPIXELS_SIZE * 104857600; if (($sizex*$sizey) > $max_size) { header("Content-type: {$image_mime}"); fpassthru(fopen($image, 'rb')); exit; } //~~~ create images; $photo = $imagecreatefrom($image); $watermark = imagecreatefrompng(_WATERMARK_PNG_FILE); //imagealphablending($photo, true); $w = imagesx($watermark); $h = imagesy($watermark); //$sizex = imagesx($photo); //$sizey = imagesy($photo); $percent = $sizex / (($w>$h)?$w:$h); $nw = intval($w*$percent); $nh = intval($h*$percent); switch (_WATERMARK_POSITION) { case 0: $_watermark_ypos = 10; break; case 1: $_watermark_ypos = round( ($sizey/2) - ($nh/2) ) ; break; case 2: $_watermark_ypos = $sizey - $nh - 40; break; } #~~~ set original image source opacity $opacity_img = imagecreatetruecolor($sizex, $sizey); imagecopymerge($photo, $opacity_img, 0, 0, 0, 0, $sizex, $sizey, _IMAGE_SOURCE_TRANSPARENCY); #~~~ set higher opacity band if (_BLEND_BAR_WATERMARK) : $opacity_img = imagecreatetruecolor($nw, $nh); imagecopymerge($photo, $opacity_img, 0, $_watermark_ypos, 0, 0, $nw, $nh, _BLEND_BAR_OPACITY); endif; imagedestroy($opacity_img); #~~~ resize watermak with great deal of clarity $image_p = imagecreatetruecolor($nw, $nh); ImageAlphaBlending($image_p,false); ImageSaveAlpha($image_p,true); imagecopyresampled($image_p, $watermark, 0, 0, 0, 0, $nw, $nh, $w, $h); imagedestroy($watermark); #~~~ put watermak over image source imagecopy($photo, $image_p, 0, $_watermark_ypos, 0, 0, $nw, $nh); imagedestroy($image_p); #~~~ write image source if (_WRITE_HOST_SOURCE): $textcolor = imagecolorallocate($photo, 192, 192, 192); imagestring($photo, 5, 5, $sizey - $pos_x_host_source, '( '. $_SERVER['SERVER_NAME'] .' )', $textcolor); endif; // Output to the browser imagejpeg($photo, $watermarked, 75); imagedestroy($photo); } header('Content-type: image/jpeg'); fpassthru(fopen($watermarked, 'rb')); ?> another one code is byrev-wp-image2url.php which is same in the last yellow colour code I have changed so that it should redirect all reffered traffic to our attachment page . By default this plug in don't redirect other than google traffic.
I've got a question here, well in fact maybe a few questions so here goes: 1. if we are using image redirection with 301 method, will that make our existing indexed image in google disappear? 2. watermarking means we are serving the watermarked image from a cache right? so wouldn't that make google image bot also crawl that cache folder and index our watermark, which in turn when served will also be watermarked and this will go on as a loop?
Also just tried the PICShield WP plug-in and it works perfectly, I am concerned my images will be delisted though, can anybody give me more information on this?
Images are getting de-listed by google automatically, but after some days and weeks they return with the watermark in the image serps again. Traffic is slowly rising a bit for me every day now after using imaguard for around 10 days now. I am sure it will never be like before the 25th January though just because of the watermark solution. More text content + more facebook, dA, twitter activity + trying to build up a community of people who are visiting the site more often than before is my longtime solution
they are testing with this new change and it is not always available. @Byrev I am extremely sorry that I don't know you are the developer of Wp-Picshield. ********************************************************** latest upgrade of wp-picshield resolves all issue. Thanks for this plug in..
Well been using PICShield for a day and my traffic has doubled, keeping a close eye on my Google indexed images but all good so far. Had my best ever Adsense day yesterday and only had it activated for the evening.
Hi guys, do i miss something, I've just downloaded the plugin and activeted both itself and hotlink, yet the watermark.png doesn't show up on photos. What is wrong with it
@bappa86 no problem ... to beanonymousisthe best protectionagainstcorporations ... is better underground, too muchadvertising and I get attentionfrom "sharks" @celebstar verify is watermark.png is in the place whereit should be: blog root.
Hello bappa86, thanks for the code. Very useful. If it's not too much trouble could you post the wp-image2url thanks.
Actually that's ok, I see you've included it in the raw code directory of the Wordpress files - thanks
I checked watermark.png out again and the other settings the plugin has, yet doesn't work. I will send you my website, so you can have a look at it, if you want, thanx for trying yo help me.
@celebstar : Your site working ok , watermark working, redirection working, is up and go! If some images is not watermarked, may be too large to avoid memory problems.