Filter

更新时间:2023-12-24 19:25

Filter 技术是servlet 2.3 新增加的功能。servlet2.3是sun公司于2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则。在众多参与者的共同努力下,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高。

特点功能

它新增加的功能包括:

1. 应用程序生命周期事件控制;

2. 新的国际化;

3. 澄清了类的装载规则

4. 新的错误及安全属性;

5. 不赞成使用HttpUtils 类;

6. 各种有用的方法;

7. 阐明并扩展了几个servlet DTD;

8. filter功能.

功能介绍

其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链).

包括

1. 在servlet被调用之前截获;

2. 在servlet被调用之前检查servlet request;

3. 根据需要修改request头和request数据;

4. 根据需要修改response头和response数据;

5. 在servlet被调用之后截获.

你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等。

一个filter必须实现javax.servlet.Filter。

三个方法

1. void setFilterConfig(FilterConfig config) //设置filter 的配置对象;

2. FilterConfig getFilterConfig() //返回filter的配置对象;

3. void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) //执行filter 的工作.

注:现setFilterConfig和getFilterConfig方法已取消,代之为init(FilterConfig config)和destory()方法。

服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置FilterConfig为空来指明filter已经终结.

每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下一个filter.

一个filter可以包装request 或response以改变几个方法和提供用户定制的属性.Api2.3提供了HttpServletRequestWrapper 和HttpServletResponseWrapper来实现.它们能分派最初的request和response.如果要改变一个方法的特性,必须继承wapper和重写方法.下面是一段简单的日志filter用来记录所有request的持续时间.

public class LogFilter implements Filter {

FilterConfig config;

public void setFilterConfig(FilterConfig config) {

this.config = config;

}

public FilterConfig getFilterConfig() {

return config;

}

public void doFilter(ServletRequest req,

ServletResponse res,

FilterChain chain) {

ServletContext context = getFilterConfig().getServletContext();

long bef = System.currentTimeMillis();

chain.doFilter(req,res); // no chain parameter needed here

long aft = System.currentTimeMillis();

}

}

当server调用setFilterConfig(),filter保存config信息.在doFilter()方法中通过config信息得到servletContext.如果要运行这个filter,必须去配置到web.xml中.以tomcat4.01为例:

log //filter 名字

LogFilter //filter class(上例的servlet)

log

