<?
// ========================== 文件说明 ==========================//
// 文件说明:图片防盗链程序
// --------------------------------------------------------------//
// 程序作者:Sindo(锐利工作室)
// --------------------------------------------------------------//
// 程序版本:0.1
// --------------------------------------------------------------//
// 运行依赖:一个中文字体文件 chinese.fon
// --------------------------------------------------------------//
// 程序主页:http://www.wreny.com
// --------------------------------------------------------------//
// Copyright (C) Wreny Studio. All Rights Reserved.
// ==============================================================//
main();
function main() {
//存放图片的文件夹在服务器上的绝对地址,注意以/结尾
//$imgRootPath = "D:/WorkSpas/Apache/";
$imgRootPath = "/home/610c00cfe2827dcf2ebf27314fb027a1/";
//例外允许连接的网址,注意:自身域名不需要填入,设定为肯定可以连接图片
$excludeReferArr = array("www.im286.com", "im286.com");
doJudgeReferer($excludeReferArr);
$imgRelPath=$_REQUEST['src'];
if(empty($imgRelPath)){
doOutputMsgImg("未指定要查看的图片!");
exit;
}
$srcSplitArr = explode(".", $imgRelPath);
$srcSuffix = $srcSplitArr[count($srcSplitArr)-1];
$srcSuffix = strtolower($srcSuffix);
$imgAbsPath = $imgRootPath.$imgRelPath;
if(!file_exists($imgAbsPath)){
doOutputMsgImg("对不起,此图片链接已经失效!");
}
else if($srcSuffix == "gif") {
header ("Content-type: image/gif");
$imgFlag = $_REQUEST['flag'];
if($imgFlag == "dynGif") {
$fp = fopen($imgAbsPath, 'r');
fpassthru($fp);
}
else {
$image = imagecreatefromgif ($imgAbsPath);
imagegif ($image);
imagedestroy ($image);
}
}
else if($srcSuffix == "jpg") {
header ("Content-type: image/jpeg");
$image = imagecreatefromjpeg (imgAbsPath);
imagejpeg ($image);
imagedestroy ($image);
}
else if($srcSuffix == "png") {
header ("Content-type: image/png");
$image = imagecreatefrompng ($imgAbsPath);
imagepng ($image);
imagedestroy ($image);
}
else {
doOutputMsgImg("图像类型不支持");
}
}
function doJudgeReferer($excludeReferArr) {
$referUrl=parse_url($_SERVER["HTTP_REFERER"]);
$referHost = $referUrl[host];
if($referHost!="" && $referHost!=$_SERVER["HTTP_HOST"] && !in_array($referHost, $excludeReferArr)){
doOutputMsgImg("BS来自".$referUrl[host]."的盗链!");
exit;
}
}
function doMarkImage($inImg,$inMarkStr="Powered by Wreny.com") {
$black = imagecolorallocate ($inImg, 0, 0, 0);
$imgWidth = imagesx($inImg);
$imgHeight = imagesy($inImg);
//289-108,86
drawTxt($inImg,$inMarkStr, ($imgWidth-strlen($inMarkStr)*9),($imgHeight-16), $black);
}
function doOutputMsgImg($msg, $imgWidth=468,
$imgHeight=60, $imgFgColorArr=array(0,0,0), $imgBgColorArr=array(255,255,255)) {
$img = imagecreatetruecolor($imgWidth, $imgHeight);
// 用白色背景加黑色边框画个方框
$backColor = imagecolorallocate($img, 255, 255, 255);
$borderColor = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, $imgWidth - 1, $imgHeight - 1, $backColor);
imagerectangle($img, 0, 0, $imgWidth - 1, $imgHeight - 1, $borderColor);
$imgFgColor = imagecolorallocate ($img, $imgFgColorArr[0], $imgFgColorArr[1], $imgFgColorArr[2]);
drawTxt($img, $msg, ($imgWidth-strlen($msg)*9)/2,($imgHeight/2-16),$imgFgColor);
doMarkImage($img);
header('Content-type: image/png');
imagepng($img);
imagedestroy($img);
}
function isCharVilid($inStr, $inPos) {
if(strlen($inStr) < ($inPos+1)) {
return true;
}
else {
for($iLoop=0,$iCounter=0;$iLoop<=$inPos; $iLoop++){
if(substr($inStr, $iLoop, 1)<='~') {
$iCounter++;
}
}
return ( ($iCounter % 2) == 0 );
}
}
function drawTxt($image, $string, $x, $y, $color) {
$fp = fopen("chinese.fon", "r"); //WIN98中,此文件在:c:windowscommand 下
if (feof($fp)) {
fclose($fp);
return 0;
}
//GBK
$strings = preg_split(
'/((?:[\x80-\xFF][\x40-\xFF])+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE
);
//print_r($strings);
$isch = false;
for ($p = 0, $count = count($strings); $p < $count; $p ++) {
if ($isch) {
$string = $strings[$p];
for ($i = 0, $l = strlen($string) - 1; $i < $l; $i += 2) {
$qh = ord($string{$i}); // get ascii code
$offset = (94 * ($qh - 0xA0 - 1) + (ord($string{$i + 1}) - 0xA0 - 1)) * 32;
fseek($fp, $offset, SEEK_SET);
$buffer = unpack('n*', fread($fp, 32));
// $buffers[$offset] = $buffer;
for ($yy = 1, $ypos = $y; $yy <= 16; $yy ++, $ypos ++) {
$bits = $buffer[$yy];
for ($xbit = 32768, $xpos = $x; $xbit > 0; $xbit >>= 1, $xpos ++) {
if ($bits & $xbit) {
imagesetpixel($image, $xpos, $ypos, $color);
}
}
}
$x += 16;
}
}
else {
imagestring($image, 12, $x, $y, $strings[$p], $color);
$x += strlen($strings[$p]) * 9;
}
$isch = !$isch;
}
return 0;
}
?>