diff --git a/fr-plugin-CharCartnoon-1.0/fr-plugin-CharCartnoon-1.0.jar b/fr-plugin-CharCartnoon-1.0/fr-plugin-CharCartnoon-1.0.jar
index 3a8e8bf..35a0677 100644
Binary files a/fr-plugin-CharCartnoon-1.0/fr-plugin-CharCartnoon-1.0.jar and b/fr-plugin-CharCartnoon-1.0/fr-plugin-CharCartnoon-1.0.jar differ
diff --git a/install/fr-plugin-CharCartnoon-1.0.zip b/install/fr-plugin-CharCartnoon-1.0.zip
index 769d84b..bc7dbab 100644
Binary files a/install/fr-plugin-CharCartnoon-1.0.zip and b/install/fr-plugin-CharCartnoon-1.0.zip differ
diff --git a/src/com/fr/plugin/cool/cartnoon/FRBlurText.java b/src/com/fr/plugin/cool/cartnoon/FRBlurText.java
new file mode 100644
index 0000000..2688b83
--- /dev/null
+++ b/src/com/fr/plugin/cool/cartnoon/FRBlurText.java
@@ -0,0 +1,85 @@
+package com.fr.plugin.cool.cartnoon;
+
+import com.fr.intelli.record.Focus;
+import com.fr.intelli.record.Original;
+import com.fr.plugin.cool.cartnoon.utils.AnimatedGifEncoder;
+import com.fr.plugin.cool.cartnoon.web.ImageViewer;
+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 com.jhlabs.image.GaussianFilter;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+@EnableMetrics
+@Authorize(callSignKey = FunConstants.PLUGIN_ID)
+public class FRBlurText extends AbstractFunction {
+ @Override
+ @Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRBlurText", source = Original.PLUGIN)
+ public Object run(Object[] args) {
+ if(!FunConstants.Author()){
+ return FunConstants.AUTHOR_ERROR;
+ }
+ if(!FunConstants.CheckArgs(args,6)){
+ return Primitive.ERROR_VALUE;
+ }
+ final String text = args[0].toString();
+
+ int width= Integer.parseInt(args[1].toString());
+ int height= Integer.parseInt(args[2].toString());
+ int fontSize= Integer.parseInt(args[3].toString());
+ int rate= Integer.parseInt(args[4].toString());
+ final Color color = FunConstants.TextToColor(args[5].toString());
+
+ final String id=FunConstants.GetCellId(this);
+ final String url="/webroot/decision/url/img?id="+id;
+ try {
+ CreateMasaicText(id,text,fontSize,rate,color);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return "";
+
+ }
+
+
+ private void CreateMasaicText(String id, String text, int fontSize, int rate, Color color) throws IOException {
+
+ // 读数据
+ AnimatedGifEncoder e = new AnimatedGifEncoder();
+
+ ByteArrayOutputStream out=new ByteArrayOutputStream();
+ e.start(out);
+
+ //图片之间间隔时间
+ e.setDelay(rate); // 1 frame per sec
+ //重复次数 0表示无限重复 默认不重复
+ e.setRepeat(0);
+ //添加图片
+ final BufferedImage image = FunConstants.ImageFromMultiText(text, fontSize, color);
+ for (int o=100; o>0; o--) {
+ e.addFrame(setFilter(image,o));
+ }
+ for (int i = 0; i < 30; i++) {
+ e.addFrame(image);
+ }
+ e.finish();
+
+ byte[] data = out.toByteArray();
+ ImageViewer.gifData.put(id,data);
+ }
+ //图像上执行高斯模糊
+ 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;
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/fr/plugin/cool/cartnoon/FRCartnoonFunctions.java b/src/com/fr/plugin/cool/cartnoon/FRCartnoonFunctions.java
index 03d6b79..c8ece54 100644
--- a/src/com/fr/plugin/cool/cartnoon/FRCartnoonFunctions.java
+++ b/src/com/fr/plugin/cool/cartnoon/FRCartnoonFunctions.java
@@ -18,6 +18,10 @@ public class FRCartnoonFunctions extends AbstractFunctionDefContainer {
new FunctionDef("FRRotateText", "生成旋转文本动画效果。\n参数说明:\n参数1:字符型,要旋转的文本。\n参数2:整型,文本宽度。\n参数3:整型,文本高度。\n参数4:整型,文本字号。\n参数5:整型,动画刷新频率(毫秒)。\n示例:FRRotateText(\"你好,世界\",180,180,25,300,\"ff0000\")", FRRotateText.class.getName()),
new FunctionDef("FRAnimateArraow", "生成箭头动画效果。\n参数说明:\n参数1:整型,页面占用宽度。\n参数2:整型,页面占用高度。\n参数3:文本,箭头颜色,如FF0000。\n参数4:整型,箭头粗细。\n示例:FRAnimateArraow(300,200,\"ff0000\",10)", FRAnimateArraow.class.getName()),
new FunctionDef("FRCountUp", "生成数字计数动画效果。\n参数说明:\n参数1:整型,要计数的数字。\n参数2:整型,显示宽度。\n参数3:整型,显示高度。\n参数4:整型,文本字号。\n参数5:整型,动画刷新频率(毫秒)。\n示例:FRCountUp(\"123456790\",500,100,20,100,\"ffff00\")", FRCountUp.class.getName()),
+ new FunctionDef("FRClockTime", "生成时钟动画效果。\n参数说明:\n参数1:文本,时间,用HH:MM表示。\n参数2:整型,显示宽度。\n参数3:整型,显示高度。\n参数4:整型,动画刷新频率(毫秒)。\n示例:FRClockTime(\"123456790\",500,100,20,100,\"ffff00\")", FRClockTime.class.getName()),
+ new FunctionDef("FRMasaicText", "生成马塞克动画效果。\n参数说明:\n参数1:显示的文本。\n参数2:整型,显示宽度。\n参数3:整型,显示高度。\n参数4:整型,动画刷新频率(毫秒)。\n示例:FRMasaicText(\"你好,世界\", 180, 180, 25, 100, \"ff0000\")", FRMasaicText.class.getName()),
+ new FunctionDef("FRBlurText", "生成高斯模糊动画效果。\n参数说明:\n参数1:显示的文本。\n参数2:整型,显示宽度。\n参数3:整型,显示高度。\n参数4:整型,动画刷新频率(毫秒)。\n示例:FRBlurText(\"你好,世界\", 180, 180, 25, 60, \"ff0000\")", FRBlurText.class.getName()),
+ new FunctionDef("FRCustomAnimation", "生成自定义动画效果。\n参数说明:\n参数1:文本数组,动画图片文件名或网址。\n参数2:整型,动画刷新频率(毫秒)。\n参数3:整型,显示宽度。\n参数4:整型,显示高度。\n示例:FRCustomAnimation([\"http://www.jhlabs.com/ip/filters/ChannelMixFilter.jpg\",\"http://www.jhlabs.com/ip/filters/DiffuseFilter.jpg\"], 100, 300, 300)", FRCustomAnimation.class.getName()),
};
}
diff --git a/src/com/fr/plugin/cool/cartnoon/FRClockTime.java b/src/com/fr/plugin/cool/cartnoon/FRClockTime.java
new file mode 100644
index 0000000..2435d23
--- /dev/null
+++ b/src/com/fr/plugin/cool/cartnoon/FRClockTime.java
@@ -0,0 +1,111 @@
+package com.fr.plugin.cool.cartnoon;
+
+import com.fr.base.BaseUtils;
+import com.fr.intelli.record.Focus;
+import com.fr.intelli.record.Original;
+import com.fr.plugin.cool.cartnoon.utils.AnimatedGifEncoder;
+import com.fr.plugin.cool.cartnoon.web.ImageViewer;
+import com.fr.record.analyzer.EnableMetrics;
+import com.fr.script.AbstractFunction;
+import com.fr.stable.Primitive;
+import com.fr.stable.fun.Authorize;
+import net.coobird.thumbnailator.Thumbnails;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+@EnableMetrics
+@Authorize(callSignKey = FunConstants.PLUGIN_ID)
+public class FRClockTime extends AbstractFunction {
+ @Override
+ @Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRClockTime", source = Original.PLUGIN)
+ public Object run(Object[] args) {
+ if(!FunConstants.Author()){
+ return FunConstants.AUTHOR_ERROR;
+ }
+ if(!FunConstants.CheckArgs(args,4)){
+ return Primitive.ERROR_VALUE;
+ }
+ final String time = args[0].toString();
+ if(time.split(":").length!=2){
+ return Primitive.ERROR_VALUE;
+ }
+ int htime=Integer.parseInt(time.split(":")[0]);
+ if(htime>12){
+ htime=htime%12;
+ }
+ int mtime=Integer.parseInt(time.split(":")[1]);
+ int width= Integer.parseInt(args[1].toString());
+ int height= Integer.parseInt(args[2].toString());
+ int rate= Integer.parseInt(args[3].toString());
+
+ final String id=FunConstants.GetCellId(this);
+ final String url="/webroot/decision/url/img?id="+id;
+ try {
+ CreateClockTime(id,htime,mtime,width,rate);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return "";
+
+ }
+
+
+ private void CreateClockTime(String id, int htime,int mtime, int width, int rate) throws IOException {
+
+ BufferedImage bufferColck = BaseUtils.readImage("com/fr/plugin/cool/cartnoon/web/resource/images/clock.png");
+ final BufferedImage bufferHour = BaseUtils.readImage("com/fr/plugin/cool/cartnoon/web/resource/images/hour.png");
+ final BufferedImage bufferMinute = BaseUtils.readImage("com/fr/plugin/cool/cartnoon/web/resource/images/minute.png");
+
+ bufferColck=setSize(bufferColck,width,width);
+ AnimatedGifEncoder encoder = new AnimatedGifEncoder();
+ ByteArrayOutputStream out=new ByteArrayOutputStream();
+ encoder.start(out);
+ encoder.setTransparent(Color.WHITE);
+ encoder.setRepeat(0);
+ encoder.setDelay(rate);
+ Graphics2D g2d = bufferColck.createGraphics();
+
+ int x1=bufferColck.getWidth()/2;
+ int y1=bufferColck.getHeight()/2;
+ int hrr=htime*360/12;
+ int hrm=mtime*30/60;
+ int mr=mtime*360/60;
+
+ int o=36;
+ for (int i=0; i<=o; i++) {
+ g2d.setColor(Color.WHITE);
+ BufferedImage hImage1=setFilter(bufferHour,1,hrr+i*hrm/o);
+ BufferedImage hImage2=setSize(hImage1,bufferColck.getWidth(),bufferColck.getHeight());
+ g2d.fillRect(x1/2,y1/2,x1,y1);
+ g2d.drawImage(hImage2,null,0,0);
+
+ BufferedImage mImage1=setFilter(bufferMinute,1,i*mr/o);
+ BufferedImage mImage2=setSize(mImage1,bufferColck.getWidth(),bufferColck.getHeight());
+ g2d.drawImage(mImage2,null,0,0);
+ encoder.addFrame(bufferColck);
+
+ }
+ for (int i = 0; i <10 ; i++) {
+ encoder.addFrame(bufferColck);
+ }
+
+
+ g2d.dispose();
+ encoder.finish();
+ byte[] data = out.toByteArray();
+ ImageViewer.gifData.put(id,data);
+ }
+ //设置图像旋转缩放
+ private static BufferedImage setFilter(BufferedImage src, float scale, float rotate) throws IOException {
+ BufferedImage result = Thumbnails.of(src).scale(scale).rotate(rotate).asBufferedImage();
+ return result;
+ }
+ private static BufferedImage setSize(BufferedImage src, int width, int height) throws IOException {
+ BufferedImage result = Thumbnails.of(src).size(width,height).asBufferedImage();
+ return result;
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/fr/plugin/cool/cartnoon/FRCustomAnimation.java b/src/com/fr/plugin/cool/cartnoon/FRCustomAnimation.java
new file mode 100644
index 0000000..8185f7f
--- /dev/null
+++ b/src/com/fr/plugin/cool/cartnoon/FRCustomAnimation.java
@@ -0,0 +1,75 @@
+package com.fr.plugin.cool.cartnoon;
+
+import com.fr.intelli.record.Focus;
+import com.fr.intelli.record.Original;
+import com.fr.plugin.cool.cartnoon.utils.AnimatedGifEncoder;
+import com.fr.plugin.cool.cartnoon.web.ImageViewer;
+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 net.coobird.thumbnailator.Thumbnails;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+@EnableMetrics
+@Authorize(callSignKey = FunConstants.PLUGIN_ID)
+public class FRCustomAnimation extends AbstractFunction {
+ @Override
+ @Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRCustomAnimation", source = Original.PLUGIN)
+ public Object run(Object[] args) {
+ if(!FunConstants.Author()){
+ return FunConstants.AUTHOR_ERROR;
+ }
+ if(!FunConstants.CheckArgs(args,4)){
+ return Primitive.ERROR_VALUE;
+ }
+ String[] arrSrcImg=FunConstants.GetSrcImgFromArgs(args[0]);
+ int rate= Integer.parseInt(args[1].toString());
+ int width= Integer.parseInt(args[2].toString());
+ int height= Integer.parseInt(args[3].toString());
+
+ final String id=FunConstants.GetCellId(this);
+ final String url="/webroot/decision/url/img?id="+id;
+ try {
+ Create(id,arrSrcImg,rate,width,height);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return "";
+
+ }
+
+
+ private void Create(String id, String[] srcImage, int rate,int width,int height) throws IOException {
+
+ // 读数据
+ AnimatedGifEncoder e = new AnimatedGifEncoder();
+
+ ByteArrayOutputStream out=new ByteArrayOutputStream();
+ e.start(out);
+
+ //图片之间间隔时间
+ e.setDelay(rate); // 1 frame per sec
+ //重复次数 0表示无限重复 默认不重复
+ e.setRepeat(0);
+ //添加图片
+ int imgLen=srcImage.length;
+ for (int i = 0; i < imgLen; i++) {
+ e.addFrame(setSize(FunConstants.readImage(srcImage[i]),width,height));
+ }
+ e.finish();
+
+ byte[] data = out.toByteArray();
+ ImageViewer.gifData.put(id,data);
+ }
+
+ private BufferedImage setSize(BufferedImage src, int width, int height) throws IOException {
+ BufferedImage result = Thumbnails.of(src).size(width,height).asBufferedImage();
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/com/fr/plugin/cool/cartnoon/FRMasaicText.java b/src/com/fr/plugin/cool/cartnoon/FRMasaicText.java
new file mode 100644
index 0000000..627affc
--- /dev/null
+++ b/src/com/fr/plugin/cool/cartnoon/FRMasaicText.java
@@ -0,0 +1,84 @@
+package com.fr.plugin.cool.cartnoon;
+
+import com.fr.intelli.record.Focus;
+import com.fr.intelli.record.Original;
+import com.fr.plugin.cool.cartnoon.utils.AnimatedGifEncoder;
+import com.fr.plugin.cool.cartnoon.web.ImageViewer;
+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.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+@EnableMetrics
+@Authorize(callSignKey = FunConstants.PLUGIN_ID)
+public class FRMasaicText extends AbstractFunction {
+ @Override
+ @Focus(id = FunConstants.PLUGIN_ID, text = "Plugin-Function_FRMasaicText", source = Original.PLUGIN)
+ public Object run(Object[] args) {
+ if(!FunConstants.Author()){
+ return FunConstants.AUTHOR_ERROR;
+ }
+ if(!FunConstants.CheckArgs(args,6)){
+ return Primitive.ERROR_VALUE;
+ }
+ final String text = args[0].toString();
+
+ int width= Integer.parseInt(args[1].toString());
+ int height= Integer.parseInt(args[2].toString());
+ int fontSize= Integer.parseInt(args[3].toString());
+ int rate= Integer.parseInt(args[4].toString());
+ final Color color = FunConstants.TextToColor(args[5].toString());
+
+ final String id=FunConstants.GetCellId(this);
+ final String url="/webroot/decision/url/img?id="+id;
+ try {
+ CreateMasaicText(id,text,fontSize,rate,color);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return "";
+
+ }
+
+
+ private void CreateMasaicText(String id, String text, int fontSize, int rate, Color color) throws IOException {
+
+ // 读数据
+ AnimatedGifEncoder e = new AnimatedGifEncoder();
+
+ ByteArrayOutputStream out=new ByteArrayOutputStream();
+ e.start(out);
+
+ //图片之间间隔时间
+ e.setDelay(rate); // 1 frame per sec
+ //重复次数 0表示无限重复 默认不重复
+ e.setRepeat(0);
+ //添加图片
+ final BufferedImage image = FunConstants.ImageFromMultiText(text, fontSize, color);
+ for (int o=36; o>0; o--) {
+ e.addFrame(setFilter(image,o));
+ }
+ for (int i = 0; i < 30; i++) {
+ e.addFrame(image);
+ }
+ e.finish();
+
+ byte[] data = out.toByteArray();
+ ImageViewer.gifData.put(id,data);
+ }
+ //设置图像马赛克
+ 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;
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/fr/plugin/cool/cartnoon/FRRotateText.java b/src/com/fr/plugin/cool/cartnoon/FRRotateText.java
index e30be6a..748d2c7 100644
--- a/src/com/fr/plugin/cool/cartnoon/FRRotateText.java
+++ b/src/com/fr/plugin/cool/cartnoon/FRRotateText.java
@@ -62,7 +62,6 @@ public class FRRotateText extends AbstractFunction {
//添加图片
final BufferedImage image = FunConstants.ImageFromMultiText(text, fontSize, color);
for (float i = 1; i <= 10; i++) {
-// float scale=i/10;
float rotate=i*36;
e.addFrame(setFilter(image,1,rotate));
}
diff --git a/src/com/fr/plugin/cool/cartnoon/FunConstants.java b/src/com/fr/plugin/cool/cartnoon/FunConstants.java
index ccce279..0f96db9 100644
--- a/src/com/fr/plugin/cool/cartnoon/FunConstants.java
+++ b/src/com/fr/plugin/cool/cartnoon/FunConstants.java
@@ -1,5 +1,8 @@
package com.fr.plugin.cool.cartnoon;
+import com.fr.base.BaseUtils;
+import com.fr.general.FArray;
+import com.fr.general.GeneralUtils;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContexts;
@@ -11,10 +14,17 @@ import com.fr.stable.ColumnRow;
import com.fr.stable.fun.Authorize;
import sun.font.FontDesignMetrics;
+import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
@Authorize(callSignKey = FunConstants.PLUGIN_ID)
public class FunConstants {
@@ -147,4 +157,49 @@ public class FunConstants {
String id=strCol+intRow;
return id;
}
+ static BufferedImage readImage(Object file) {
+ BufferedImage res=null;
+// if (file instanceof BufferedImage) {
+// return (BufferedImage) file;
+// }
+ String filename = file.toString();
+ if(isHttpUrl(filename)){
+ res= BaseUtils.readImage(filename);
+ }else {
+
+ File fn = new File(filename);
+ try {
+ ImageIO.setUseCache(false);
+ res = ImageIO.read(fn);
+
+ } catch (IOException e) {
+ throw new Error("File:" + filename + InterProviderFactory.getProvider().getLocText("Plugin.Function.ImagProcess_ReadImageError"));
+ }
+ }
+ return res;
+ }
+ static boolean isHttpUrl(String urls) {
+ String regex = "(((https|http)?://)?([a-z0-9]+[.])|(www.))"
+ + "\\w+[.|\\/]([a-z0-9]{0,})?[[.]([a-z0-9]{0,})]+((/[\\S&&[^,;\u4E00-\u9FA5]]+)+)?([.][a-z0-9]{0,}+|/?)";//设置正则表达式
+
+ Pattern pat = Pattern.compile(regex.trim());//对比
+ Matcher mat = pat.matcher(urls.trim());
+ return mat.matches();//判断是否匹配
+ }
+ static String[] GetSrcImgFromArgs(Object arg){
+ if (arg instanceof FArray) {
+ FArray fa = (FArray) arg;
+ int len = fa.length();
+ String[] result = new String[len];
+ for (int j = 0; j < len; j++) {
+ Object fao = fa.elementAt(j);
+ String title = GeneralUtils.objectToString(fao);
+ if (title != null && title != "" && title.length() != 0) {
+ result[j] = title;
+ }
+ }
+ return result;
+ }
+ return null;
+ }
}
diff --git a/src/com/fr/plugin/cool/cartnoon/TestFun.java b/src/com/fr/plugin/cool/cartnoon/TestFun.java
index 386370e..909879f 100644
--- a/src/com/fr/plugin/cool/cartnoon/TestFun.java
+++ b/src/com/fr/plugin/cool/cartnoon/TestFun.java
@@ -4,6 +4,7 @@ import com.fr.base.BaseUtils;
import com.fr.plugin.cool.cartnoon.utils.AnimatedGifEncoder;
import com.fr.plugin.cool.cartnoon.utils.DrawValueLine;
import com.fr.plugin.cool.cartnoon.web.ImageViewer;
+import com.jhlabs.image.BlockFilter;
import javafx.scene.shape.Shape3D;
import net.coobird.thumbnailator.Thumbnails;
@@ -14,64 +15,35 @@ import java.awt.image.BufferedImage;
import java.io.*;
public class TestFun {
- public static final int SIZE = 200;
+
public static void main(String args[]) throws Exception {
-// BufferedImage image1 = new BufferedImage(500, 500, BufferedImage.TYPE_4BYTE_ABGR);
-// DrawValueLine drawValueLine= new DrawValueLine(image1,50,50,250,50,24.0);
-// drawValueLine.DrawLine(10);
-// final BufferedImage image = BaseUtils.readImage("com/fr/plugin/cool/cartnoon/web/resource/images/click.png");
- BufferedImage image = BaseUtils.readImage("I:\\Users\\Administrator\\2020\\report-starter-10\\plugin-function-char-cartnoon\\src\\com\\fr\\plugin\\cool\\cartnoon\\web\\resource\\images\\click.png");
- final BufferedImage hour = BaseUtils.readImage("I:\\Users\\Administrator\\2020\\report-starter-10\\plugin-function-char-cartnoon\\src\\com\\fr\\plugin\\cool\\cartnoon\\web\\resource\\images\\hour.png");
- final BufferedImage minute = BaseUtils.readImage("I:\\Users\\Administrator\\2020\\report-starter-10\\plugin-function-char-cartnoon\\src\\com\\fr\\plugin\\cool\\cartnoon\\web\\resource\\images\\minute.png");
- image=setSize(image,300,300);
+
+ BufferedImage image=BaseUtils.readImage("http://www.jhlabs.com/shadowheader.jpg");
AnimatedGifEncoder encoder = new AnimatedGifEncoder();
encoder.start("d:\\out.gif");
encoder.setTransparent(Color.WHITE);
encoder.setRepeat(0);
encoder.setDelay(100);
- Graphics2D g2d = image.createGraphics();
- int x1=image.getWidth()/2;
- int y1=image.getHeight()/2;
- int x2=x1;
- int y2=y1/2;
- int htime=9;
- int mtime=20;
- int hr=htime*(360+30)/12;
- int hrr=htime*360/12;
- int hrm=mtime*30/60;
- int mr=mtime*360/60;
- System.out.printf("\nhrm:"+hrm);
- int o=36;
- for (int i=0; i<=o; i++) {
- g2d.setColor(Color.WHITE);
- BufferedImage hImage1=setFilter(hour,1,hrr+i*hrm/o);
- BufferedImage hImage2=setSize(hImage1,image.getWidth(),image.getHeight());
- g2d.fillRect(x1/2,y1/2,x1,y1);
- g2d.drawImage(hImage2,null,0,0);
+ int o=36;
+ for (; o>0; o--) {
- BufferedImage mImage1=setFilter(minute,1,i*mr/o);
- BufferedImage mImage2=setSize(mImage1,image.getWidth(),image.getHeight());
- g2d.drawImage(mImage2,null,0,0);
- encoder.addFrame(image);
+ encoder.addFrame(setFilter(image,o));
}
- for (int i = 0; i <10 ; i++) {
+ for (int i = 0; i < 30; i++) {
encoder.addFrame(image);
}
-
-
- g2d.dispose();
encoder.finish();
}
- //设置图像旋转缩放
- private static BufferedImage setFilter(BufferedImage src, float scale, float rotate) throws IOException {
- BufferedImage result = Thumbnails.of(src).scale(scale).rotate(rotate).asBufferedImage();
- return result;
- }
- private static BufferedImage setSize(BufferedImage src, int width, int height) throws IOException {
- BufferedImage result = Thumbnails.of(src).size(width,height).asBufferedImage();
+
+ //设置图像马赛克
+ private static 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;
}
}
diff --git a/src/com/fr/plugin/cool/cartnoon/web/resource/images/click.png b/src/com/fr/plugin/cool/cartnoon/web/resource/images/clock.png
similarity index 100%
rename from src/com/fr/plugin/cool/cartnoon/web/resource/images/click.png
rename to src/com/fr/plugin/cool/cartnoon/web/resource/images/clock.png