< url-pattern>/*< /url-pattern>

servletname

servletclass

servletname

*

把这个web.xml放到web-inf中(详请参考tomcat帮助文档).

当每次请求一个request时(如index.jsp),先到LogFilter中去并调用doFilter()方法,然后才到各自的servlet中去.如果是一个简单的servlet(只是一个页面,无任何输出语句),那么可能的输出是:

Request to /index.jsp: 10

PHP

简介

在 PHP 中,Filter 用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。

安装

Filter 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

函数

PHP:指示支持该函数的最早的 PHP 版本。

filter_has_var() 检查是否存在指定输入类型的变量,php版本5

filter_id() 返回指定过滤器的 ID 号,php版本5

filter_input() 从脚本外部获取输入,并进行过滤,php版本5

filter_input_array() 从脚本外部获取多项输入,并进行过滤,php版本5

filter_list() 返回包含所有得到支持的过滤器的一个数组,php版本5

filter_var_array() 获取多个变量,并进行过滤,php版本为5

filter_var() 获取一个变量,并进行过滤,php版本为5

函数

PHP Filter 函数

MFC

概念

Filter是一个COM组件,由一个或多个Pin组成。Pin也是一个COM组件。Filter文件的扩展名为.ax,但也可以是.dll。Filter根据其包含Input pin或Output pin的情况(或在Filter Graph中的位置),大致可分为三类:Source Filter(仅有Output pin)、Transform Filter(同时具有Input pin和Output pin)和Renderer Filter(仅有Input pin)。

一般情况下,创建Filter使用一个普通的Win32 DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过调用CoCreateInstance函数创建Filter实例;Filter与应用程序在二进制级别协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。这种情况下,Filter不需注册为COM组件,Filter与应用程序之间的协作是源代码级别的;创建Filter实例,不再使用CoCreateInstance函数,而是直接new出一个Filter对象,如下:

m_pFilterObject = new CFilterClass();

// make the initial refcount 1 to match COM creation

m_pFilterObject ->AddRef();

因为Filter的基类实现了对象的引用计数,所以即使在第二种情况下,对创建后的Filter对象的操作也完全可以遵循COM标准。

Filter是一个独立功能模块,最好不要将Filter依赖于其他第三方的DLL。因为Filter具有COM的位置透明性特点,Filter文件可以放在硬盘的任何位置,只要位置移动后重新注册。但此时,如果Filter依赖其他DLL,则Filter对该DLL的定位就会出现问题。

Filter不能脱离Filter Graph单独使用。所以,如果你想绕过Filter Graph直接使用Filter实现的模块功能,请将你的Filter移植成DMO(DirectX Media Object)。对于DirectShow应用程序开发者来说,还有一点,请不要忘记使用OleInitialize进行初始化。

注册

Filter是COM组件,所以在使用前一定要注册。Filter的注册程序为regsvr32.exe。如果带上命令行参数/u,表示注销;如果带上是/s,表示不弹出任何注册/注销成功与否的提示对话框。如果你想在Build Filter项目的时候进行自动注册,请在VC的Project settings的Custom Build页如下设置:

Description: Register filter

Commands: regsvr32 /s /c $(TargetPath)

COM组件,Filter信息标示了我们通过Graphedit看到的描述这个Filter的信息。如果你不想让Graphedit看到(或者让Filter枚举器找到)你写的Filter,你完全可以不注册Filter信息。而且不用担心,你这么做也完全不会影响Filter的功能。

屏蔽注册Filter信息的方法也很简单。因为CBaseFilter实现了IAMovieSetup接口的两个函数:Register和Unregister。我们只需重载这两个函数,直接return S_OK就行了。

Filter的Merit值。这个值是微软的“智能连接”函数使用的。在Graphedit中,当我们加入一个Source Filter后,在它的pin上执行“Render”,会自动连上一些Filter。Merit的值参考如下:

MERIT_PREFERRED = 0x800000,

MERIT_NORMAL = 0x600000,

MERIT_UNLIKELY = 0x400000,

MERIT_DO_NOT_USE = 0x200000,

MERIT_SW_COMPRESSOR = 0x100000,

MERIT_HW_COMPRESSOR = 0x100050

Merit值只有大于MERIT_DO_NOT_USE的时候才有可能被“智能连接”使用;Merit的值越大,这个Filter的机会就越大。

连接过程

Filter只有加入到Filter Graph中并且和其它Filter连接成完整的链路后,才会发挥作用。Filter之间的连接(也就是Pin之间的连接),实际上是连接双方的一个Media type的协商过程。连接的方向总是从Output pin指向Input pin。连接的大致过程为:如果调用连接函数时已经指定了完整的Media type,则用这个Media type进行连接,成功与否都结束连接过程;如果没有指定或不完全指定了Media type,则进入下面的枚举过程。枚举欲连接的Input pin上所有的Media type,逐一用这些Media type与Output pin进行连接(如果连接函数提供了不完全Media type,则要先将每个枚举出来的Media type与它进行匹配检查),如果Output pin也接受这种Media type,则Pin之间的连接宣告成功;如果所有Input pin上枚举的Media type,Output pin都不支持,则枚举Output pin上的所有Media type,并逐一用这些Media type与Input pin进行连接。如果Input pin接受其中的一种Media type,则Pin之间的连接到此也宣告成功;如果Output pin上的所有Media type,Input pin都不支持,则这两个Pin之间的连接过程宣告失败。

每个Pin都可以实现GetMediaType函数来提供该Pin上支持的所有Preferred Media type(但一般只在Output pin上实现,Input pin主要实现CheckMediaType看是否支持当前提供的Media type就行了)。连接过程中,Pin上枚举得到的所有Media type就是这里提供的。

在CBasePin类中有一个protected的成员变量m_bTryMyTypesFirst,默认值为false。在我们定制Filter的Output pin中改变这个变量的值为true,可以定制我们自己的连接过程(先枚举Output pin上的Media type)。

当Pin之间的连接成功后,各自的pin上都会调用CompleteConnect函数。我们可以在这里取得一些连接上的Media type的信息,以及进行一些计算等。在Output pin的CompleteConnect实现中,还有一个重要的任务,就是协商Filter Graph运行起来后Sample传输使用的内存配置情况。这同样是一个交互过程:首先要询问一下Input pin上的配置要求,如果Input pin提供内存管理器(Allocator),则优先使用Input pin上的内存管理器;否则,使用Output pin自己生成的内存管理器。我们一般都要实现DecideBufferSize来决定存放Sample的内存大小。注意:这个过程协商完成之后,实际的内存并没有分配,而要等到Output pin上的Active函数调用。

概述

Media type一般可以有两种表示:AM_MEDIA_TYPE和CMediaType。前者是一个Struct,后者是从这个Struct继承过来的类。

每个Media type有三部分组成:Major type、Subtype和Format type。这三个部分都使用GUID来唯一标示。Major type主要定性描述一种Media type,比如指定这是一个Video,或Audio或Stream等;Subtype进一步细化Media type,如果Video的话可以进一步指定是UYVY或YUY2或RGB24或RGB32等;Format type用一个Struct更进一步细化Media type。

如果Media type的三个部分都是指定了某个具体的GUID值,则称这个Media type是完全指定的;如果Media type的三个部分中有任何一个值是GUID_NULL,则称这个Media type 是不完全指定的。GUID_NULL具有通配符的作用。

常用的Major type:

MEDIATYPE_Video;

MEDIATYPE_Audio;

MEDIATYPE_AnalogVideo; // Analog capture

MEDIATYPE_AnalogAudio;

MEDIATYPE_Text;

MEDIATYPE_Midi;

MEDIATYPE_Stream;

MEDIATYPE_Interleaved; // DV camcorder

MEDIATYPE_MPEG1SystemStream;

MEDIATYPE_MPEG2_PACK;

MEDIATYPE_MPEG2_PES;

MEDIATYPE_DVD_ENCRYPTED_PACK;

MEDIATYPE_DVD_NAVIGATION;

常用的Subtype:

MEDIASUBTYPE_YUY2;

MEDIASUBTYPE_YVYU;

MEDIASUBTYPE_YUYV;

MEDIASUBTYPE_UYVY;

MEDIASUBTYPE_YVU9;

MEDIASUBTYPE_Y411;

MEDIASUBTYPE_RGB4;

MEDIASUBTYPE_RGB8;

MEDIASUBTYPE_RGB565;

MEDIASUBTYPE_RGB555;

MEDIASUBTYPE_RGB24;

MEDIASUBTYPE_RGB32;

MEDIASUBTYPE_ARGB32; // Contains alpha value

MEDIASUBTYPE_Overlay;

MEDIASUBTYPE_MPEG1Packet;

MEDIASUBTYPE_MPEG1Payload; // Video payload

MEDIASUBTYPE_MPEG1AudioPayload; // Audio payload

MEDIASUBTYPE_MPEG1System; // A/V payload

MEDIASUBTYPE_MPEG1VideoCD;

MEDIASUBTYPE_MPEG1Video;

MEDIASUBTYPE_MPEG1Audio;

MEDIASUBTYPE_Avi;

MEDIASUBTYPE_Asf;

MEDIASUBTYPE_QTMovie;

MEDIASUBTYPE_PCM;

MEDIASUBTYPE_WAVE;

MEDIASUBTYPE_dvsd; // DV

MEDIASUBTYPE_dvhd;

MEDIASUBTYPE_dvsl;

MEDIASUBTYPE_MPEG2_VIDEO;

MEDIASUBTYPE_MPEG2_PROGRAM;

MEDIASUBTYPE_MPEG2_TRANSPORT;

MEDIASUBTYPE_MPEG2_AUDIO;

MEDIASUBTYPE_DOLBY_AC3;

MEDIASUBTYPE_DVD_SUBPICTURE;

MEDIASUBTYPE_DVD_LPCM_AUDIO;

MEDIASUBTYPE_DVD_NAVIGATION_PCI;

MEDIASUBTYPE_DVD_NAVIGATION_DSI;

MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER;

常用的Format type

FORMAT_None

FORMAT_DvInfo DVINFO

FORMAT_MPEGVideo MPEG1VIDEOINFO

FORMAT_MPEG2Video MPEG2VIDEOINFO

FORMAT_VideoInfo VIDEOINFOHEADER

FORMAT_VideoInfo2 VIDEOINFOHEADER2

FORMAT_WaveFormatEx WAVEFORMATEX

平台

概念

WordPress中的Filter是一些函数,这些函数在数据写到数据库之前或者发送到浏览器之前被调用,完成一些文字的修改和过滤功能。WordPress二次开发者可以自行注册添加Filter,WordPress会根据各个Filter的优先级来顺序调用,从而达到扩展WordPress,完成开发者指定功能的目的。

声明注册

Filter实际上只是一些函数,在编写函数之前,要确定这个Filter属于哪一类,不同类的Filter,所需要的参数是不一样的,缺省情况下,参数个数为一个。在WordPress中,Filter的类名是通过Tag来指定的,每个Tag下可以定义很多Filter,每个Filter又可以有自己的优先级。Filter是通过Tag来调用的,每次调用,注册在该Tag下的所有的Filter都会被运行,这些Filter的调用顺序是根据注册时定义的优先级来确定的,优先级数值低的先执行,优先级数值高的后执行。

要知道具体某一类Filter的参数是什么,需要先知道该类Filter的Tag名,不同的Tag在不同的时候会被调用,通过查阅WordPress文档找到添加Filter的适当地方。然后在WordPress的源码中搜索该Tag的名字,查找某个已加入该Tag的函数或者说是Filter,确定函数参数以后就可以编写自己的实现函数了。注意要在函数中返回处理过后的内容以供其他的Filter继续处理。

当Filter定义完成以后,通过Add_filter这个函数将Filter添加到整个WordPress系统中。其中Add_filter函数的声明是这样的:

function add_filter(,, = 10, = 1)

其中第一个参数是Tag名,也就是上面提到的Filter类名,第二个参数是实现具体功能的函数名,第三个参数是优先级,缺省为10,第四个参数是改Filter接受参数的个数,缺省为一个。

如果想让Filter在比较后面调用,可以将第三个参数设得比10大,那么一般情况下,该Filter会在WordPress自带Filter都调用完以后再调用这个新加的Filter。反之则可以把优先级设得比10小。

实例

作为一个例子,假设我们想要在每篇文章下面加上这篇文章的链接地址,声明一下版权信息。也就是在每篇文章后面加上这么一句话:

“本文地址:http://xxx.xxx.xxx/ 转载请注明”

通过查阅WordPress文档知,每个单篇文章在发送到浏览器之前要调用Filter the_content。于是这个Filter可以加到Tag the_content里面。并且通过查阅一个该Tag里面的函数知,这类Filter只有一个参数进来,那就是文章的内容本身。这样该Filter就比较清楚了,只要在文章内容的最后添加上面的一行声明就好了。另外,为了保证该Filter在最后被调用,在注册该Filter的时候,把优先级数字设得稍微大一点。具体代码如下:

function my_copyright()

{

return ;

}

当然,这只是个最简单的例子,要实用还需要一些改动,但是添加一个Filter的过程基本上就是这样。

滤镜样式

数据传送

Filter之间的数据是通过Sample来传送的。Sample是一个COM组件,拥有自己的一段数据缓冲。Sample由Allocator统一管理。

Filter之间数据传送的方式有两种:Push模式和Pull模式。

css中的filter滤镜功能

CSS静态滤镜样式 (filter)(只有IE4.0以上支持)

CSS静态滤镜样式的使用方法:{ filter : filtername( parameters1,parameters2,...) }

Filter样式 简要说明 支持参数

alpha 设置图片或文字的不透明度 opacity、finishOpacity、style、startX、startY、finishX、finishY、add、direction、strength

blur 在指定的方向和位置上产生动感模糊效果 add、direction、strength

chroma 对所选择的颜色进行透明处理 color

dropShadow 在指定的方向和位置上产生阴影 color、offX、offY、positive

flipH 沿水平方向翻转对象

flipV 沿垂直方向翻转对象

glow 在对象周围上发光 color、strength

gray 将对象以灰度处理

invert 逆转对象颜色

light 对对象进行模拟光照

mask 对对象生成掩膜 color

shadow 沿对象边缘产生阴影 color、direction

wave 在垂直方向产生正弦波形 add、freq、lightStrength、phase、strength

xray 改变对象颜色深度,并绘制黑白图象

以上就是静态滤镜的全部内容,要注意的是CSS是区分大小写的!

动态滤镜

动态滤镜可以为页面添加动人的淡入淡出、图象转化效果,它可以分为两种blend(混合)和reveal(显示),前者可以使对象渐渐消失或出现,后者提供了24种图象转化的效果。对于动态滤镜的调用除去象在静态滤镜中要定义的滤镜类型,参数等等,还用到脚本语言控制它的状态。

首先,在开始一个动态效果之前,先需要进行装备(Apply),然后播放(Play)动态效果,在动态效果进行中还可以中断动态效果(Stop),以上可以用下面的方法实现:

对象名.filters(滤镜数值).Apply()

对象名.filters(滤镜数值).Play()

对象名.filters(滤镜数值).Stop()

对于滤镜状态的判断可以通过“对象名.filters(滤镜数值).status”判断,该值为0时,表示滤镜未执行,为1时,表示滤镜已经完成,为2时表示滤镜在执行中。

在定义filter时,如上面所提到的,可以有混合(“filter:blendTrans(duration=时间数值)”,duration表示滤镜执行需要的时间,单位为秒)和显示(“filter:revealTrans(duration=时间数值,transition=过渡类型)”,过渡类型为从0-23的数值)两种。

滤镜还未被W3C正式承认。滤镜只是微软IE浏览器的组成部分,不能用于Netscape浏览器。制定有关标准的组织正在就此进行讨论,但尚未达成最后定论。在我看来,滤镜是一种非常有趣而且是制作精彩的视觉效果必不可少的一部分。滤镜能节省带宽,而且是你能在制作奇妙的

视觉设计时使用文字格式,而不必先制作庞大的文字位图以取得相同的效果。

但由于这些功能尚未成为HTML的正式组成部分,所以并不是所有的浏览器都能看到这些特色。有些时候,你必须考虑以传统的方式制作相同的效果,当然,你不得不继续将庞大的GIF文件塞到网页之中。

沉默...沉默...

CSS滤镜filter详解

(Filtername为滤镜的名称,fparameter1、fparameter2等是滤镜的参数)

滤镜说明:

alpha:设置透明层次

blur:创建高速度移动效果,即模糊效果

chroma:制作专用颜色透明

DropShadow:创建对象的固定影子

FlipH:创建水平镜像图片

FlipV:创建垂直镜像图片

glow:加光辉在附近对象的边外

gray:把图片灰度化

invert:反色

light:创建光源在对象上

mask:创建透明掩膜在对象上

shadow:创建偏移固定影子

wave:波纹效果

Xray

Alpha

说明:

Opacity:起始值,取值为0~100,0为透明,100为原图。

FinishOpacity:目标值。

Style:1或2或3

StartX:任意值

StartY:任意值

blur

说明:

Add:一般为1,或0。

Direction:角度,0~315度,步长为45度。

Strength:效果增长的数值,一般5即可。

Chroma

说明:color:#rrggbb格式,任意。

DropShadow

说明:Color:#rrggbb格式,任意。

Offx:X轴偏离值。

Offy:Y轴偏离值。

Positive:1或0。

FlipH

例子:filter:FlipH

FlipV

例子:filter:FlipV

glow

说明:

Color:发光颜色。

Strength:强度(0-100)

gray

例子:filter:Gray

invert

例子:filter:Invert

mask

shadow

语法:filter:Shadow(Color=color,Direction=direction)

说明:

Color:#rrggbb格式。

Direction:角度,0-315度,步长为45度。

wave

语法:filter: Wave(Add=add,Freq=freq,LightStrength=strength,Phase=phase, Strength=strength)

说明:

Add:一般为1,或0。

Freq:变形值。

LightStrength:变形百分比。

Phase:角度变形百分比。

Strength:变形强度。

Xray

例子:filter:Xray

工业金属乐队Filter由曾於89年到93年间担任於工业金属摇滚名团Nine Inch Nails之吉他手的Richard Patrick创建,他坚信他有绝对的新玩意儿,能做出不同於NIN时期所带出的音乐色彩,所包容与展现的音乐性也更大,便毅然决然地离开事业正如日中天的NIN。之后便与也曾在91年至93年间待过NIN的Brian Liesegang以两人完成了95年的首张专辑,在音乐上仍保有NIN工业金属/工业舞曲的狂野力道,不仅加重了摇滚与金属的份量,更加入庞克、低保真等不同的音乐风格进去,成功地让Patrick跨出旧有的音乐藩篱,朝向更多元的音乐经营理念。

Filter也为多部电影,包括【The Crow-City Of Angels】、【Spawn】、【The X-Files:Fight The Future】、《2012》(2009)演唱单曲。97年Brian Liesegang因音乐理念的不同而离团后,Filter再加入Frank Cavanaugh(贝斯手)、Steven Gillis(鼓手)及Geno Lenardo(吉它手)三位新血成为一个更完整的四人乐团,并推出99年热门大作「Title Of Record」,此张专辑并获得全美著名另类摇滚杂志A.P.满分推崇。其中《Fades Like a Photograph》为2009年上映的《2012》的第二首片尾曲。

数学软件

FILTER One-dimensional digital filter.

Y = FILTER(B,A,X) filters the data in vector X with the

filter described by vectors A and B to create the filtered

implementation of the standard difference equation:

a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)

- a(2)*y(n-1) - ... - a(na+1)*y(n-na)

If a(1) is not equal to 1,FILTER normalizes the filter

coefficients by a(1).

FILTER always operates along the first non-singleton dimension,

namely dimension 1 for column vectors and non-trivial matrices,

and dimension 2 for row vectors.

[Y,Zf] = FILTER(B,A,X,Zi) gives access to initial and final

conditions,Zi and Zf,of the delays. Zi is a vector of length

MAX(LENGTH(A),LENGTH(B))-1,or an array with the leading dimension

of size MAX(LENGTH(A),LENGTH(B))-1 and with remaining dimensions

matching those of X.

FILTER(B,A,X,[],DIM) or FILTER(B,A,X,Zi,DIM) operates along the

dimension DIM.

翻译:

Y = filter(B,A,X) 过滤向量X,通过系数向量A,B,产生向量Y。

[Y,Zf] = filter(B,A,X,Zi)给出初始和最终条件。ZI和Zf是延迟。

音乐专辑

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}