技术的世界只说技术就好了..

分类目录

近期文章

标签

近期评论

功能

2018年十二月
« 11月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

局域网三层更新同步更新工具~无盘服务器~适用大量MZD 锐起服务器更新~

以前在网上找了好几天...BT FTP HTTP 俺都适用了一下 感觉 很不爽..

破解的谁敢用? 于是就找一些自建三层的软件..

还是 问题一堆.. 不太稳定.. 对于我们这些暂时只有一个网吧

配有几十台无盘服务器的网吧就更加不适合了..

还有B大点的软件居然还收费,更好玩的是居然都是网络验证哈.

(讽刺一下这些人哦. 你们脑袋怎么长的~ 鸡毛都能卖钱你真神了)

所以琢磨了一阵子 感觉可行就搞了这个东东... 适用了一些别人的东西..

首先我先声明.. 我本人不研究EXE程序.. 只写PHP

有些企业程序的可以找俺 不过这个月完了. 我给朋友那个IDC程序还没搞定....

纯粹无聊 写了这个东西.. 如果你不感兴趣请走开..

[separator]

还有这个东西确实可以 解放主管的 一大堆的原来用在更新上的时间~

另外工作站如果能配合讯闪 或秋风菜单 就更完美了..

好了 就说这里... 详细说明在打包文件的readme.txt

视频教程在这里:

http://127.0.0.1/wordpress/111.swf 或http://www.live-share.com/files/309960/111.swf.html

/*
+----------------------------------------------
| [Bigqi.com] ---->
| Item Name : Update
+----------------------------------------------
| Time : Thu Feb 28 12:09:58 CST 2008
| Author: Haierspi ...
+----------------------------------------------
*/

下载地址 :[file][attach]2[/attach][/file]

利用 QQWry.Dat 实现 IP 地址高效检索(PHP)

根据 LumaQQ 开发者文档中的纯真 IP 数据库格式详解,我编写了一个 PHP 的查询 IP 所在地区信息的类。在编写过程中发现纯真 IP 数据库格式详解中关于记录区的描述不是很全面,不过出入也不是很大,所以我没必要再写一份纯真 IP 数据库的格式说明了,大家感兴趣的话,读一读下面的代码应该就能看出来了。代码中加了很详细的注释,应该很容易读懂的。

在创建这个类的一个实例后,实例中就保存了打开的文件指针和一些查询需要的信息,每次查询时不需要重新打开文件,直到页面执行结束后,打开的文件才会自动关闭。这样。在一个页面内进行多次查询时,效率是很高的。并且此类不仅可以直接查询 IP,还可以自动将域名解析为 IP 进行查询。
[separator]

下面是程序代码:

PHP代码

[code]<?php    
/**  
* IP 地理位置查询类  
*  
* @author 马秉尧  
* @version 1.5  
* @copyright 2005 CoolCode.CN  
*/  
class IpLocation {    
    /**  
     * QQWry.Dat文件指针  
     *  
     * @var resource  
     */  
    var $fp;    
    
    /**  
     * 第一条IP记录的偏移地址  
     *  
     * @var int  
     */  
    var $firstip;    
    
    /**  
     * 最后一条IP记录的偏移地址  
     *  
     * @var int  
     */  
    var $lastip;    
    
    /**  
     * IP记录的总条数(不包含版本信息记录)  
     *  
     * @var int  
     */  
    var $totalip;    
    
    /**  
     * 返回读取的长整型数  
     *  
     * @access private  
     * @return int  
     */  
    function getlong() {    
        //将读取的little-endian编码的4个字节转化为长整型数    
        $result = unpack('Vlong', fread($this->fp, 4));    
        return $result['long'];    
    }    
    
    /**  
     * 返回读取的3个字节的长整型数  
     *  
     * @access private  
     * @return int  
     */  
    function getlong3() {    
        //将读取的little-endian编码的3个字节转化为长整型数    
        $result = unpack('Vlong', fread($this->fp, 3).chr(0));    
        return $result['long'];    
    }    
    
    /**  
     * 返回压缩后可进行比较的IP地址  
     *  
     * @access private  
     * @param string $ip  
     * @return string  
     */  
    function packip($ip) {    
        // 将IP地址转化为长整型数,如果在PHP5中,IP地址错误,则返回False,    
        // 这时intval将Flase转化为整数-1,之后压缩成big-endian编码的字符串    
        return pack('N', intval(ip2long($ip)));    
    }    
    
