独行之狼
4 years ago
commit
609688f12c
50 changed files with 1901 additions and 0 deletions
@ -0,0 +1,7 @@ |
|||||||
|
/* |
||||||
|
* This file was generated by the Gradle 'init' task. |
||||||
|
*/ |
||||||
|
|
||||||
|
dependencies { |
||||||
|
system 'com.fr.com.fr.plugin.imageProcess:gson:1.0' |
||||||
|
} |
@ -0,0 +1,125 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<project basedir="." default="jar" name="plugin"> |
||||||
|
<!-- JDK路径,根据自己机器上实际位置修改--> |
||||||
|
<property name="jdk.home" value="I:\Program Files\Java\jdk1.8.0_181" /> |
||||||
|
|
||||||
|
<property name="libs" value="${basedir}/lib"/> |
||||||
|
<property name="publicLibs" value=""/> |
||||||
|
<property name="destLoc" value="."/> |
||||||
|
<property name="classes" value="classes"/> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<property name="current-version" value="1.0"/> |
||||||
|
|
||||||
|
<!-- 插件版本--> |
||||||
|
<property name="plugin-version" value="${current-version}"/> |
||||||
|
<!-- 插件名字--> |
||||||
|
<property name="plugin-name" value="imageProcess"/> |
||||||
|
<property name="plugin-jar" value="fr-plugin-${plugin-name}-${plugin-version}.jar"/> |
||||||
|
|
||||||
|
<target name="prepare"> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
<delete dir="fr-plugin-${plugin-name}-${plugin-version}"/> |
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<delete dir="${destLoc}/${plugin-name}"/> |
||||||
|
</target> |
||||||
|
<path id="compile.classpath"> |
||||||
|
<fileset dir="${libs}"> |
||||||
|
<include name="**/*.jar"/> |
||||||
|
</fileset> |
||||||
|
<fileset dir="${publicLibs}"> |
||||||
|
<include name="**/*.jar"/> |
||||||
|
</fileset> |
||||||
|
</path> |
||||||
|
<patternset id="resources4Jar"> |
||||||
|
<exclude name="**/.settings/**"/> |
||||||
|
<exclude name=".classpath"/> |
||||||
|
<exclude name=".project"/> |
||||||
|
|
||||||
|
<exclude name="**/*.java"/> |
||||||
|
<exclude name="**/*.db"/> |
||||||
|
<exclude name="**/*.g"/> |
||||||
|
<exclude name="**/package.html"/> |
||||||
|
</patternset> |
||||||
|
<target name="copy_resources"> |
||||||
|
<echo message="从${resources_from}拷贝图片,JS,CSS等资源文件"/> |
||||||
|
<delete dir="tmp"/> |
||||||
|
<copy todir="tmp"> |
||||||
|
<fileset dir="${resources_from}\src"> |
||||||
|
<patternset refid="resources4Jar"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<copy todir="${classes}"> |
||||||
|
<fileset dir="tmp"/> |
||||||
|
</copy> |
||||||
|
<delete dir="tmp"/> |
||||||
|
</target> |
||||||
|
<target name="compile_javas"> |
||||||
|
<echo message="编译${compile_files}下的Java文件"/> |
||||||
|
<javac destdir="${classes}" debug="false" optimize="on" source="${source_jdk_version}" |
||||||
|
target="${target_jdk_version}" |
||||||
|
fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}" |
||||||
|
executable="${compile_jdk_version}/bin/javac"> |
||||||
|
<src path="${basedir}/src"/> |
||||||
|
<exclude name="**/.svn/**"/> |
||||||
|
<compilerarg line="-encoding UTF8 "/> |
||||||
|
<classpath refid="compile.classpath"/> |
||||||
|
</javac> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="jar_classes"> |
||||||
|
<echo message="打Jar包:${jar_name}"/> |
||||||
|
<delete file="${basedir}/${jar_name}"/> |
||||||
|
<jar jarfile="${basedir}/${jar_name}"> |
||||||
|
<fileset dir="${classes}"> |
||||||
|
</fileset> |
||||||
|
<!--下面加入第三方包--> |
||||||
|
|
||||||
|
<zipfileset excludes="META-INF/*.SF" src="${libs}/Filters.jar"></zipfileset> |
||||||
|
<zipfileset excludes="META-INF/*.SF" src="${libs}/thumbnailator-0.4.8.jar"></zipfileset> |
||||||
|
|
||||||
|
</jar> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="super_jar" depends="prepare"> |
||||||
|
<antcall target="copy_resources"> |
||||||
|
<param name="resources_from" value="${basedir}"/> |
||||||
|
</antcall> |
||||||
|
<antcall target="compile_javas"> |
||||||
|
<param name="source_jdk_version" value="1.8"/> |
||||||
|
<param name="target_jdk_version" value="1.8"/> |
||||||
|
<param name="compile_jdk_version" value="${jdk.home}"/> |
||||||
|
<param name="compile_files" value="${basedir}/src"/> |
||||||
|
</antcall> |
||||||
|
<echo message="compile plugin success!"/> |
||||||
|
|
||||||
|
<antcall target="jar_classes"> |
||||||
|
<param name="jar_name" value="${plugin-jar}"/> |
||||||
|
</antcall> |
||||||
|
<delete dir="${classes}"/> |
||||||
|
|
||||||
|
</target> |
||||||
|
<target name="jar" depends="super_jar"> |
||||||
|
<antcall target="zip"/> |
||||||
|
</target> |
||||||
|
|
||||||
|
<target name="zip"> |
||||||
|
<property name="plugin-folder" value="fr-plugin-${plugin-name}-${plugin-version}"/> |
||||||
|
<echo message="----------zip files----------"/> |
||||||
|
<mkdir dir="${plugin-folder}"/> |
||||||
|
<copy todir="${plugin-folder}"> |
||||||
|
<fileset dir="."> |
||||||
|
<include name="${plugin-jar}"/> |
||||||
|
<include name="plugin.xml"/> |
||||||
|
</fileset> |
||||||
|
</copy> |
||||||
|
<zip destfile="${basedir}/${plugin-folder}.zip" basedir="."> |
||||||
|
<include name="${plugin-folder}/*.jar"/> |
||||||
|
<include name="${plugin-folder}/plugin.xml"/> |
||||||
|
|
||||||
|
</zip> |
||||||
|
|
||||||
|
<xmlproperty file="${basedir}/plugin.xml"/> |
||||||
|
<move file="${plugin-folder}.zip" todir="${destLoc}/install"/> |
||||||
|
<delete file="fr-plugin-${plugin-name}-${plugin-version}.jar"/> |
||||||
|
</target> |
||||||
|
</project> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,97 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> |
||||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> |
||||||
|
<output url="file://$MODULE_DIR$/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes" /> |
||||||
|
<output-test url="file://$MODULE_DIR$/target/test-classes" /> |
||||||
|
<content url="file://$MODULE_DIR$"> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" /> |
||||||
|
<excludeFolder url="file://$MODULE_DIR$/../plugin-function/target" /> |
||||||
|
</content> |
||||||
|
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> |
||||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||||
|
<orderEntry type="module-library"> |
||||||
|
<library> |
||||||
|
<CLASSES> |
||||||
|
<root url="jar://$MODULE_DIR$/lib/Filters.jar!/" /> |
||||||
|
</CLASSES> |
||||||
|
<JAVADOC /> |
||||||
|
<SOURCES /> |
||||||
|
</library> |
||||||
|
</orderEntry> |
||||||
|
<orderEntry type="module-library"> |
||||||
|
<library> |
||||||
|
<CLASSES> |
||||||
|
<root url="jar://$MODULE_DIR$/lib/thumbnailator-0.4.8.jar!/" /> |
||||||
|
</CLASSES> |
||||||
|
<JAVADOC /> |
||||||
|
<SOURCES /> |
||||||
|
</library> |
||||||
|
</orderEntry> |
||||||
|
<orderEntry type="module-library"> |
||||||
|
<library> |
||||||
|
<CLASSES> |
||||||
|
<root url="jar://$MODULE_DIR$/../lib/genson-0.99.jar!/" /> |
||||||
|
</CLASSES> |
||||||
|
<JAVADOC /> |
||||||
|
<SOURCES /> |
||||||
|
</library> |
||||||
|
</orderEntry> |
||||||
|
<orderEntry type="module-library"> |
||||||
|
<library name="Maven: com.fr.plugin:gson:1.0"> |
||||||
|
<CLASSES> |
||||||
|
<root url="jar://$MODULE_DIR$/lib/gson-2.3.1.jar!/" /> |
||||||
|
</CLASSES> |
||||||
|
<JAVADOC /> |
||||||
|
<SOURCES /> |
||||||
|
</library> |
||||||
|
</orderEntry> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.core:fine-core:10.0.2020.04.26" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.17" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.jcraft:jzlib:1.1.3" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.third:fine-third:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.activator:fine-activator:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.webui:fine-webui:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.datasource:fine-datasource:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.decision:fine-decision:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.decision:fine-decision-report:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.schedule:fine-schedule:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.schedule:fine-schedule-report:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.intelligence:fine-swift:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fineio:fineio:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.third.server:servlet-api:3.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.intelligence:fine-accumulator:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.report:fine-report-engine:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.report:fine-report-designer:10.0-RELEASE-SNAPSHOT" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: io.socket:socket.io-client:0.7.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: io.socket:engine.io-client:0.7.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp-ws:3.0.1" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.0.1" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.6.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.json:json:20090211" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.6.9" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.swingexplorer:swexpl:2.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.swingexplorer:swag:1.0" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-catalina:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-servlet-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jsp-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-el-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-juli:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jni:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-coyote:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-util:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-util-scan:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jaspic-api:8.5.32" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.44" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser:6.23.1" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser-mac:6.23.1" level="project" /> |
||||||
|
<orderEntry type="library" name="Maven: com.fr.third:jxbrowser-win64:6.23.1" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: org.easymock:easymock:3.5.1" level="project" /> |
||||||
|
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" /> |
||||||
|
</component> |
||||||
|
</module> |
@ -0,0 +1,18 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin> |
||||||
|
<id>com.fr.plugin.function.image.process</id> |
||||||
|
<name><![CDATA[图像处理函数]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>1.0</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2018-07-31</jartime> |
||||||
|
<vendor>all100</vendor> |
||||||
|
<description><![CDATA[一组图像处理函数]]></description> |
||||||
|
<change-notes><![CDATA[ |
||||||
|
[2021-3-6]初始化插件。<br/> |
||||||
|
]]></change-notes> |
||||||
|
<extra-core> |
||||||
|
<LocaleFinder class="com.fr.plugin.image.process.MyLocaleFinder"/> |
||||||
|
<FunctionGroup class="com.fr.plugin.image.process.ImageProcessFunction" /> |
||||||
|
</extra-core> |
||||||
|
<function-recorder class="com.fr.plugin.image.process.FRImageContrast"/> |
||||||
|
</plugin> |
@ -0,0 +1,63 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
|
||||||
|
<parent> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<artifactId>starter</artifactId> |
||||||
|
<version>10.0</version> |
||||||
|
</parent> |
||||||
|
<packaging>jar</packaging> |
||||||
|
<artifactId>plugin-function</artifactId> |
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.plugin</groupId> |
||||||
|
<artifactId>gson</artifactId> |
||||||
|
<version>1.0</version> |
||||||
|
<scope>system</scope> |
||||||
|
<systemPath>${project.basedir}/lib/gson-2.3.1.jar</systemPath> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0-PERSIST-20200326</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0-PERSIST-20200326</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0-PERSIST-20200326</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0.2020.04.26</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0.2020.04.26</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
<dependency> |
||||||
|
<groupId>com.fr.core</groupId> |
||||||
|
<artifactId>fine-core</artifactId> |
||||||
|
<version>10.0.2020.04.26</version> |
||||||
|
<scope>compile</scope> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
<build> |
||||||
|
<!---如果要更改调试插件,改这里的配置就可以了--> |
||||||
|
<outputDirectory>${project.basedir}/../webroot/WEB-INF/plugins/plugin-com.fr.plugin.function.test-1.0/classes</outputDirectory> |
||||||
|
</build> |
||||||
|
</project> |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.RGBAdjustFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//调整图像RGB
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageAdjustRGB extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageAdjustRGB", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes=FunctionConstants.CheckArgs(args,4); |
||||||
|
if(!checkRes.equals(FunctionConstants.CHECK_PASS)){ |
||||||
|
return Primitive.ERROR_VALUE+checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
float red = Float.parseFloat(args[1].toString())-1; |
||||||
|
float green = Float.parseFloat(args[2].toString())-1; |
||||||
|
float blue = Float.parseFloat(args[3].toString())-1; |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
return setFilter(src,red,green,blue); |
||||||
|
} |
||||||
|
//调整图像RGB
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float red, float green,float blue) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
RGBAdjustFilter rgbAdjustFilter = new RGBAdjustFilter(); |
||||||
|
rgbAdjustFilter.setRFactor(red); |
||||||
|
rgbAdjustFilter.setGFactor(green); |
||||||
|
rgbAdjustFilter.setBFactor(blue); |
||||||
|
rgbAdjustFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,57 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.ChromeFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像产生各种金属效果和更广泛的非常沉闷的效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageChrome extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageChrome", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 6); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
int colorSource=1; |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
|
||||||
|
float bumpSoftness = Float.parseFloat(args[1].toString()); |
||||||
|
float bumpHeight = Float.parseFloat(args[2].toString()); |
||||||
|
float amount = Float.parseFloat(args[3].toString()); |
||||||
|
float exposure = Float.parseFloat(args[4].toString()); |
||||||
|
final String diffuseColorText=args[5].toString(); |
||||||
|
int color=FunctionConstants.ColorHexToDec(diffuseColorText); |
||||||
|
if(color==-16888888){ |
||||||
|
return Primitive.ERROR_VALUE + "Color Value"; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, bumpSoftness, bumpHeight,colorSource,amount,exposure,color); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像产生各种金属效果和更广泛的非常沉闷的效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float bumpSoftness, float bumpHeight,int colorSource,float amount,float exposure,int color) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
ChromeFilter chromeFilter = new ChromeFilter(); |
||||||
|
chromeFilter.setBumpSoftness(bumpSoftness); |
||||||
|
chromeFilter.setBumpHeight(bumpHeight); |
||||||
|
chromeFilter.setColorSource(colorSource); |
||||||
|
chromeFilter.setAmount(amount); |
||||||
|
chromeFilter.setExposure(exposure); |
||||||
|
chromeFilter.setDiffuseColor(color); |
||||||
|
chromeFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.GainFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像增益效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageColorGain extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageColorGain", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float gain = Float.parseFloat(args[1].toString()); |
||||||
|
float bias = Float.parseFloat(args[2].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, gain, bias); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像增益效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float gain, float bias) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
GainFilter gainFilter = new GainFilter(); |
||||||
|
gainFilter.setGain(gain); |
||||||
|
gainFilter.setBias(bias); |
||||||
|
gainFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.InvertFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像颜色反转
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageColorInvert extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageColorInvert", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 1); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
BufferedImage result = setFilter(src); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像颜色反转
|
||||||
|
private BufferedImage setFilter(BufferedImage src) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
InvertFilter invertFilter = new InvertFilter(); |
||||||
|
invertFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.LevelsFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像颜色Level
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageColorLevel extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageColorLevel", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 5); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float highLevel = Float.parseFloat(args[1].toString()); |
||||||
|
float highOutputLevel = Float.parseFloat(args[1].toString()); |
||||||
|
float lowLevel = Float.parseFloat(args[1].toString()); |
||||||
|
float lowOutputLevel = Float.parseFloat(args[1].toString()); |
||||||
|
return setFilter(src,highLevel,highOutputLevel,lowLevel,lowOutputLevel); |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像颜色Level
|
||||||
|
private BufferedImage setFilter(BufferedImage src,float highLevel ,float highOutputLevel, float lowLevel,float lowOutputLevel) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
LevelsFilter levelsFilter = new LevelsFilter(); |
||||||
|
levelsFilter.setHighLevel(highLevel); |
||||||
|
levelsFilter.setHighOutputLevel(highOutputLevel); |
||||||
|
levelsFilter.setLowLevel(lowLevel); |
||||||
|
levelsFilter.setLowOutputLevel(lowOutputLevel); |
||||||
|
levelsFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.ContrastFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//调整亮度对比度
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageContrast extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageContrast", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float contrast = Float.parseFloat(args[1].toString()); |
||||||
|
float brightness = Float.parseFloat(args[2].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, contrast, brightness); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//调整亮度对比度
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float contrast, float brightness) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
ContrastFilter contrastFilter = new ContrastFilter(); |
||||||
|
contrastFilter.setContrast(contrast); |
||||||
|
contrastFilter.setBrightness(brightness); |
||||||
|
contrastFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
@ -0,0 +1,53 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.CrystallizeFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像结晶化效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageCrystallize extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageCrystallize", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 6); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float scale = Float.parseFloat(args[1].toString()); |
||||||
|
float randomness = Float.parseFloat(args[2].toString()); |
||||||
|
float edgeThickness = Float.parseFloat(args[3].toString()); |
||||||
|
int gridType=Integer.parseInt(args[4].toString()); |
||||||
|
String colorText=args[5].toString(); |
||||||
|
int color=FunctionConstants.ColorHexToDec(colorText); |
||||||
|
if(color==-16888888){ |
||||||
|
return Primitive.ERROR_VALUE + "Color Value!"; |
||||||
|
} |
||||||
|
BufferedImage result = setFilter(src, scale,randomness,edgeThickness,gridType,color); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像结晶化效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float scale,float randomness,float edgeThickness,int gridType,int color) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
CrystallizeFilter crystallizeFilter = new CrystallizeFilter(); |
||||||
|
crystallizeFilter.setScale(scale); |
||||||
|
crystallizeFilter.setRandomness(randomness); |
||||||
|
crystallizeFilter.setEdgeThickness(edgeThickness); |
||||||
|
crystallizeFilter.setGridType(gridType); |
||||||
|
crystallizeFilter.setEdgeColor(color); |
||||||
|
crystallizeFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.DiffusionFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//调整发散抖动
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageDiffusionDither extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageDiffusionDither", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes=FunctionConstants.CheckArgs(args,4); |
||||||
|
if(!checkRes.equals(FunctionConstants.CHECK_PASS)){ |
||||||
|
return Primitive.ERROR_VALUE+checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
int levels = Integer.parseInt(args[1].toString()); |
||||||
|
boolean serpentine = Boolean.parseBoolean(args[2].toString()); |
||||||
|
boolean colorDither = Boolean.parseBoolean(args[3].toString()); |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
return setFilter(src,levels,serpentine,colorDither); |
||||||
|
} |
||||||
|
//调整发散抖动
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int levels, boolean serpentine,boolean colorDither) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
DiffusionFilter diffusionFilter = new DiffusionFilter(); |
||||||
|
diffusionFilter.setLevels(levels); |
||||||
|
diffusionFilter.setColorDither(colorDither); |
||||||
|
diffusionFilter.setSerpentine(serpentine); |
||||||
|
diffusionFilter.filter(src,result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.DissolveFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像溶解效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageDissolve extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageDissolve", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
|
||||||
|
float density = Float.parseFloat(args[1].toString()); |
||||||
|
float softness = Float.parseFloat(args[2].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, density, softness); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像溶解效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float density, float softness) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
DissolveFilter dissolveFilter = new DissolveFilter(); |
||||||
|
dissolveFilter.setDensity(density); |
||||||
|
dissolveFilter.setSoftness(softness); |
||||||
|
dissolveFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.EmbossFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置浮雕图像
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageEmboss extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageEmboss", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 5); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float azimuth = Float.parseFloat(args[1].toString()); |
||||||
|
float bumpHeight = Float.parseFloat(args[2].toString()); |
||||||
|
float elevation=Float.parseFloat(args[3].toString()); |
||||||
|
boolean emboss=Boolean.parseBoolean(args[4].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, azimuth,bumpHeight,elevation,emboss); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置浮雕图像
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float azimuth,float bumpHeight,float elevation,boolean emboss) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
EmbossFilter embossFilter = new EmbossFilter(); |
||||||
|
embossFilter.setAzimuth(azimuth); |
||||||
|
embossFilter.setBumpHeight(bumpHeight); |
||||||
|
embossFilter.setElevation(elevation); |
||||||
|
embossFilter.setEmboss(emboss); |
||||||
|
embossFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.ExposureFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//调整胶片曝光
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageExposure extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageExposure", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
|
||||||
|
String checkRes=FunctionConstants.CheckArgs(args,2); |
||||||
|
if(!checkRes.equals(FunctionConstants.CHECK_PASS)){ |
||||||
|
return Primitive.ERROR_VALUE+checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
float levels = Float.parseFloat(args[1].toString()); |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
return setFilter(src,levels); |
||||||
|
} |
||||||
|
//调整胶片曝光
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float levels) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
ExposureFilter exposureFilter = new ExposureFilter(); |
||||||
|
exposureFilter.setExposure(levels); |
||||||
|
exposureFilter.filter(src,result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,71 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.plugin.image.process.Utils.FlarePoint2D; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.FlareFilter; |
||||||
|
|
||||||
|
import java.awt.geom.Point2D; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像产生各种闪光效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageFlare extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageFlare", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 9); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
|
||||||
|
double pointX = Double.parseDouble(args[1].toString()); |
||||||
|
double pointY = Double.parseDouble(args[2].toString()); |
||||||
|
float radius = Float.parseFloat(args[3].toString()); |
||||||
|
float baseAmount = Float.parseFloat(args[4].toString()); |
||||||
|
float ringAmount = Float.parseFloat(args[5].toString()); |
||||||
|
float ringWidth = Float.parseFloat(args[6].toString()); |
||||||
|
float rayAmount = Float.parseFloat(args[7].toString()); |
||||||
|
final String colorText=args[8].toString(); |
||||||
|
|
||||||
|
int color=FunctionConstants.ColorHexToDec(colorText); |
||||||
|
if(color==-16888888){ |
||||||
|
return Primitive.ERROR_VALUE + "Color Value"; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, pointX, pointY,radius,baseAmount,ringAmount,ringWidth,rayAmount,color); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像产生各种闪光效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, double pointX, double pointY,float radius,float baseAmount,float ringAmount,float ringWidth, float rayAmount,int color) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
|
||||||
|
Point2D point2D =new FlarePoint2D(); |
||||||
|
point2D.setLocation(pointX,pointY); |
||||||
|
|
||||||
|
FlareFilter flareFilter = new FlareFilter(); |
||||||
|
flareFilter.setCentre(point2D); |
||||||
|
flareFilter.setBaseAmount(baseAmount); |
||||||
|
flareFilter.setRadius(radius); |
||||||
|
flareFilter.setRayAmount(rayAmount); |
||||||
|
flareFilter.setRingAmount(ringAmount); |
||||||
|
flareFilter.setRingWidth(ringWidth); |
||||||
|
flareFilter.setColor(color); |
||||||
|
|
||||||
|
flareFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.awt.geom.AffineTransform; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//将文本转换为图像
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageFromText extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageFromText", source = Original.PLUGIN) |
||||||
|
@Override |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String text = args[0].toString(); |
||||||
|
int fontSize = Integer.parseInt(args[1].toString()); |
||||||
|
int width = Integer.parseInt(args[2].toString()); |
||||||
|
int height = Integer.parseInt(args[3].toString()); |
||||||
|
|
||||||
|
return ImageFromText(text, fontSize, width, height); |
||||||
|
} |
||||||
|
|
||||||
|
private BufferedImage ImageFromText(String text, int fontSize, int width, int height) { |
||||||
|
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
Graphics2D g2 = img.createGraphics(); |
||||||
|
Font font = new Font("黑体", Font.BOLD, fontSize); |
||||||
|
FontMetrics fm = g2.getFontMetrics(font); |
||||||
|
int textWidth = fm.stringWidth(text); |
||||||
|
int widthX = (width - textWidth) / 2; |
||||||
|
int heightY = (height - fontSize) / 2; |
||||||
|
AffineTransform affineTransform = new AffineTransform(); |
||||||
|
Font rotatedFont = font.deriveFont(affineTransform); |
||||||
|
g2.setFont(rotatedFont); |
||||||
|
g2.setColor(new Color(0, 0, 0)); |
||||||
|
g2.drawString(text, widthX, heightY); |
||||||
|
g2.dispose(); |
||||||
|
return img; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,41 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.GammaFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像伽玛线效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageGamma extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageGamma", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float gamma = Float.parseFloat(args[1].toString()); |
||||||
|
BufferedImage result = setFilter(src, gamma); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像伽玛线效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float gamma) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
GammaFilter gammaFilter = new GammaFilter(); |
||||||
|
gammaFilter.setGamma(gamma); |
||||||
|
gammaFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.GaussianFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像上执行高斯模糊
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageGaussianBlur extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageTritone", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float radius=Float.parseFloat(args[1].toString()); |
||||||
|
BufferedImage result = setFilter(src,radius); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像上执行高斯模糊
|
||||||
|
private BufferedImage setFilter(BufferedImage src,float radius) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
GaussianFilter gaussianFilter = new GaussianFilter(); |
||||||
|
gaussianFilter.setRadius(radius); |
||||||
|
gaussianFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.GlowFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像产生发光效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageGlow extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageGlow", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float radius = Float.parseFloat(args[1].toString()); |
||||||
|
float amount = Float.parseFloat(args[2].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, radius, amount); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像产生发光效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float radius, float amount) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
GlowFilter glowFilter = new GlowFilter(); |
||||||
|
glowFilter.setRadius(radius); |
||||||
|
glowFilter.setAmount(amount); |
||||||
|
glowFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.GrayscaleFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置灰度图像
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageGrayScale extends AbstractFunction { |
||||||
|
@Focus(id =FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageGrayScale", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 1); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
BufferedImage result = setFilter(src); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置灰度图像
|
||||||
|
private BufferedImage setFilter(BufferedImage src) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
GrayscaleFilter grayscaleFilter = new GrayscaleFilter(); |
||||||
|
grayscaleFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.ChannelMixFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//混合图像RGB通道
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageMixChannel extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageMixChannel", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 7); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int blueGreen = Integer.parseInt(args[1].toString()); |
||||||
|
int intoR = Integer.parseInt(args[1].toString()); |
||||||
|
int redBlue = Integer.parseInt(args[1].toString()); |
||||||
|
int intoG = Integer.parseInt(args[1].toString()); |
||||||
|
int greenRed = Integer.parseInt(args[1].toString()); |
||||||
|
int intoB = Integer.parseInt(args[1].toString()); |
||||||
|
|
||||||
|
return setFilter(src,blueGreen,intoR,redBlue,intoG,greenRed,intoB); |
||||||
|
} |
||||||
|
|
||||||
|
//混合图像RGB通道
|
||||||
|
private BufferedImage setFilter(BufferedImage src,int blueGreen,int intoR, int redBlue,int intoG,int greenRed,int intoB) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
ChannelMixFilter channelMixFilter = new ChannelMixFilter(); |
||||||
|
channelMixFilter.setBlueGreen(blueGreen); |
||||||
|
channelMixFilter.setIntoR(intoR); |
||||||
|
channelMixFilter.setRedBlue(redBlue); |
||||||
|
channelMixFilter.setIntoG(intoG); |
||||||
|
channelMixFilter.setGreenRed(greenRed); |
||||||
|
channelMixFilter.setIntoB(intoB); |
||||||
|
channelMixFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.BlockFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像马赛克
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageMosaic extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageMosaic", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int blockSize = Integer.parseInt(args[1].toString()); |
||||||
|
BufferedImage result = setFilter(src, blockSize); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像马赛克
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int blockSize) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
BlockFilter blockFilter = new BlockFilter(); |
||||||
|
blockFilter.setBlockSize(blockSize); |
||||||
|
blockFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.OilFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像油画效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageOil extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageOil", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int level = Integer.parseInt(args[1].toString()); |
||||||
|
int range=Integer.parseInt(args[2].toString()); |
||||||
|
BufferedImage result = setFilter(src, level,range); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像油画效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int level,int range) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
OilFilter oilFilter = new OilFilter(); |
||||||
|
oilFilter.setLevels(level); |
||||||
|
oilFilter.setRange(range); |
||||||
|
oilFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.PosterizeFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像招贴画
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImagePosterize extends AbstractFunction { |
||||||
|
@Focus(id =FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImagePosterize", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int numLevels = Integer.parseInt(args[1].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, numLevels); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像招贴画
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int numLevels) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
PosterizeFilter posterizeFilter = new PosterizeFilter(); |
||||||
|
posterizeFilter.setNumLevels(numLevels); |
||||||
|
posterizeFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,43 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.RescaleFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像重新调节
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageReScale extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageReScale", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float reScale = Float.parseFloat(args[1].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, reScale); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像重新调节
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float reScale) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
RescaleFilter rescaleFilter = new RescaleFilter(); |
||||||
|
rescaleFilter.setScale(reScale); |
||||||
|
rescaleFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import net.coobird.thumbnailator.Thumbnails; |
||||||
|
|
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
//设置图像旋转缩放
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageScaleRotate extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageScaleRotate", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
|
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 3); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float scale = Float.parseFloat((args[1].toString())); |
||||||
|
float rotate = Float.parseFloat((args[2].toString())); |
||||||
|
|
||||||
|
BufferedImage result = null; |
||||||
|
try { |
||||||
|
result = setFilter(src, scale, rotate); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像旋转缩放
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float scale, float rotate) throws IOException { |
||||||
|
BufferedImage result = Thumbnails.of(src).scale(scale).rotate(rotate).asBufferedImage(); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import net.coobird.thumbnailator.Thumbnails; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
//调整图像大小
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageSize extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageSize", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
|
||||||
|
String checkRes=FunctionConstants.CheckArgs(args,4); |
||||||
|
if(!checkRes.equals(FunctionConstants.CHECK_PASS)){ |
||||||
|
return Primitive.ERROR_VALUE+checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
int width = Integer.parseInt((args[1].toString())); |
||||||
|
int height = Integer.parseInt((args[2].toString())); |
||||||
|
boolean rateScale = Boolean.parseBoolean(args[3].toString()); |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
BufferedImage result=null; |
||||||
|
try { |
||||||
|
result= setFilter(src,width,height,rateScale); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
//调整图像大小
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int width, int height,boolean rateScale) throws IOException { |
||||||
|
BufferedImage result= Thumbnails.of(src).size(width,height).keepAspectRatio(rateScale).asBufferedImage(); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.SolarizeFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像过度曝光
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageSolar extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageSolar", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 1); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
BufferedImage result = setFilter(src); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像过度曝光
|
||||||
|
private BufferedImage setFilter(BufferedImage src) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
SolarizeFilter solarizeFilter = new SolarizeFilter(); |
||||||
|
solarizeFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.SparkleFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//生成图像闪耀效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageSparkle extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageSparkle", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 4); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int radius =Integer.parseInt(args[1].toString()); |
||||||
|
int randomness =Integer.parseInt(args[2].toString()); |
||||||
|
int rays =Integer.parseInt(args[3].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, radius,randomness,rays); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//生成图像闪耀效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src,int radius,int randomness,int rays) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
SparkleFilter sparkleFilter = new SparkleFilter(); |
||||||
|
sparkleFilter.setRadius(radius); |
||||||
|
sparkleFilter.setRandomness(randomness); |
||||||
|
sparkleFilter.setRays(rays); |
||||||
|
sparkleFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.StampFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//生成图像黑白图章效果
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageStamp extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageStamp", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 4); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float radius = Float.parseFloat(args[1].toString()); |
||||||
|
float softness = Float.parseFloat(args[2].toString()); |
||||||
|
float threshold = Float.parseFloat(args[3].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, radius,softness,threshold); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//生成图像黑白图章效果
|
||||||
|
private BufferedImage setFilter(BufferedImage src,float radius,float softness,float threshold) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
StampFilter stampFilter = new StampFilter(); |
||||||
|
stampFilter.setRadius(radius); |
||||||
|
stampFilter.setThreshold(threshold); |
||||||
|
stampFilter.setSoftness(softness); |
||||||
|
stampFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.OpacityFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//设置图像不透明级别
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageTransparency extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageTransparency", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 2); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int opacity = Integer.parseInt(args[1].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, opacity); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//设置图像不透明级别
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int opacity) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
OpacityFilter opacityFilter = new OpacityFilter(); |
||||||
|
opacityFilter.setOpacity(opacity); |
||||||
|
opacityFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.plugin.image.process.Utils.PositionNew; |
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.exception.FormulaException; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import net.coobird.thumbnailator.Thumbnails; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
//给图像增加水印
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageWaterMark extends AbstractFunction { |
||||||
|
@Override |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageWaterMark", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) throws FormulaException { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
|
||||||
|
String checkRes=FunctionConstants.CheckArgs(args,5); |
||||||
|
if(!checkRes.equals(FunctionConstants.CHECK_PASS)){ |
||||||
|
return Primitive.ERROR_VALUE+checkRes; |
||||||
|
} |
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
int left = Integer.parseInt((args[1].toString())); |
||||||
|
int right = Integer.parseInt((args[2].toString())); |
||||||
|
BufferedImage waterMark = FunctionConstants.readImage(args[3]); |
||||||
|
float opacity = Float.parseFloat(args[4].toString()); |
||||||
|
|
||||||
|
BufferedImage result=null; |
||||||
|
try { |
||||||
|
result= setFilter(src,left,right,waterMark,opacity); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
//给图像增加水印
|
||||||
|
private BufferedImage setFilter(BufferedImage src, int left, int right,BufferedImage waterMark,float opacity) throws IOException { |
||||||
|
PositionNew positionNew=new PositionNew(left,right); |
||||||
|
BufferedImage result= Thumbnails.of(src).watermark(positionNew,waterMark,opacity).scale(1).asBufferedImage(); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.script.AbstractFunction; |
||||||
|
import com.fr.stable.Primitive; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
import com.jhlabs.image.WeaveFilter; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
|
||||||
|
//图像编织化
|
||||||
|
@EnableMetrics |
||||||
|
@Authorize(callSignKey = FunctionConstants.PLUGIN_ID) |
||||||
|
public class FRImageWeave extends AbstractFunction { |
||||||
|
@Focus(id = FunctionConstants.PLUGIN_ID, text = "Plugin-Test_Function_FRImageWeave", source = Original.PLUGIN) |
||||||
|
public Object run(Object[] args) { |
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
return FunctionConstants.AUTHOR_ERROR; |
||||||
|
} |
||||||
|
String checkRes = FunctionConstants.CheckArgs(args, 5); |
||||||
|
if (!checkRes.equals(FunctionConstants.CHECK_PASS)) { |
||||||
|
return Primitive.ERROR_VALUE + checkRes; |
||||||
|
} |
||||||
|
|
||||||
|
BufferedImage src = FunctionConstants.readImage(args[0]); |
||||||
|
float XWidth = Float.parseFloat(args[1].toString()); |
||||||
|
float YWidth = Float.parseFloat(args[2].toString()); |
||||||
|
float XGap = Float.parseFloat(args[3].toString()); |
||||||
|
float YGap = Float.parseFloat(args[4].toString()); |
||||||
|
|
||||||
|
BufferedImage result = setFilter(src, XWidth, YWidth,XGap,YGap); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
//图像编织化
|
||||||
|
private BufferedImage setFilter(BufferedImage src, float XWidth, float YWidth,float XGap,float YGap) { |
||||||
|
BufferedImage result = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); |
||||||
|
WeaveFilter weaveFilter = new WeaveFilter(); |
||||||
|
weaveFilter.setXWidth(XWidth); |
||||||
|
weaveFilter.setYWidth(YWidth); |
||||||
|
weaveFilter.setXGap(XGap); |
||||||
|
weaveFilter.setXGap(YGap); |
||||||
|
weaveFilter.filter(src, result); |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import javax.imageio.ImageIO; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.File; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
import static com.fr.design.i18n.Toolkit.i18nText; |
||||||
|
|
||||||
|
//定义常用方法变量
|
||||||
|
public class FunctionConstants { |
||||||
|
static final String PLUGIN_ID = "com.fr.plugin.function.image.process"; |
||||||
|
static final String AUTHOR_ERROR=i18nText("Plugin.Function.ImagProcess_AUTHOR_ERROR"); |
||||||
|
static final String CHECK_PASS=i18nText("Plugin.Function.ImagProcess_CHECK_PASS"); |
||||||
|
static BufferedImage readImage(Object file) { |
||||||
|
BufferedImage res; |
||||||
|
if(file instanceof BufferedImage){ |
||||||
|
return (BufferedImage)file; |
||||||
|
} |
||||||
|
String filename=file.toString(); |
||||||
|
File fn = new File(filename); |
||||||
|
try { |
||||||
|
ImageIO.setUseCache(false); |
||||||
|
res = ImageIO.read(fn); |
||||||
|
|
||||||
|
} catch (IOException e) { |
||||||
|
throw new Error(filename + i18nText("Plugin.Function.ImagProcess_ReadImageError")); |
||||||
|
} |
||||||
|
return res; |
||||||
|
} |
||||||
|
static String CheckArgs(Object[] args,int num){ |
||||||
|
String res=FunctionConstants.CHECK_PASS; |
||||||
|
int len = ArrayUtils.getLength(args); |
||||||
|
if (len != num) { |
||||||
|
return i18nText("Plugin.Function.ImagProcess_ArgsCountError"); |
||||||
|
} |
||||||
|
if(!(args[0] instanceof BufferedImage)){ |
||||||
|
String filename=args[0].toString(); |
||||||
|
File fn = new File(filename); |
||||||
|
if (!(fn.exists())) { |
||||||
|
return filename + i18nText("Plugin.Function.ImagProcess_FileNotFind"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return res; |
||||||
|
} |
||||||
|
|
||||||
|
static int ColorHexToDec(String ColorText){ |
||||||
|
if(ColorText.length()!=6){ |
||||||
|
return -16888888; |
||||||
|
} |
||||||
|
final int red = Integer.parseInt(ColorText.substring(0, 2), 16); |
||||||
|
final int blue = Integer.parseInt(ColorText.substring(2, 4), 16); |
||||||
|
final int green = Integer.parseInt(ColorText.substring(4, 6), 16); |
||||||
|
if(red>255||red<0){ |
||||||
|
return -16888888; |
||||||
|
} |
||||||
|
if(blue>255||blue<0){ |
||||||
|
return -16888888; |
||||||
|
} |
||||||
|
if(green>255||green<0){ |
||||||
|
return -16888888; |
||||||
|
} |
||||||
|
Color color=new Color(red,blue,green); |
||||||
|
int c=color.getRGB(); |
||||||
|
return c; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
import com.fr.stable.fun.impl.AbstractFunctionDefContainer; |
||||||
|
import com.fr.stable.script.FunctionDef; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author all100 |
||||||
|
* @version 10.0 |
||||||
|
* Created by all100 on 2021-02-20 |
||||||
|
**/ |
||||||
|
@EnableMetrics |
||||||
|
public class ImageProcessFunction extends AbstractFunctionDefContainer { |
||||||
|
@Override |
||||||
|
@Focus(id=FunctionConstants.PLUGIN_ID, text="图像处理函数") |
||||||
|
public FunctionDef[] getFunctionDefs() { |
||||||
|
return new FunctionDef[]{ |
||||||
|
new FunctionDef( "FRImageFromText","功能:\n文本生成图像,可以让其它函数再次处理。 \n参数说明:\n参数1:文本内容。\n参数2:文本字号,整数。\n参数3:图像宽度,整数。\n参数4:图像高度,整数。",FRImageFromText.class.getName()), |
||||||
|
new FunctionDef( "FRImageContrast","功能:\n设置图像亮度、对比度。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像对比度,取值范围:0-2。\n参数3:图像亮度,取值范围:0-2。",FRImageContrast.class.getName()), |
||||||
|
new FunctionDef( "FRImageAdjustRGB","功能:\n设置图像RGB通道。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像Red通道,取值范围:0-2。\n参数3:图像Green通道 ,取值范围:0-2,\n参数4:图像Blue通道 ,取值范围:0-2。",FRImageAdjustRGB.class.getName()), |
||||||
|
new FunctionDef( "FRImageDiffusionDither","功能:\n设置图像发散抖动。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像抖动层级,取值范围:2、4、5、6、8、16。\n参数3:图像是否花纹抖动 ,取值范围:true或false,\n参数4:图像是否颜色抖动 ,取值范围:true或false。",FRImageDiffusionDither.class.getName()), |
||||||
|
new FunctionDef( "FRImageExposure","功能:\n设置图像胶片曝光。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:调整胶片曝光层级,取值范围:0-5。",FRImageExposure.class.getName()), |
||||||
|
new FunctionDef( "FRImageSize","功能:\n设置图像大小。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:调整宽度。\n参数3:调整高度。\n参数4:是否遵循原图比例调整大小 。",FRImageSize.class.getName()), |
||||||
|
new FunctionDef( "FRImageWaterMark","功能:\n给图像增加水印。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:水印左边距。\n参数3:水印顶边距。\n参数4:水印内容。\n参数5:水印不透明级别,取值范围:0-1。",FRImageWaterMark.class.getName()), |
||||||
|
new FunctionDef( "FRImageScaleRotate","功能:\n设置图像旋转缩放。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:缩放比例,取值范围:0-1。\n参数3:旋转度数,取值范围:0-360。",FRImageScaleRotate.class.getName()), |
||||||
|
new FunctionDef( "FRImageColorGain","功能:\n图像增益效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:增益值,取值范围:0-1。\n参数3:偏置值,取值范围:0-1。",FRImageColorGain.class.getName()), |
||||||
|
new FunctionDef( "FRImageGamma","功能:\n设置图像伽玛。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:伽玛值,取值范围:0-3。",FRImageGamma.class.getName()), |
||||||
|
new FunctionDef( "FRImageGrayScale","功能:\n设置图像灰度化。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。",FRImageGrayScale.class.getName()), |
||||||
|
new FunctionDef( "FRImageColorInvert","功能:\n设置图像颜色反转。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。",FRImageColorInvert.class.getName()), |
||||||
|
new FunctionDef( "FRImageColorLevel","功能:\n设置图像颜色Level。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:highLevel,取值范围:0-1。\n参数3:highOutputLevel,取值范围:0-1。\n参数4:lowLevel,取值范围:0-1。\n参数5:lowOutputLevel,取值范围:0-1。",FRImageColorLevel.class.getName()), |
||||||
|
new FunctionDef( "FRImageMixChannel","功能:\n混合图像RGB通道。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:blueGreen,取值范围:0-255。\n参数3:intoRed,取值范围:0-255。\n参数4:redBlue,取值范围:0-255。\n参数5:intoGreen,取值范围:0-255。\n参数6:greenRed,取值范围:0-255。\n参数7:intoBlue,取值范围:0-255。",FRImageMixChannel.class.getName()), |
||||||
|
new FunctionDef( "FRImagePosterize","功能:\n设置图像招贴画。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:招贴画层级,取值范围:1-30。",FRImagePosterize.class.getName()), |
||||||
|
new FunctionDef( "FRImageReScale","功能:\n图像重新调节。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像重新调节因子,取值范围:0-5。",FRImageReScale.class.getName()), |
||||||
|
new FunctionDef( "FRImageSolar","功能:\n设置图像过度曝光。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。",FRImageSolar.class.getName()), |
||||||
|
new FunctionDef( "FRImageTransparency","功能:\n设置图像不透明级别。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像不透明级别,取值范围(整数):0-255。",FRImageTransparency.class.getName()), |
||||||
|
new FunctionDef( "FRImageGaussianBlur","功能:\n设置图像高斯模糊。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像高斯模糊半径,取值范围(浮点):0-100。",FRImageGaussianBlur.class.getName()), |
||||||
|
new FunctionDef( "FRImageEmboss","功能:\n设置浮雕图像。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:azimuth,取值范围(浮点):0-6.28。\n参数3:bumpHeight,取值范围(浮点):0-1。\n参数4:elevation,取值范围(浮点):0-1.57。\n参数5:emboss,取值范围(布尔):true或false。",FRImageEmboss.class.getName()), |
||||||
|
new FunctionDef( "FRImageMosaic","功能:\n设置图像马赛克。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:设置图像马赛克大小,取值范围(整数):0-100。",FRImageMosaic.class.getName()), |
||||||
|
new FunctionDef( "FRImageWeave","功能:\n设置图像编织化。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:XWidth,编织带横向宽度,取值范围(浮点):1-256。\n参数3:YWidth,编织带纵向宽度,取值范围(浮点):1-256。\n参数4:XGap,编织空横向宽度,取值范围(浮点):1-256。\n参数5:YGap,编织空纵向宽度,取值范围(浮点):1-256。",FRImageWeave.class.getName()), |
||||||
|
new FunctionDef( "FRImageGlow","功能:\n设置图像产生发光效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:发光半径,取值范围(浮点):0-100。\n参数3:amount,发光数值,取值范围(浮点):0-100。",FRImageGlow.class.getName()), |
||||||
|
new FunctionDef( "FRImageDissolve","功能:\n设置图像溶解效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:图像溶解密度,取值范围(浮点):0-100。\n参数3:图像溶解柔软度,取值范围(浮点):0-100。",FRImageDissolve.class.getName()), |
||||||
|
new FunctionDef( "FRImageChrome","功能:\n图像产生各种金属效果和更广泛的非常沉闷的效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:柔软度bumpSoftness,取值范围:0-50(浮点)。\n参数3:bumpHeight高度,取值范围(浮点):0-5。\n参数4:amount,取值范围(浮点):0-100。\n参数5:exposure,取值范围(浮点):0-5。\n参数6:diffuseColor,取值范围(16进制6位颜色范围,文本用引号括起来):000000-FFFFFF。",FRImageChrome.class.getName()), |
||||||
|
new FunctionDef( "FRImageFlare","功能:\n图像产生各种闪光效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:光源横坐标,取值范围(浮点):0-1。\n参数3:光源纵坐标,取值范围(浮点):0-1。\n参数4:光源半径,取值范围(浮点):0-400。\n参数5:光源数量,取值范围(浮点):0-100。\n参数6:光源环数量,取值范围(浮点):0-100。\n参数7:光源环宽度,取值范围(浮点):0-10。\n参数8:光源数量,取值范围(浮点):0-100。\n参数9:光源颜色,取值范围(16进制6位颜色范围,文本用引号括起来):000000-FFFFFF。",FRImageFlare.class.getName()), |
||||||
|
new FunctionDef( "FRImageOil","功能:\n设置图像油画效果。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:设置层级,取值范围(整数):1-256。\n参数3:设置油画半径,取值范围(整数):1-5。",FRImageOil.class.getName()), |
||||||
|
new FunctionDef( "FRImageCrystallize","功能:\n设置图像结晶化效果。 \n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:设置结晶化颗粒大小,取值范围(浮点):1-10。\n参数3:设置结晶化随机性,取值范围(浮点):0-1。\n参数4:设置边界,取值范围(浮点):0-1。\n参数5:设置结晶化类型,取值范围(整数):1-4。\n参数9:结晶化边界颜色,取值范围(16进制6位颜色范围,文本用引号括起来):000000-FFFFFF。",FRImageCrystallize.class.getName()), |
||||||
|
new FunctionDef( "FRImageStamp","功能:\n生成图像黑白图章效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:效果半径,取值范围(浮点):0-100。\n参数3:图像溶解柔软度,取值范围(浮点):0-1。\n参数4:图像阈,取值范围(浮点):0-1。",FRImageStamp.class.getName()), |
||||||
|
new FunctionDef( "FRImageSparkle","功能:\n生成图像闪耀效果。\n参数说明:\n参数1:图像文件路径,如:c:\\1.png,或包含图像、图像文件路径的单元格。\n参数2:闪耀效果半径,取值范围(整数):0-300。\n参数3:图像闪耀随机性,取值范围(整数):0-50。\n参数4:光线数量,取值范围(整数):0-300。",FRImageSparkle.class.getName()), |
||||||
|
|
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getGroupName() { |
||||||
|
return "ImageProcessFunction"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package com.fr.plugin.image.process; |
||||||
|
|
||||||
|
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||||
|
|
||||||
|
public class MyLocaleFinder extends AbstractLocaleFinder { |
||||||
|
@Override |
||||||
|
public String find() { |
||||||
|
return "com/fr/plugin/image/process"; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,33 @@ |
|||||||
|
package com.fr.plugin.image.process.Utils; |
||||||
|
|
||||||
|
import java.awt.geom.Point2D; |
||||||
|
//生成闪光点
|
||||||
|
public class FlarePoint2D extends Point2D { |
||||||
|
double x; |
||||||
|
double y; |
||||||
|
|
||||||
|
public FlarePoint2D() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public FlarePoint2D(double x, double y) { |
||||||
|
this.x = x; |
||||||
|
this.y = y; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public double getX() { |
||||||
|
return this.x; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public double getY() { |
||||||
|
return this.y; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setLocation(double x, double y) { |
||||||
|
this.x=x; |
||||||
|
this.y=y; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
package com.fr.plugin.image.process.Utils; |
||||||
|
|
||||||
|
import net.coobird.thumbnailator.geometry.Position; |
||||||
|
import java.awt.*; |
||||||
|
//生成坐标点
|
||||||
|
public final class PositionNew implements Position { |
||||||
|
private int x; |
||||||
|
private int y; |
||||||
|
public PositionNew(int x, int y) { |
||||||
|
this.x=x; |
||||||
|
this.y=y; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Point calculate(int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) { |
||||||
|
return new Point(this.x,this.y); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
Plugin.Function.ImagProcess_ID=com.fr.plugin.function.imagProcess |
||||||
|
Plugin.Function.ImagProcess_AUTHOR_ERROR=Error:authorization is expired |
||||||
|
Plugin.Function.ImagProcess_CHECK_PASS=checkPass |
||||||
|
Plugin.Function.ImagProcess_ReadImageError=Read Image Error! |
||||||
|
Plugin.Function.ImagProcess_ArgsCountError=Args Count Error! |
||||||
|
Plugin.Function.ImagProcess_FileNotFind=File not Find! |
Loading…
Reference in new issue