filter = array('Watermark_Plugin', 'parse');
Helper::addAction('Watermark', 'Watermark_Action');
$dir = __TYPECHO_ROOT_DIR__ . '/usr/img';
if((is_dir($dir)|| @mkdir($dir, 0777)) && is_writable($dir)){
return _t('插件已经激活,请正确设置插件!');
}else {
return _t('usr目录权限限制,无法使用缓存功能');
}
}
/**
* 禁用插件方法,如果禁用失败,直接抛出异常
*
* @static
* @access public
* @return void
* @throws Typecho_Plugin_Exception
*/
public static function deactivate(){
Helper::removeAction('Watermark');
}
/**
* 获取插件配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form 配置面板
* @return void
*/
public static function config(Typecho_Widget_Helper_Form $form){
$vm_type= new Typecho_Widget_Helper_Form_Element_Checkbox('vm_type',
array( 'pic' => '图片',
'text' => '文字'),
array('pic'), '水印类型');
$form->addInput($vm_type);
$vm_pos_pic= new Typecho_Widget_Helper_Form_Element_Select('vm_pos_pic',array('随机','顶端左侧',
'顶端中间','顶端右侧','中部左侧','正中','中部右侧','底部左侧','底部中间','底部右侧'),9,_t('水印图片位置'));
$form->addInput($vm_pos_pic);
$vm_pos_text= new Typecho_Widget_Helper_Form_Element_Select('vm_pos_text',array('随机','顶端左侧',
'顶端中间','顶端右侧','中部左侧','正中','中部右侧','底部左侧','底部中间','底部右侧'),9,_t('水印文字位置'));
$form->addInput($vm_pos_text);
$file_list = scandir(dirname(__FILE__));
if($file_list){
$images = array();
$fonts = array();
foreach ($file_list as $file){
$ext = '';
$part = explode('.', $file);
if (($length = count($part)) > 1) {
$ext = strtolower($part[$length - 1]);
}
if('ttf' == $ext || 'ttc' == $ext) $fonts[]=$file;
if(in_array($ext, array('png','gif','jpg'))) $images[] = $file;
}
if(count($images)>0){
$img_msg = "可用图片: ". implode(',', $images)."请复制图片文件名到上方文本框中";
}else{
$img_msg = "目录中没有图片文件,无法使用图片水印功能";
}
if(count($fonts)>0){
$font_msg = "可用字体: ". implode(',', $fonts)."请复制字体文件名到输入框中";
}else{
$font_msg = "插件目录下没有字体文件,无法使用文字水印";
}
}else{
$img_msg = "插件目录下的图片文件名,注意大小写。";
$font_msg = "本插件目录下的字体文件。";
}
$vm_pic = new Typecho_Widget_Helper_Form_Element_Text('vm_pic', NULL, 'WM.png',
_t('水印图片'),_t($img_msg));
$vm_pic->input->setAttribute('class', 'mini');
$form->addInput($vm_pic);
$vm_text = new Typecho_Widget_Helper_Form_Element_Text('vm_text',null,"Typecho)))",
_t('水印文字'));
$form->addInput($vm_text);
$vm_font = new Typecho_Widget_Helper_Form_Element_Text('vm_font', NULL, 'lh.ttf',
_t('文字字体'),_t($font_msg));
$vm_font->input->setAttribute('class', 'mini');
$form->addInput($vm_font);
$vm_size = new Typecho_Widget_Helper_Form_Element_Text('vm_size', NULL, '16',
_t('文字大小'));
$vm_size->input->setAttribute('class', 'mini');
$form->addInput($vm_size);
$vm_color = new Typecho_Widget_Helper_Form_Element_Text('vm_color', NULL, '255,0,0',
_t('文字颜色'), _t('格式:255,255,255 或 #FF0000'));
$vm_color->input->setAttribute('class', 'mini');
$form->addInput($vm_color);
$vm_m_x = new Typecho_Widget_Helper_Form_Element_Text('vm_m_x', NULL, '0',
_t('水平微调'), _t('调节文字的水平位置,输入整数,可以为负'));
$vm_m_x->input->setAttribute('class', 'mini');
$form->addInput($vm_m_x->addRule('isInteger', _t('必须是纯数字')));
$vm_m_y = new Typecho_Widget_Helper_Form_Element_Text('vm_m_y', NULL, '0',
_t('竖直微调'), _t('调节文字的竖直位置,输入整数,可以为负'));
$vm_m_y->input->setAttribute('class', 'mini');
$form->addInput($vm_m_y->addRule('isInteger', _t('必须是纯数字')));
$vm_width = new Typecho_Widget_Helper_Form_Element_Text('vm_width', NULL, '0',
_t('调整图片宽度'), _t('为了使水印效果一致,可以限制图片的宽度,建议和缓存搭配使用。设为 0 则不调整。'));
$vm_width->input->setAttribute('class', 'mini');
$form->addInput($vm_width->addRule('isInteger', _t('必须是纯数字')));
$vm_alpha = new Typecho_Widget_Helper_Form_Element_Text('vm_alpha', NULL, '0',
_t('图片透明度'), _t('取0-100之间的整数,0为不透明,100为全透明。'));
$vm_alpha->input->setAttribute('class', 'mini');
$form->addInput($vm_alpha->addRule('isInteger', _t('必须是纯数字')));
$dir = __TYPECHO_ROOT_DIR__ . '/usr/img';
if(is_dir($dir) && is_writable($dir)){
$url = Typecho_Widget::widget('Widget_Options')->index . "/action/Watermark?clear";
$msg = '清除缓存文件可以 点击这里 执行清空缓存功能。';
}else{
$msg = '缓存已清空,或是未用缓存(如果启用缓存后每次设置均出现此提示,请检查目录权限)';
}
$vm_cache= new Typecho_Widget_Helper_Form_Element_Radio('vm_cache',
array( 'cache' => '使用缓存',
'nocache' => '不使用缓存'),
'nocache', '使用缓存',_t($msg));
$form->addInput($vm_cache);
}
/**
* 个人用户的配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
/**
* 解析内容
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function parse($value_o)
{
if('index.php' === basename($_SERVER['SCRIPT_NAME'])){
$options = Typecho_Widget::widget('Widget_Options');
$cache_ab = $options->plugin('Watermark')->vm_cache?$options->plugin('Watermark')->vm_cache:FALSE;
$value = $value_o['text'];
if($value_o['isMarkdown']){
$regex = "/\[\d{1,}\]:\s(.*?.(gif|jpg|png))/";
}else{
$regex = "//";
}
preg_match_all($regex, $value, $matches);
$count = count($matches[0]);
for($i = 0;$i < $count;$i++) {
$url = $matches[1][$i];
$m = parse_url($url);
$ext = strtolower(pathinfo($m['path'], PATHINFO_EXTENSION));
if( $ext=='gif' && self::IsAnimatedGif( Watermark_Action::lujin(__TYPECHO_ROOT_DIR__ .$m['path']))){ continue;}//避开动态gif
$cache_file = 'usr/img/'.md5($m['path']).'.'.$ext;
if('cache' == $cache_ab && file_exists('./'.$cache_file)){
$mUrl = $options->siteUrl . $cache_file;
}else{
$mUrl = $options->index.'/action/Watermark?mark='.base64_encode($m['path']);
}
$url = str_replace($url, $mUrl, $matches[0][$i]);
$value = str_replace($matches[0][$i], $url, $value);
}
$value_o['text'] = $value;
}
return $value_o;
}
public static function IsAnimatedGif($filename){
$fp = fopen($filename, 'rb');
$size = filesize($filename)>1024?1024:filesize($filename);
$filecontent = fread($fp, $size);
fclose($fp);
return strpos($filecontent,chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0') === FALSE?0:1;
}
}