    /**  
     * 返回读取的字符串  
     *  
     * @access private  
     * @param string $data  
     * @return string  
     */  
    function getstring($data = "") {    
        $char = fread($this->fp, 1);    
        while (ord($char) > 0) {        // 字符串按照C格式保存,以\0结束    
            $data .= $char;             // 将读取的字符连接到给定字符串之后    
            $char = fread($this->fp, 1);    
        }    
        return $data;    
    }    
    
    /**  
     * 返回地区信息  
     *  
     * @access private  
     * @return string  
     */  
    function getarea() {    
        $byte = fread($this->fp, 1);    // 标志字节    
        switch (ord($byte)) {    
            case 0:                     // 没有区域信息    
                $area = "";    
                break;    
            case 1:    
            case 2:                     // 标志字节为1或2,表示区域信息被重定向    
                fseek($this->fp, $this->getlong3());    
                $area = $this->getstring();    
                break;    
            default:                    // 否则,表示区域信息没有被重定向    
                $area = $this->getstring($byte);    
                break;    
        }    
        return $area;    
    }    
    
    /**  
     * 根据所给 IP 地址或域名返回所在地区信息  
     *  
     * @access public  
     * @param string $ip  
     * @return array  
     */  
    function getlocation($ip) {    
        if (!$this->fp) return null;            // 如果数据文件没有被正确打开,则直接返回空    
        $location['ip'] = gethostbyname($ip);   // 将输入的域名转化为IP地址    
        $ip = $this->packip($location['ip']);   // 将输入的IP地址转化为可比较的IP地址    
                                                // 不合法的IP地址会被转化为255.255.255.255    
        // 对分搜索    
        $l = 0;                         // 搜索的下边界    
        $u = $this->totalip;            // 搜索的上边界    
        $findip = $this->lastip;        // 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息)    
        while ($l <= $u) {              // 当上边界小于下边界时,查找失败    
            $i = floor(($l + $u) / 2);  // 计算近似中间记录    
            fseek($this->fp, $this->firstip + $i * 7);    
            $beginip = strrev(fread($this->fp, 4));     // 获取中间记录的开始IP地址    
            // strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式    
            // 以便用于比较,后面相同。    
            if ($ip < $beginip) {       // 用户的IP小于中间记录的开始IP地址时    
                $u = $i - 1;            // 将搜索的上边界修改为中间记录减一    
            }    
            else {    
                fseek($this->fp, $this->getlong3());    
                $endip = strrev(fread($this->fp, 4));   // 获取中间记录的结束IP地址    
                if ($ip > $endip) {     // 用户的IP大于中间记录的结束IP地址时    
                    $l = $i + 1;        // 将搜索的下边界修改为中间记录加一    
                }    
                else {                  // 用户的IP在中间记录的IP范围内时    
                    $findip = $this->firstip + $i * 7;    
                    break;              // 则表示找到结果,退出循环    
                }    
            }    
        }    
    
        //获取查找到的IP地理位置信息    
        fseek($this->fp, $findip);    
        $location['beginip'] = long2ip($this->getlong());   // 用户IP所在范围的开始地址    
        $offset = $this->getlong3();    
        fseek($this->fp, $offset);    
        $location['endip'] = long2ip($this->getlong());     // 用户IP所在范围的结束地址    
        $byte = fread($this->fp, 1);    // 标志字节    
        switch (ord($byte)) {    
            case 1:                     // 标志字节为1,表示国家和区域信息都被同时重定向    
                $countryOffset = $this->getlong3();         // 重定向地址    
                fseek($this->fp, $countryOffset);    
                $byte = fread($this->fp, 1);    // 标志字节    
                switch (ord($byte)) {    
                    case 2:             // 标志字节为2,表示国家信息又被重定向    
                        fseek($this->fp, $this->getlong3());    
                        $location['country'] = $this->getstring();    
                        fseek($this->fp, $countryOffset + 4);    
                        $location['area'] = $this->getarea();    
                        break;    
                    default:            // 否则,表示国家信息没有被重定向    
                        $location['country'] = $this->getstring($byte);    
                        $location['area'] = $this->getarea();    
                        break;    
                }    
                break;    
            case 2:                     // 标志字节为2,表示国家信息被重定向    
                fseek($this->fp, $this->getlong3());    
                $location['country'] = $this->getstring();    
                fseek($this->fp, $offset + 8);    
                $location['area'] = $this->getarea();    
                break;    
            default:                    // 否则,表示国家信息没有被重定向    
                $location['country'] = $this->getstring($byte);    
                $location['area'] = $this->getarea();    
                break;    
        }    
        if ($location['country'] == " CZ88.NET") {  // CZ88.NET表示没有有效信息    
            $location['country'] = "未知";    
        }    
        if ($location['area'] == " CZ88.NET") {    
            $location['area'] = "";    
        }    
        return $location;    
    }    
    
