Example of components widely used
This page show how to configure custom engine's components using Spring xml configuration.
Spring is not a requirement, you can use these components out of the box without Spring using their constructor.
See also : customize an engine
Base components
Fonts
<bean id="fontArial" class="java.awt.Font" > <constructor-arg index="0"><value>Arial</value></constructor-arg> <constructor-arg index="1"><value>0</value></constructor-arg> <constructor-arg index="2"><value>10</value></constructor-arg> </bean> <bean id="fontTahoma" class="java.awt.Font" > <constructor-arg index="0"><value>Tahoma</value></constructor-arg> <constructor-arg index="1"><value>0</value></constructor-arg> <constructor-arg index="2"><value>10</value></constructor-arg> </bean> <bean id="fontVerdana" class="java.awt.Font" > <constructor-arg index="0"><value>Verdana</value></constructor-arg> <constructor-arg index="1"><value>0</value></constructor-arg> <constructor-arg index="2"><value>10</value></constructor-arg> </bean> <bean id="fontComic" class="java.awt.Font" > <constructor-arg index="0"><value>Comic sans MS</value></constructor-arg> <constructor-arg index="1"><value>0</value></constructor-arg> <constructor-arg index="2"><value>10</value></constructor-arg> </bean> <bean id="fontLucida" class="java.awt.Font" > <constructor-arg index="0"><value>Lucida console</value></constructor-arg> <constructor-arg index="1"><value>0</value></constructor-arg> <constructor-arg index="2"><value>10</value></constructor-arg> </bean>
Color generators
Single color
<bean id="colorGenYellow" class="com.octo.captcha.component.image.color.SingleColorGenerator" > <constructor-arg index="0"><ref bean="yellow"/></constructor-arg> </bean>
List of colors
<bean id="colorGenRandomList" class="com.octo.captcha.component.image.color.RandomListColorGenerator" > <constructor-arg index="0"> <list> <ref bean="yellow"/> <ref bean=" blue "/> <ref bean=" lightBlue "/> </list> </constructor-arg> </bean> <bean id="blue" class="java.awt.Color" > <constructor-arg type="int" index="0"><value>0</value></constructor-arg> <constructor-arg type="int" index="1"><value>0</value></constructor-arg> <constructor-arg type="int" index="2"><value>255</value></constructor-arg> </bean> <bean id="lightBlue" class="java.awt.Color" > <constructor-arg type="int" index="0"><value>200</value></constructor-arg> <constructor-arg type="int" index="1"><value>200</value></constructor-arg> <constructor-arg type="int" index="2"><value>255</value></constructor-arg> </bean> <bean id="yellow" class="java.awt.Color" > <constructor-arg type="int" index="0"><value>255</value></constructor-arg> <constructor-arg type="int" index="1"><value>255</value></constructor-arg> <constructor-arg type="int" index="2"><value>0</value></constructor-arg> </bean>
Range of colors
<bean id="colorGenRandomBlue" class="com.octo.captcha.component.image.color.RandomRangeColorGenerator" > <constructor-arg index="0"> <list> <value>150</value> <value>255</value> </list> </constructor-arg> <constructor-arg index="1"> <list> <value>0</value> <value>50</value> </list> </constructor-arg> <constructor-arg index="2"> <list> <value>200</value> <value>255</value> </list> </constructor-arg> <constructor-arg index="3"> <list> <value>255</value> <value>255</value> </list> </constructor-arg> </bean>
Locales
<bean id="java.util.Locale.FRANCE" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/> <bean id="java.util.Locale.US" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
Special components
Backgrounds
<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator" > <constructor-arg index="0"><value>300</value></constructor-arg> <constructor-arg index="1"><value>100</value></constructor-arg> </bean> <bean id="backGenFunky" class="com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator" > <constructor-arg index="0"><value>300</value></constructor-arg> <constructor-arg index="1"><value>100</value></constructor-arg> <constructor-arg type="com.octo.captcha.component.image.color.ColorGenerator" index="2"><ref bean="colorGenRandomList"/></constructor-arg> <constructor-arg type="com.octo.captcha.component.image.color.ColorGenerator" index="3"><ref bean="colorGenRandomList"/></constructor-arg> <constructor-arg type="com.octo.captcha.component.image.color.ColorGenerator" index="4"><ref bean="colorGenRandomList"/></constructor-arg> <constructor-arg type="com.octo.captcha.component.image.color.ColorGenerator" index="5"><ref bean="colorGenRandomList"/></constructor-arg> <constructor-arg index="6"><value>0.2f</value></constructor-arg> </bean> <bean id="backGenMultiShape" class="com.octo.captcha.component.image.backgroundgenerator.MultipleShapeBackgroundGenerator" > <constructor-arg index="0"><value>300</value></constructor-arg> <constructor-arg index="1"><value>100</value></constructor-arg> <!--firstEllipseColorGenerator--> <constructor-arg index="2"><ref bean="lightBlue"/></constructor-arg> <!--secondEllipseColorGenerator--> <constructor-arg index="3"><ref bean="lightRed"/></constructor-arg> <!--spaceBetweenLine--> <constructor-arg index="4"><value>10</value></constructor-arg> <!--spaceBetweenCircle--> <constructor-arg index="5"><value>5</value></constructor-arg> <!--ellipseHeight--> <constructor-arg index="6"><value>10</value></constructor-arg> <!--ellipseWidth--> <constructor-arg index="7"><value>6</value></constructor-arg> <!--firstRectangleColorGenerator--> <constructor-arg index="8"><ref bean="red"/></constructor-arg> <!--secondRectangleColorGenerator--> <constructor-arg index="9"><ref bean="white"/></constructor-arg> <!--firstRectangleColorGenerator--> <constructor-arg index="10"><value>3</value></constructor-arg> </bean> <bean id="backGenPicture" class="com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator" > <constructor-arg index="0"><value>300</value></constructor-arg> <constructor-arg index="1"><value>100</value></constructor-arg> <constructor-arg index="2"><ref bean="path"/></constructor-arg> </bean> <bean id="path" class="java.lang.String" > <constructor-arg><value>\home\jcaptcha\conf\gimpybackgrounds</value></constructor-arg> </bean>
Deformations
Deformations can be build with ImageFilter, like JhLabs Filtres, and injected in a ImageDeformationByFilters component.
<bean id="sphere" class="com.jhlabs.image.SphereFilter" > <property name="refractionIndex"><value>1</value></property> </bean> <bean id="emboss" class="com.jhlabs.image.EmbossFilter" > <property name="bumpHeight"><value>1.0</value></property> </bean> <bean id="rippleBack" class="com.jhlabs.image.RippleFilter" > <property name="waveType"><value>3</value></property> <property name="XAmplitude"><value>10</value></property> <property name="YAmplitude"><value>3</value></property> <property name="XWavelength"><value>20</value></property> <property name="YWavelength"><value>10</value></property> <property name="edgeAction"><value>1</value></property> </bean> <bean id="smear" class="com.jhlabs.image.SmearFilter" > <property name="shape"><value>0</value></property> <property name="distance"><value>15</value></property> <property name="density"><value>0.4</value></property> <property name="scatter"><value>0.5</value></property> <property name="angle"><value>0.0</value></property> <property name="mix"><value>0.6</value></property> <property name="fadeout"><value>0</value></property> </bean> <bean id="ripple" class="com.jhlabs.image.RippleFilter" > <property name="waveType"><value>1</value></property> <property name="XAmplitude"><value>2</value></property> <property name="YAmplitude"><value>2</value></property> <property name="XWavelength"><value>10</value></property> <property name="YWavelength"><value>10</value></property> <property name="edgeAction"><value>1</value></property> </bean> <bean id="ripple2" class="com.jhlabs.image.RippleFilter" > <property name="waveType"><value>2</value></property> <property name="XAmplitude"><value>2</value></property> <property name="YAmplitude"><value>2</value></property> <property name="XWavelength"><value>10</value></property> <property name="YWavelength"><value>10</value></property> <property name="edgeAction"><value>1</value></property> </bean> <bean id="ripple3" class="com.jhlabs.image.RippleFilter" > <property name="waveType"><value>5</value></property> <property name="XAmplitude"><value>5</value></property> <property name="YAmplitude"><value>5</value></property> <property name="XWavelength"><value>10</value></property> <property name="YWavelength"><value>10</value></property> <property name="edgeAction"><value>1</value></property> </bean> <bean id="twirl" class="com.jhlabs.image.TwirlFilter" > <property name="angle"><value>0.8</value></property> </bean> <bean id="water" class="com.jhlabs.image.WaterFilter" > <property name="amplitude"><value>2</value></property> <property name="antialias"><value>true</value></property> <property name="wavelength"><value>20</value></property> </bean> <bean id="weaves" class="com.jhlabs.image.WeaveFilter" > <property name="useImageColors"><value>true</value></property> <property name="XGap"><value>2</value></property> <property name="XWidth"><value>10</value></property> <property name="YWidth"><value>16</value></property> <property name="YGap"><value>6</value></property> </bean> <bean id="crystal" class="com.jhlabs.image.CrystalizeFilter" > <property name="scale"><value>0.5</value></property> <property name="gridType"><value>1</value></property> <property name="fadeEdges"><value>false</value></property> <property name="edgeThickness"><value>0.4</value></property> <property name="randomness"><value>1.0</value></property> </bean> <bean id="smearDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="smear"/> </list> </constructor-arg> </bean> <bean id="rippleDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="ripple"/> </list> </constructor-arg> </bean> <bean id="ripple2Def" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="ripple2"/> </list> </constructor-arg> </bean> <bean id="ripple3Def" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="ripple3"/> </list> </constructor-arg> </bean> <bean id="sphereDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="sphere"/> </list> </constructor-arg> </bean> <bean id="waterDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="water"/> </list> </constructor-arg> </bean> <bean id="embossDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="emboss"/> </list> </constructor-arg> </bean> <bean id="rippleDefBack" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="rippleBack"/> </list> </constructor-arg> </bean> <bean id="cristalDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="crystal"/> </list> </constructor-arg> </bean> <bean id="weavesDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="weaves"/> </list> </constructor-arg> </bean> <bean id="twirlDef" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <list> <ref bean="twirl"/> </list> </constructor-arg> </bean> <bean id="none" class="com.octo.captcha.component.image.deformation.ImageDeformationByFilters" > <constructor-arg index="0"> <null/> </constructor-arg> </bean>