    /**  
     * 构造函数,打开 QQWry.Dat 文件并初始化类中的信息  
     *  
     * @param string $filename  
     * @return IpLocation  
     */  
    function IpLocation($filename = "QQWry.Dat") {    
        $this->fp = 0;    
        if (($this->fp = @fopen($filename, 'rb')) !== false) {    
            $this->firstip = $this->getlong();    
            $this->lastip = $this->getlong();    
            $this->totalip = ($this->lastip - $this->firstip) / 7;    
            //注册析构函数,使其在程序执行结束时执行    
            register_shutdown_function(array($this, '_IpLocation'));    
        }    
    }    
    
    /**  
     * 析构函数,用于在页面执行结束后自动关闭打开的文件。  
     *  
     */  
    function _IpLocation() {    
        if ($this->fp) {    
            fclose($this->fp);    
        }    
        $this->fp = 0;    
    }    
}    
?>   [/code]

今年最最新诞生最流行的一个成语—–“正龙拍虎”

词目:正龙拍虎
发音:zhèng lóng pāi hǔ
释义:
① 意指某人或某集团为利益驱动做假,被揭穿后还抵死不认;
② 社会公信力缺失;

典故:
① 《史记·周正龙列传》:“周氏正龙者,秦地金州镇坪人也。正龙置彼画于深山密林中,遮淹修饰,远近数数摄之,得虎照数十副。照中虎卧于林下,双目炯炯,俨然真大虫也。归而献 之县官,官喜,以呈上官,州府台阁皆不疑,布之互联网,传告天下,厚赏正龙。网民见之,咸以为假,竟相怒骂之,有好事者遍搜天下旧年画,果得虎照原版画, 多不可数。正龙之谋遂败焉,天下皆以为耻。”
② 《正龙列传之龙克赝虎》第一篇:“呜呼!彼以其伪虎诈利为可恒也哉,是囚灾物也!只增龙克赝虎笑。”
③ 《诌氏全书·正龙传》:“古有武松打虎,今有正龙拍虎,更有关克挺虎”
④《天涯史记之周正龙大传》:“太史公曰:陕府本民情纯朴,素为文重德厚之地,奈其民周正龙者,心术多邪,妄以一己之智,愚天下士人,自是愚不可及,然天下愚者,又何止周正龙耶?”[img][attach]3[/attach][/img]

[separator]

例句:
① 汉芯造假者正龙拍虎,最终咎由自取。[关键词:汉芯]
② 中石油上市,各媒体正龙拍虎,使新股民站在48元之巅。[关键词:中石油 第一套]
③ 中国彩票正龙拍虎,再次告诉国民双色球再创彩市中奖纪录 一名彩民独中1。02亿元,使彩民趋之若骛。[关键词:双色球 1。02亿

事件概述   

2007年10月12日,陕西林业厅公布了猎人周正龙用数码相机和胶片相机拍摄的华南虎照片。随后,照片真实性受到来自部分网友、华南虎专家和中科院专家等方面质疑,并引发全国性关注。  15日,网友称虎照原形系年画,并将年画传到网上。受年画影响,“挺虎派”官员态度开始动摇,并暗示照片有假。  11月25日,网易独家曝光全套“华南虎”数码照片,将该事件最核心的证物呈现在公众面前。

2007年12月19日上午,国家林业局要求陕西林业厅鉴定华南虎照原始材料~

事态进展让我们继续期待。。。 其实老虎的真假已经不在重要。。

重要的是华南虎事件已经让政府公信力逐步沦丧。。。。。。

希望事件的结局是早就是一大堆专家鉴定的“假虎” ,相关的人员受到处罚。

让我们一起期待吧 希望假虎别变成了真虎~ 哦 我想那一定是太阳从西边出来了

让我们在看看 这个叱诧风云 的老虎吧(图片引用于网易)。。。

PHP的eval函数使用说明[Haierspi原创]

eval

将值代入字符串之中。

语法: void eval(string code_str);

返回值: 无

函数种类: 资料处理

内容说明

本函数可将字符串之中的变量值代入,通常用在处理数据库的资料上。参数 code_str 为欲处理的字符串。值的注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号。使用本函数处理后的字符串会沿续到 PHP 程序结束。
[separator]
[code]<?php    
$string = '杯子';    
$name = '咖啡';    
$str = '这个 $string 中装有 $name.<br>;';    
echo $str;    
eval( "\$str = \"$str\";" );    
echo $str;    
?>;
[/code]

上面的例子就是以下的含义:

PHP代码

[code]<?php    
$string = '杯子';   //设置变量$string为字符串“杯子”    
$name = '咖啡';    //设置变量$name为字符串“咖啡”    
$str = '这个 $string 中装有 $name.<br>;';   //设置变量$name为字符串 ”这个 $string 中装有 $name.<br>;“    
echo $str;  //输出$str,此时输出的字符串应该为”这个 $string 中装有 $name.<br>;“    
eval( "\$str = \"$str\";" );    
//eval有2层意思在内。1。组合命令。2并且执行它    
//意思就是执行 $str = "$str”,也就是将变量$str值 替换成字符串$str,    
//而字符串中包含了$name和$string会自动替换成 '杯子' 和'咖啡',这里应用了eval组合命令;    
//括号里面的\$ 就是转义的意思    
echo $str;//输出替换后的$str    
?>;   [/code]

我自己整理 DZ 的GD类~ 作者:DZ-monkeye 整理加注:haierspi

IMAGE类变量含义 Haierspi原创
PHP代码

//DZ IMAGE类包含变量含义 >Haierspi
$imagelib = 0;
//水印模式 0为使用GD库 1为外置IM处理
$imageimpath='';
//IM执行路径
$thumbstatus=0;
//缩略图功能状态 0功能不启用 1自动缩略图 2指定大小的缩略图
$thumbwidth = '';;
//缩略图宽度
$thumbheight = '';;
//缩略图高度
$watermarkstatus = '';;
//水印状态
/*
0 不启用缩略图
以下是各个位置对应的值:
1 2 3
4 5 6
7 8 9
比如值为1 则在图片左上角添加水印
*/
$watermarkminwidth = 300;
$watermarkminheight = 300;
// 水印功能开启的最小宽度和最小高度 当低于这个值时 不启用水印
$watermarktrans = 50;
//水印效果融合度 这个对GIF图片有效
$watermarkquality = 100;
//水印图片压缩质量
[separator]

$watermarktype =1;
//水印类型 0 gif ;1 PNG ;2 文本水印
$watermarktext = array();
//文字水印的一些参数 这个变量是ARRAY 值对应以下:
$watermarktext[text] = '';
//文字水印内容
$watermarktext[fontpath] = '';
//文字水印字体路径
$watermarktext[size] = '';
//文字水印字体大小
$watermarktext[angle] = '';
//文字水印字体角度
$watermarktext[color] = '';
//文字水印字体颜色
$watermarktext[shadowx] = '';
//文字水印投影X偏移
$watermarktext[shadowy] = '';
//文字水印投影Y偏移
$watermarktext[shadowcolor] = '';
//文字水印投影颜色

//IM 变量含义 略... 自己想吧 呵呵
?>

IMAGE 类代码
PHP代码
[code]class Image {
var $attachinfo = '';
var $srcfile = '';
var $targetfile = '';
var $imagecreatefromfunc = '';
var $imagefunc = '';
var $attach = array();
var $animatedgif = 0;
function Image($srcfile, $targetfile, $attach = array()) {
global $imagelib, $watermarktext;
$this->srcfile = $srcfile;
$this->targetfile = $targetfile;
$this->attach = $attach;
$this->attachinfo = @getimagesize($targetfile);//返回图片信息
if(!$imagelib) {
switch($this->attachinfo['mime']) {
case 'image/jpeg':
$this->imagecreatefromfunc = function_exists('imagecreatefromjpeg') ? 'imagecreatefromjpeg' : '';
$this->imagefunc = function_exists('imagejpeg') ? 'imagejpeg' : '';
break;
case 'image/gif':
$this->imagecreatefromfunc = function_exists('imagecreatefromgif') ? 'imagecreatefromgif' : '';
$this->imagefunc = function_exists('imagegif') ? 'imagegif' : '';
break;
case 'image/png':
$this->imagecreatefromfunc = function_exists('imagecreatefrompng') ? 'imagecreatefrompng' : '';
$this->imagefunc = function_exists('imagepng') ? 'imagepng' : '';
break;
}
} else {
$this->imagecreatefromfunc = $this->imagefunc = TRUE;
}
$this->attach['size'] = emptyempty($this->attach['size']) ? @filesize($targetfile) : $this->attach['size'];
//取得图像大小
if($this->attachinfo['mime'] == 'image/gif') {
$fp = fopen($targetfile, 'rb');
$targetfilecontent = fread($fp, $this->attach['size']);
fclose($fp);
$this->animatedgif = strpos($targetfilecontent, 'NETSCAPE2.0') === FALSE ? 0 : 1;
//动画的GIF 里确实有 “NETSCAPE2.0” 这个字符
//静态GIF 里没有 “NETSCAPE2.0” 字符,哈哈 郁闷了我好长时间
}
}
//缩略图函数
function Thumb($thumbwidth, $thumbheight, $preview = 0) {
global $imagelib, $imageimpath, $thumbstatus, $watermarkstatus;
//是否执行水印功能 $imageimpath 这个是ImageMagick的安装路径
$imagelib && $imageimpath ? $this->Thumb_IM($thumbwidth, $thumbheight, $preview) : $this->Thumb_GD($thumbwidth, $thumbheight, $preview);
if($thumbstatus == 2 && $watermarkstatus) {
$this->Image($this->srcfile, $this->targetfile, $this->attach);
$this->attach['size'] = filesize($this->targetfile);
}
}
//水印函数
function Watermark($preview = 0) {
global $imagelib, $imageimpath, $watermarktype, $watermarktext, $watermarkminwidth, $watermarkminheight;
if(($watermarkminwidth && $this->attachinfo[0] <= $watermarkminwidth && $watermarkminheight && $this->attachinfo[1] <= $watermarkminheight) || ($watermarktype == 2 && (!file_exists($watermarktext['fontpath']) || !is_file($watermarktext['fontpath'])))) {
return;
}
$imagelib && $imageimpath ? $this->Watermark_IM($preview) : $this->Watermark_GD($preview);
}
//GD库函数
function Thumb_GD($thumbwidth, $thumbheight, $preview = 0) {
global $thumbstatus;
if($thumbstatus && function_exists('imagecreatetruecolor') && function_exists('imagecopyresampled') && function_exists('imagejpeg')) {
$imagecreatefromfunc = $this->imagecreatefromfunc;
$imagefunc = $thumbstatus == 1 ? 'imagejpeg' : $this->imagefunc;
list($img_w, $img_h) = $this->attachinfo;
if(!$this->animatedgif && ($img_w >= $thumbwidth || $img_h >= $thumbheight)) {
$attach_photo = $imagecreatefromfunc($this->targetfile);
$x_ratio = $thumbwidth / $img_w;
$y_ratio = $thumbheight / $img_h;
if(($x_ratio * $img_h) < $thumbheight) {
$thumb['height'] = ceil($x_ratio * $img_h);
$thumb['width'] = $thumbwidth;
} else {
$thumb['width'] = ceil($y_ratio * $img_w);
$thumb['height'] = $thumbheight;
}
$targetfile = !$preview ? ($thumbstatus == 1 ? $this->targetfile.'.thumb.jpg' : $this->targetfile) : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
$thumb_photo = imagecreatetruecolor($thumb['width'], $thumb['height']);
imageCopyreSampled($thumb_photo, $attach_photo ,0, 0, 0, 0, $thumb['width'], $thumb['height'], $img_w, $img_h);
if($this->attachinfo['mime'] == 'image/jpeg') {
$imagefunc($thumb_photo, $targetfile, 100);
} else {
$imagefunc($thumb_photo, $targetfile);
}
$this->attach['thumb'] = $thumbstatus == 1 ? 1 : 0;
}
}
}
function Watermark_GD($preview = 0) {
global $watermarkstatus, $watermarktype, $watermarktrans, $watermarkquality, $watermarktext;
$watermarkstatus = $GLOBALS['forum']['disablewatermark'] ? 0 : $watermarkstatus;
if($watermarkstatus && function_exists('imagecopy') && function_exists('imagealphablending') && function_exists('imagecopymerge')) {
$imagecreatefromfunc = $this->imagecreatefromfunc;
$imagefunc = $this->imagefunc;
list($img_w, $img_h) = $this->attachinfo;
if($watermarktype < 2) {
$watermark_file = $watermarktype == 1 ? './images/common/watermark.png' : './images/common/watermark.gif';
$watermarkinfo = @getimagesize($watermark_file);
$watermark_logo = $watermarktype == 1 ? @imageCreateFromPNG($watermark_file) : @imageCreateFromGIF($watermark_file);
if(!$watermark_logo) {
return;
}
list($logo_w, $logo_h) = $watermarkinfo;
} else {
$box = imagettfbbox($watermarktext['size'], $watermarktext['angle'], $watermarktext['fontpath'], $watermarktext['text']);
$logo_h = max($box[1], $box[3]) - min($box[5], $box[7]);
$logo_w = max($box[2], $box[4]) - min($box[0], $box[6]);
$ax = min($box[0], $box[6]) * -1;
$ay = min($box[5], $box[7]) * -1;
}
$wmwidth = $img_w - $logo_w;
$wmheight = $img_h - $logo_h;
if(($watermarktype < 2 && is_readable($watermark_file) || $watermarktype == 2) && $wmwidth > 10 && $wmheight > 10 && !$this->animatedgif) {
switch($watermarkstatus) {
case 1:
$x = +5;
$y = +5;
break;
case 2:
$x = ($img_w - $logo_w) / 2;
$y = +5;
break;
case 3:
$x = $img_w - $logo_w - 5;
$y = +5;
break;
case 4:
$x = +5;
$y = ($img_h - $logo_h) / 2;
break;
case 5:
$x = ($img_w - $logo_w) / 2;
$y = ($img_h - $logo_h) / 2;
break;
case 6:
$x = $img_w - $logo_w;
$y = ($img_h - $logo_h) / 2;
break;
case 7:
$x = +5;
$y = $img_h - $logo_h - 5;
break;
case 8:
$x = ($img_w - $logo_w) / 2;
$y = $img_h - $logo_h - 5;
break;
case 9:
$x = $img_w - $logo_w - 5;
$y = $img_h - $logo_h - 5;
break;
}
$dst_photo = imagecreatetruecolor($img_w, $img_h);
$target_photo = @$imagecreatefromfunc($this->targetfile);
imageCopy($dst_photo, $target_photo, 0, 0, 0, 0, $img_w, $img_h);
if($watermarktype == 1) {
imageCopy($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h);
} elseif($watermarktype == 2) {
if(($watermarktext['shadowx'] || $watermarktext['shadowy']) && $watermarktext['shadowcolor']) {
$shadowcolorrgb = explode(',', $watermarktext['shadowcolor']);
$shadowcolor = imagecolorallocate($dst_photo, $shadowcolorrgb[0], $shadowcolorrgb[1], $shadowcolorrgb[2]);
imagettftext($dst_photo, $watermarktext['size'], $watermarktext['angle'], $x + $ax + $watermarktext['shadowx'], $y + $ay + $watermarktext['shadowy'], $shadowcolor, $watermarktext['fontpath'], $watermarktext['text']);
}
$colorrgb = explode(',', $watermarktext['color']);
$color = imagecolorallocate($dst_photo, $colorrgb[0], $colorrgb[1], $colorrgb[2]);
imagettftext($dst_photo, $watermarktext['size'], $watermarktext['angle'], $x + $ax, $y + $ay, $color, $watermarktext['fontpath'], $watermarktext['text']);
} else {
imageAlphaBlending($watermark_logo, true);
imageCopyMerge($dst_photo, $watermark_logo, $x, $y, 0, 0, $logo_w, $logo_h, $watermarktrans);
}
$targetfile = !$preview ? $this->targetfile : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
if($this->attachinfo['mime'] == 'image/jpeg') {
$imagefunc($dst_photo, $targetfile, $watermarkquality);
} else {
$imagefunc($dst_photo, $targetfile);
}
$this->attach['size'] = filesize($this->targetfile);
}
}
}
//ImageMagick的函数定义 Magickwand
function Thumb_IM($thumbwidth, $thumbheight, $preview = 0) {
global $thumbstatus, $imageimpath;
if($thumbstatus) {
list($img_w, $img_h) = $this->attachinfo;
$targetfile = !$preview ? ($thumbstatus == 1 ? $this->targetfile.'.thumb.jpg' : $this->targetfile) : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
if(!$this->animatedgif && ($img_w >= $thumbwidth || $img_h >= $thumbheight)) {
$exec_str = $imageimpath.'/convert -geometry '.$thumbwidth.'x'.$thumbheight.' '.$this->targetfile." ".$targetfile;
@exec($exec_str, $output, $return);
if(emptyempty($return) && emptyempty($output)) {
$this->attach['thumb'] = $thumbstatus == 1 ? 1 : 0;
}
}
}
}
function Watermark_IM($preview = 0) {
global $watermarkstatus, $watermarktype, $watermarktrans, $watermarkquality, $watermarktext, $imageimpath;
switch($watermarkstatus) {
case 1:
$gravity = 'NorthWest';
break;
case 2:
$gravity = 'North';
break;
case 3:
$gravity = 'NorthEast';
break;
case 4:
$gravity = 'West';
break;
case 5:
$gravity = 'Center';
break;
case 6:
$gravity = 'East';
break;
case 7:
$gravity = 'SouthWest';
break;
case 8:
$gravity = 'South';
break;
case 9:
$gravity = 'SouthEast';
break;
}
$targetfile = !$preview ? $this->targetfile : DISCUZ_ROOT.'./forumdata/watermark_temp.jpg';
if($watermarktype < 2) {
$watermark_file = $watermarktype == 1 ? DISCUZ_ROOT.'./images/common/watermark.png' : DISCUZ_ROOT.'./images/common/watermark.gif';
$exec_str = $imageimpath.'/composite'.
($watermarktype != 1 && $watermarktrans != '100' ? ' -watermark '.$watermarktrans.'%' : '').
' -gravity '.$gravity.
' '.$watermark_file.' '.$this->targetfile.' '.$targetfile;
} else {
$watermarktext['text'] = str_replace(array("\n", "\r", "'"), array('', '', '\''), $watermarktext['text']);
$watermarktext['angle'] = -$watermarktext['angle'];
$translate = $watermarktext['translatex'] || $watermarktext['translatey'] ? ' translate '.$watermarktext['translatex'].','.$watermarktext['translatey'] : '';
$skewX = $watermarktext['skewx'] ? ' skewX '.$watermarktext['skewx'] : '';
$skewY = $watermarktext['skewy'] ? ' skewY '.$watermarktext['skewy'] : '';
$exec_str = $imageimpath.'/convert'.
' -font "'.$watermarktext['fontpath'].'"'.
' -pointsize '.$watermarktext['size'].
(($watermarktext['shadowx'] || $watermarktext['shadowy']) && $watermarktext['shadowcolor'] ?
' -fill "rgb('.$watermarktext['shadowcolor'].')"'.
' -draw "'.
' gravity '.$gravity.$translate.$skewX.$skewY.
' rotate '.$watermarktext['angle'].
' text '.$watermarktext['shadowx'].','.$watermarktext['shadowy'].' \''.$watermarktext['text'].'\'"' : '').
' -fill "rgb('.$watermarktext['color'].')"'.
' -draw "'.
' gravity '.$gravity.$translate.$skewX.$skewY.
' rotate '.$watermarktext['angle'].
' text 0,0 \''.$watermarktext['text'].'\'"'.
' '.$this->targetfile.' '.$targetfile;
}
@exec($exec_str, $output, $return);
if(emptyempty($return) && emptyempty($output)) {
$this->attach['size'] = filesize($this->targetfile);
}
}
}
[/code]

© 2018 技术控 All Rights Reserved