From 84599f1fdac0d9723c7f02a2e66b0e909ad911d7 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 30 May 2024 09:44:11 +0800
Subject: [PATCH] 图片上传

---
 src/main/java/cc/mrbird/febs/mall/test/FingerPrint.java   |  634 ++++++++++----------
 src/main/java/cc/mrbird/febs/mall/test/PixelateImage.java |  190 +++---
 src/main/java/cc/mrbird/febs/mall/test/ImageToChar.java   |  292 ++++----
 src/main/java/cc/mrbird/febs/mall/test/getGray.java       |  102 +-
 pom.xml                                                   |   10 
 src/main/java/cc/mrbird/febs/mall/test/DYDelMark.java     |  324 +++++-----
 src/main/java/cc/mrbird/febs/mall/test/imageTest.java     |  194 +++---
 7 files changed, 873 insertions(+), 873 deletions(-)

diff --git a/pom.xml b/pom.xml
index 8f21dc9..1002b06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,11 +29,11 @@
 
     <dependencies>
 
-        <dependency>
-            <groupId>com.madgag</groupId>
-            <artifactId>animated-gif-lib</artifactId>
-            <version>1.4</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.madgag</groupId>-->
+<!--            <artifactId>animated-gif-lib</artifactId>-->
+<!--            <version>1.4</version>-->
+<!--        </dependency>-->
 
         <dependency>
             <groupId>org.web3j</groupId>
diff --git a/src/main/java/cc/mrbird/febs/mall/test/DYDelMark.java b/src/main/java/cc/mrbird/febs/mall/test/DYDelMark.java
index 945de93..3328eeb 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/DYDelMark.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/DYDelMark.java
@@ -1,162 +1,162 @@
-package cc.mrbird.febs.mall.test;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-
-import java.io.IOException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class DYDelMark {
-    public static void main(String[] args) {
-        String content = "https://v.douyin.com/iLwxgYHE/";
-        JSONObject douYData = extractDouYinData(content);
-        if (douYData != null) {
-            System.out.println(douYData);
-        } else {
-            System.out.println(1);
-        }
-    }
-    private static JSONObject extractDouYinData(String content) {
-        String url = extractUrl(content);
-
-        if (url != null) {
-            if (content.contains("douyin.com")) {
-                if (content.contains("live.douyin.com")) {
-                    System.out.println("直播");
-                    return null;
-                } else {
-                    String dyUrlOrId = processContent(content);
-                    String videoId = isNumeric(dyUrlOrId) ? dyUrlOrId : extractVideoId(dyUrlOrId);
-                    if (videoId!=null){
-                        JSONArray dyData = serverGetDy(videoId);
-
-                        if (dyData != null && dyData.size() > 0) {
-                            JSONObject jsonData = dyData.getJSONObject(0);
-                            return buildDouYinData(jsonData);
-                        }
-                    }
-                }
-            }
-        }
-        return null;
-    }
-    private static JSONObject buildDouYinData(JSONObject jsonData) {
-        JSONObject douYData = new JSONObject();
-        douYData.put("desc", jsonData.getString("desc"));
-
-        JSONObject author = jsonData.getJSONObject("author");
-        douYData.put("nickname", author.getString("nickname"));
-
-        JSONObject videoJson = jsonData.getJSONObject("video");
-        JSONObject coverJson = videoJson.getJSONObject("cover");
-        String coverUrl = coverJson.getJSONArray("url_list").getString(0);
-        douYData.put("coverUrl", coverUrl);
-
-        if (jsonData.getJSONArray("images") != null) {
-            JSONArray images = jsonData.getJSONArray("images");
-            JSONArray imageArray = new JSONArray();
-
-            for (int i = 0; i < images.size(); i++) {
-                JSONObject image = images.getJSONObject(i);
-                JSONArray urlList = image.getJSONArray("url_list");
-                imageArray.add(urlList.get(0));
-            }
-
-            douYData.put("type", 2);
-            douYData.put("data", imageArray);
-        } else {
-            JSONObject playAddr = videoJson.getJSONObject("play_addr");
-            String uri = playAddr.getString("uri");
-            String videoUrl = "https://www.iesdouyin.com/aweme/v1/play/?video_id=" + uri + "&ratio=1080p&line=0";
-            douYData.put("type", 1);
-            douYData.put("data", videoUrl);
-        }
-
-        return douYData;
-    }
-    public static String processContent(String content) {
-        String douyinUrl = extractMatch(content, "v\\.douyin\\.com/[a-zA-Z0-9]+");
-        if (douyinUrl != null) {
-            return "https://" + douyinUrl;
-        }
-        String digit = extractMatch(content, "\\d{19}");
-        return digit;
-    }
-    private static String extractMatch(String content, String regex) {
-        Pattern pattern = Pattern.compile(regex);
-        Matcher matcher = pattern.matcher(content);
-        return matcher.find() ? matcher.group(0) : null;
-    }
-    public static boolean isNumeric(String str) {
-        return str.matches("\\d+");
-    }
-    private static String extractUrl(String text) {
-        // 匹配网址的正则表达式
-        String regex = "https?://\\S+";
-        Pattern pattern = Pattern.compile(regex);
-        Matcher matcher = pattern.matcher(text);
-
-        // 查找匹配的链接
-        if (matcher.find()) {
-            return matcher.group();
-        }
-
-        return null;
-    }
-    public static String extractVideoId(String link) {
-        String redirectLink = getRedirectUrl(link);
-        Pattern patternVideo = Pattern.compile("/video/(\\d+)");
-        Pattern patternNote = Pattern.compile("/note/(\\d+)");
-
-        Matcher matcherVideo = patternVideo.matcher(redirectLink);
-        Matcher matcherNote = patternNote.matcher(redirectLink);
-
-        if (matcherVideo.find()) {
-            return matcherVideo.group(1);
-        } else if (matcherNote.find()) {
-            return matcherNote.group(1);
-        } else {
-            return null;
-        }
-    }
-    public static String getRedirectUrl(String url) {
-        OkHttpClient client = new OkHttpClient();
-        try {
-            Request request = new Request.Builder()
-                    .url(url)
-                    .get()
-                    .build();
-            Response response = client.newCall(request).execute();
-            return response.request().url().toString();
-
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-    private static JSONArray serverGetDy(String itemIds){
-        OkHttpClient client = new OkHttpClient().newBuilder().build();
-        Request Request = new Request.Builder()
-                //不知道这个a_bogus是啥 可能是个算法 随便填写或空即可
-                .url("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?reflow_source=reflow_page&item_ids="+itemIds+"&a_bogus=sdfds")
-                .addHeader("content-type", "application/x-www-form-urlencoded")
-                .get()
-                .build();
-        try {
-            Response response = client.newCall(Request).execute();
-            JSONObject jsonObject= JSONObject.parseObject(response.body().string());
-            if (jsonObject.getInteger("status_code").equals(0)){
-                return jsonObject.getJSONArray("item_list");
-            }
-            return null;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-}
+//package cc.mrbird.febs.mall.test;
+//
+//import com.alibaba.fastjson.JSONArray;
+//import com.alibaba.fastjson.JSONObject;
+//import okhttp3.OkHttpClient;
+//import okhttp3.Request;
+//import okhttp3.Response;
+//
+//import java.io.IOException;
+//import java.util.regex.Matcher;
+//import java.util.regex.Pattern;
+//
+//public class DYDelMark {
+//    public static void main(String[] args) {
+//        String content = "https://v.douyin.com/iLwxgYHE/";
+//        JSONObject douYData = extractDouYinData(content);
+//        if (douYData != null) {
+//            System.out.println(douYData);
+//        } else {
+//            System.out.println(1);
+//        }
+//    }
+//    private static JSONObject extractDouYinData(String content) {
+//        String url = extractUrl(content);
+//
+//        if (url != null) {
+//            if (content.contains("douyin.com")) {
+//                if (content.contains("live.douyin.com")) {
+//                    System.out.println("直播");
+//                    return null;
+//                } else {
+//                    String dyUrlOrId = processContent(content);
+//                    String videoId = isNumeric(dyUrlOrId) ? dyUrlOrId : extractVideoId(dyUrlOrId);
+//                    if (videoId!=null){
+//                        JSONArray dyData = serverGetDy(videoId);
+//
+//                        if (dyData != null && dyData.size() > 0) {
+//                            JSONObject jsonData = dyData.getJSONObject(0);
+//                            return buildDouYinData(jsonData);
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//        return null;
+//    }
+//    private static JSONObject buildDouYinData(JSONObject jsonData) {
+//        JSONObject douYData = new JSONObject();
+//        douYData.put("desc", jsonData.getString("desc"));
+//
+//        JSONObject author = jsonData.getJSONObject("author");
+//        douYData.put("nickname", author.getString("nickname"));
+//
+//        JSONObject videoJson = jsonData.getJSONObject("video");
+//        JSONObject coverJson = videoJson.getJSONObject("cover");
+//        String coverUrl = coverJson.getJSONArray("url_list").getString(0);
+//        douYData.put("coverUrl", coverUrl);
+//
+//        if (jsonData.getJSONArray("images") != null) {
+//            JSONArray images = jsonData.getJSONArray("images");
+//            JSONArray imageArray = new JSONArray();
+//
+//            for (int i = 0; i < images.size(); i++) {
+//                JSONObject image = images.getJSONObject(i);
+//                JSONArray urlList = image.getJSONArray("url_list");
+//                imageArray.add(urlList.get(0));
+//            }
+//
+//            douYData.put("type", 2);
+//            douYData.put("data", imageArray);
+//        } else {
+//            JSONObject playAddr = videoJson.getJSONObject("play_addr");
+//            String uri = playAddr.getString("uri");
+//            String videoUrl = "https://www.iesdouyin.com/aweme/v1/play/?video_id=" + uri + "&ratio=1080p&line=0";
+//            douYData.put("type", 1);
+//            douYData.put("data", videoUrl);
+//        }
+//
+//        return douYData;
+//    }
+//    public static String processContent(String content) {
+//        String douyinUrl = extractMatch(content, "v\\.douyin\\.com/[a-zA-Z0-9]+");
+//        if (douyinUrl != null) {
+//            return "https://" + douyinUrl;
+//        }
+//        String digit = extractMatch(content, "\\d{19}");
+//        return digit;
+//    }
+//    private static String extractMatch(String content, String regex) {
+//        Pattern pattern = Pattern.compile(regex);
+//        Matcher matcher = pattern.matcher(content);
+//        return matcher.find() ? matcher.group(0) : null;
+//    }
+//    public static boolean isNumeric(String str) {
+//        return str.matches("\\d+");
+//    }
+//    private static String extractUrl(String text) {
+//        // 匹配网址的正则表达式
+//        String regex = "https?://\\S+";
+//        Pattern pattern = Pattern.compile(regex);
+//        Matcher matcher = pattern.matcher(text);
+//
+//        // 查找匹配的链接
+//        if (matcher.find()) {
+//            return matcher.group();
+//        }
+//
+//        return null;
+//    }
+//    public static String extractVideoId(String link) {
+//        String redirectLink = getRedirectUrl(link);
+//        Pattern patternVideo = Pattern.compile("/video/(\\d+)");
+//        Pattern patternNote = Pattern.compile("/note/(\\d+)");
+//
+//        Matcher matcherVideo = patternVideo.matcher(redirectLink);
+//        Matcher matcherNote = patternNote.matcher(redirectLink);
+//
+//        if (matcherVideo.find()) {
+//            return matcherVideo.group(1);
+//        } else if (matcherNote.find()) {
+//            return matcherNote.group(1);
+//        } else {
+//            return null;
+//        }
+//    }
+//    public static String getRedirectUrl(String url) {
+//        OkHttpClient client = new OkHttpClient();
+//        try {
+//            Request request = new Request.Builder()
+//                    .url(url)
+//                    .get()
+//                    .build();
+//            Response response = client.newCall(request).execute();
+//            return response.request().url().toString();
+//
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//
+//        return null;
+//    }
+//    private static JSONArray serverGetDy(String itemIds){
+//        OkHttpClient client = new OkHttpClient().newBuilder().build();
+//        Request Request = new Request.Builder()
+//                //不知道这个a_bogus是啥 可能是个算法 随便填写或空即可
+//                .url("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?reflow_source=reflow_page&item_ids="+itemIds+"&a_bogus=sdfds")
+//                .addHeader("content-type", "application/x-www-form-urlencoded")
+//                .get()
+//                .build();
+//        try {
+//            Response response = client.newCall(Request).execute();
+//            JSONObject jsonObject= JSONObject.parseObject(response.body().string());
+//            if (jsonObject.getInteger("status_code").equals(0)){
+//                return jsonObject.getJSONArray("item_list");
+//            }
+//            return null;
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//            return null;
+//        }
+//    }
+//}
diff --git a/src/main/java/cc/mrbird/febs/mall/test/FingerPrint.java b/src/main/java/cc/mrbird/febs/mall/test/FingerPrint.java
index 788a348..a73b2f8 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/FingerPrint.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/FingerPrint.java
@@ -1,317 +1,317 @@
-package cc.mrbird.febs.mall.test;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.color.ColorSpace;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorConvertOp;
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-
-/**
- * 图片是采用phash算法,一共分为四步吧.
- *
- * 1.将图片缩放到16*16大小,这是我们选择的合适的大小,假如宽高不一样,直接将其压到16*16,去掉细节,只保留宏观;
- *
- * 2.图片一共是16*16的,共256个像素,我们将图片进行灰度化,灰度化就是只有黑白灰三种,从白到黑,一共分了255层;
- *
- * 3.灰度化之后将图片进行DCT转换(离散余弦变化),因为为了识别有的图片旋转,这个DCT转换是将图片进行了一种压缩算法;
- *
- * 4.我们对这个算法进行了优化,因为之前是计算像素的均值,我们为了更准确,我们取RGB,rgb一共分为255个像素,我们将255个像素分为16段,如果像素大于0-16记为0,17到32记为1,直到255,这样就得到255位的二进制,这就是这张图片的指纹码.
- *
- * 得到唯一标识的指纹码之后怎么去计算像素度呢?
- *
- * 通过汉明距离比较两个二进制距离,如果距离小于<10的话,我们就判定两张图片相似.如果两个指纹码(二进制)一模一样,我们就判定两个是一张图片,或者类似;
- */
-/**
- * 视频相似度算法:
- * 视频的话我们是通过ffmpeg(ff am pig),它是一个专门处理视频的框架,可以从视频中按针提取图片.然后就按照图片的相似度取对比了...
- */
-
-/**
- * https://blog.csdn.net/weixin_34095889/article/details/91923072?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171652008316800182787012%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171652008316800182787012&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-91923072-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E6%8A%8A%E5%9B%BE%E7%89%87%E8%BD%AC%E6%8D%A2%E6%88%90%E9%BB%91%E7%99%BD%E7%81%B0%E5%83%8F%E7%B4%A0%E9%A3%8E%E6%A0%BC&spm=1018.2226.3001.4187
- * 均值哈希实现图像指纹比较
- */
-public class FingerPrint {
-
-    public static void main(String[] args) {
-        FingerPrint fp1 = null;
-        FingerPrint fp2 = null;
-        try {
-            fp1 = new FingerPrint(ImageIO.read(new File("D:\\image\\F1.png")));
-            fp2 = new FingerPrint(ImageIO.read(new File("D:\\image\\Z1.jpg")));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        System.out.println(fp1.toString(false));
-        System.out.println(fp2.toString(false));
-        System.out.printf("sim=%f",fp1.compare(fp2));
-    }
-
-    /**
-     * 图像指纹的尺寸,将图像resize到指定的尺寸,来计算哈希数组
-     */
-    private static final int HASH_SIZE=16;
-    /**
-     * 保存图像指纹的二值化矩阵
-     */
-    private final byte[] binaryzationMatrix;
-    public FingerPrint(byte[] hashValue) {
-        if(hashValue.length!=HASH_SIZE*HASH_SIZE)
-            throw new IllegalArgumentException(String.format("length of hashValue must be %d",HASH_SIZE*HASH_SIZE ));
-        this.binaryzationMatrix=hashValue;
-    }
-    public FingerPrint(String hashValue) {
-        this(toBytes(hashValue));
-    }
-    public FingerPrint (BufferedImage src){
-        this(hashValue(src));
-    }
-    private static byte[] hashValue(BufferedImage src){
-        BufferedImage hashImage = resize(src,HASH_SIZE,HASH_SIZE);
-        byte[] matrixGray = (byte[]) toGray(hashImage).getData().getDataElements(0, 0, HASH_SIZE, HASH_SIZE, null);
-        return  binaryzation(matrixGray);
-    }
-    /**
-     * 从压缩格式指纹创建{@link FingerPrint}对象
-     * @param compactValue
-     * @return
-     */
-    public static FingerPrint createFromCompact(byte[] compactValue){
-        return new FingerPrint(uncompact(compactValue));
-    }
-
-    public static boolean validHashValue(byte[] hashValue){
-        if(hashValue.length!=HASH_SIZE)
-            return false;
-        for(byte b:hashValue){
-            if(0!=b&&1!=b)return false;
-        }
-        return true;
-    }
-    public static boolean validHashValue(String hashValue){
-        if(hashValue.length()!=HASH_SIZE)
-            return false;
-        for(int i=0;i<hashValue.length();++i){
-            if('0'!=hashValue.charAt(i)&&'1'!=hashValue.charAt(i))return false;
-        }
-        return true;
-    }
-    public byte[] compact(){
-        return compact(binaryzationMatrix);
-    }
-
-    /**
-     * 指纹数据按位压缩
-     * @param hashValue
-     * @return
-     */
-    private static byte[] compact(byte[] hashValue){
-        byte[] result=new byte[(hashValue.length+7)>>3];
-        byte b=0;
-        for(int i=0;i<hashValue.length;++i){
-            if(0==(i&7)){
-                b=0;
-            }
-            if(1==hashValue[i]){
-                b|=1<<(i&7);
-            }else if(hashValue[i]!=0)
-                throw new IllegalArgumentException("invalid hashValue,every element must be 0 or 1");
-            if(7==(i&7)||i==hashValue.length-1){
-                result[i>>3]=b;
-            }
-        }
-        return result;
-    }
-
-    /**
-     * 压缩格式的指纹解压缩
-     * @param compactValue
-     * @return
-     */
-    private static byte[] uncompact(byte[] compactValue){
-        byte[] result=new byte[compactValue.length<<3];
-        for(int i=0;i<result.length;++i){
-            if((compactValue[i>>3]&(1<<(i&7)))==0)
-                result[i]=0;
-            else
-                result[i]=1;
-        }
-        return result;
-    }
-    /**
-     * 字符串类型的指纹数据转为字节数组
-     * @param hashValue
-     * @return
-     */
-    private static byte[] toBytes(String hashValue){
-        hashValue=hashValue.replaceAll("\\s", "");
-        byte[] result=new byte[hashValue.length()];
-        for(int i=0;i<result.length;++i){
-            char c = hashValue.charAt(i);
-            if('0'==c)
-                result[i]=0;
-            else if('1'==c)
-                result[i]=1;
-            else
-                throw new IllegalArgumentException("invalid hashValue String");
-        }
-        return result;
-    }
-    /**
-     * 缩放图像到指定尺寸
-     * @param src
-     * @param width
-     * @param height
-     * @return
-     */
-    private static BufferedImage resize(Image src,int width,int height){
-        BufferedImage result = new BufferedImage(width, height,
-                BufferedImage.TYPE_3BYTE_BGR);
-        Graphics g = result.getGraphics();
-        try{
-            g.drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
-        }finally{
-            g.dispose();
-        }
-        return result;
-    }
-    /**
-     * 计算均值
-     * @param src
-     * @return
-     */
-    private static  int mean(byte[] src){
-        long sum=0;
-        // 将数组元素转为无符号整数
-        for(byte b:src)sum+=(long)b&0xff;
-        return (int) (Math.round((float)sum/src.length));
-    }
-    /**
-     * 二值化处理
-     * @param src
-     * @return
-     */
-    private static byte[] binaryzation(byte[]src){
-        byte[] dst = src.clone();
-        int mean=mean(src);
-        for(int i=0;i<dst.length;++i){
-            // 将数组元素转为无符号整数再比较
-            dst[i]=(byte) (((int)dst[i]&0xff)>=mean?1:0);
-        }
-        return dst;
-
-    }
-    /**
-     * 转灰度图像
-     * @param src
-     * @return
-     */
-    private static BufferedImage toGray(BufferedImage src){
-        if(src.getType()==BufferedImage.TYPE_BYTE_GRAY){
-            return src;
-        }else{
-            // 图像转灰
-            BufferedImage grayImage = new BufferedImage(src.getWidth(), src.getHeight(),
-                    BufferedImage.TYPE_BYTE_GRAY);
-            new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null).filter(src, grayImage);
-            return grayImage;
-        }
-    }
-
-    @Override
-    public String toString() {
-        return toString(true);
-    }
-    /**
-     * @param multiLine 是否分行
-     * @return
-     */
-    public String toString(boolean multiLine) {
-        StringBuffer buffer=new StringBuffer();
-        int count=0;
-        for(byte b:this.binaryzationMatrix){
-            buffer.append(0==b?'0':'1');
-            if(multiLine&&++count%HASH_SIZE==0)
-                buffer.append('\n');
-        }
-        return buffer.toString();
-    }
-    @Override
-    public boolean equals(Object obj) {
-        if(obj instanceof FingerPrint){
-            return Arrays.equals(this.binaryzationMatrix,((FingerPrint)obj).binaryzationMatrix);
-        }else
-            return super.equals(obj);
-    }
-
-    /**
-     * 与指定的压缩格式指纹比较相似度
-     * @param compactValue
-     * @return
-     * @see #compare(FingerPrint)
-     */
-    public float compareCompact(byte[] compactValue){
-        return compare(createFromCompact(compactValue));
-    }
-    /**
-     * @param hashValue
-     * @return
-     * @see #compare(FingerPrint)
-     */
-    public float compare(String hashValue){
-        return compare(new FingerPrint(hashValue));
-    }
-    /**
-     * 与指定的指纹比较相似度
-     * @param hashValue
-     * @return
-     * @see #compare(FingerPrint)
-     */
-    public float compare(byte[] hashValue){
-        return compare(new FingerPrint(hashValue));
-    }
-    /**
-     * 与指定图像比较相似度
-     * @param image2
-     * @return
-     * @see #compare(FingerPrint)
-     */
-    public float compare(BufferedImage image2){
-        return compare(new FingerPrint(image2));
-    }
-    /**
-     * 比较指纹相似度
-     * @param src
-     * @return
-     * @see #compare(byte[], byte[])
-     */
-    public float compare(FingerPrint src){
-        if(src.binaryzationMatrix.length!=this.binaryzationMatrix.length)
-            throw new IllegalArgumentException("length of hashValue is mismatch");
-        return compare(binaryzationMatrix,src.binaryzationMatrix);
-    }
-    /**
-     * 判断两个数组相似度,数组长度必须一致否则抛出异常
-     * @param f1
-     * @param f2
-     * @return 返回相似度(0.0~1.0)
-     */
-    private static float compare(byte[] f1,byte[] f2){
-        if(f1.length!=f2.length)
-            throw new IllegalArgumentException("mismatch FingerPrint length");
-        int sameCount=0;
-        for(int i=0;i<f1.length;++i){
-            if(f1[i]==f2[i])++sameCount;
-        }
-        return (float)sameCount/f1.length;
-    }
-    public static float compareCompact(byte[] f1,byte[] f2){
-        return compare(uncompact(f1),uncompact(f2));
-    }
-    public static float compare(BufferedImage image1,BufferedImage image2){
-        return new FingerPrint(image1).compare(new FingerPrint(image2));
-    }
-
-}
+//package cc.mrbird.febs.mall.test;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.color.ColorSpace;
+//import java.awt.image.BufferedImage;
+//import java.awt.image.ColorConvertOp;
+//import java.io.File;
+//import java.io.IOException;
+//import java.util.Arrays;
+//
+///**
+// * 图片是采用phash算法,一共分为四步吧.
+// *
+// * 1.将图片缩放到16*16大小,这是我们选择的合适的大小,假如宽高不一样,直接将其压到16*16,去掉细节,只保留宏观;
+// *
+// * 2.图片一共是16*16的,共256个像素,我们将图片进行灰度化,灰度化就是只有黑白灰三种,从白到黑,一共分了255层;
+// *
+// * 3.灰度化之后将图片进行DCT转换(离散余弦变化),因为为了识别有的图片旋转,这个DCT转换是将图片进行了一种压缩算法;
+// *
+// * 4.我们对这个算法进行了优化,因为之前是计算像素的均值,我们为了更准确,我们取RGB,rgb一共分为255个像素,我们将255个像素分为16段,如果像素大于0-16记为0,17到32记为1,直到255,这样就得到255位的二进制,这就是这张图片的指纹码.
+// *
+// * 得到唯一标识的指纹码之后怎么去计算像素度呢?
+// *
+// * 通过汉明距离比较两个二进制距离,如果距离小于<10的话,我们就判定两张图片相似.如果两个指纹码(二进制)一模一样,我们就判定两个是一张图片,或者类似;
+// */
+///**
+// * 视频相似度算法:
+// * 视频的话我们是通过ffmpeg(ff am pig),它是一个专门处理视频的框架,可以从视频中按针提取图片.然后就按照图片的相似度取对比了...
+// */
+//
+///**
+// * https://blog.csdn.net/weixin_34095889/article/details/91923072?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171652008316800182787012%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171652008316800182787012&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-91923072-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E6%8A%8A%E5%9B%BE%E7%89%87%E8%BD%AC%E6%8D%A2%E6%88%90%E9%BB%91%E7%99%BD%E7%81%B0%E5%83%8F%E7%B4%A0%E9%A3%8E%E6%A0%BC&spm=1018.2226.3001.4187
+// * 均值哈希实现图像指纹比较
+// */
+//public class FingerPrint {
+//
+//    public static void main(String[] args) {
+//        FingerPrint fp1 = null;
+//        FingerPrint fp2 = null;
+//        try {
+//            fp1 = new FingerPrint(ImageIO.read(new File("D:\\image\\F1.png")));
+//            fp2 = new FingerPrint(ImageIO.read(new File("D:\\image\\Z1.jpg")));
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        System.out.println(fp1.toString(false));
+//        System.out.println(fp2.toString(false));
+//        System.out.printf("sim=%f",fp1.compare(fp2));
+//    }
+//
+//    /**
+//     * 图像指纹的尺寸,将图像resize到指定的尺寸,来计算哈希数组
+//     */
+//    private static final int HASH_SIZE=16;
+//    /**
+//     * 保存图像指纹的二值化矩阵
+//     */
+//    private final byte[] binaryzationMatrix;
+//    public FingerPrint(byte[] hashValue) {
+//        if(hashValue.length!=HASH_SIZE*HASH_SIZE)
+//            throw new IllegalArgumentException(String.format("length of hashValue must be %d",HASH_SIZE*HASH_SIZE ));
+//        this.binaryzationMatrix=hashValue;
+//    }
+//    public FingerPrint(String hashValue) {
+//        this(toBytes(hashValue));
+//    }
+//    public FingerPrint (BufferedImage src){
+//        this(hashValue(src));
+//    }
+//    private static byte[] hashValue(BufferedImage src){
+//        BufferedImage hashImage = resize(src,HASH_SIZE,HASH_SIZE);
+//        byte[] matrixGray = (byte[]) toGray(hashImage).getData().getDataElements(0, 0, HASH_SIZE, HASH_SIZE, null);
+//        return  binaryzation(matrixGray);
+//    }
+//    /**
+//     * 从压缩格式指纹创建{@link FingerPrint}对象
+//     * @param compactValue
+//     * @return
+//     */
+//    public static FingerPrint createFromCompact(byte[] compactValue){
+//        return new FingerPrint(uncompact(compactValue));
+//    }
+//
+//    public static boolean validHashValue(byte[] hashValue){
+//        if(hashValue.length!=HASH_SIZE)
+//            return false;
+//        for(byte b:hashValue){
+//            if(0!=b&&1!=b)return false;
+//        }
+//        return true;
+//    }
+//    public static boolean validHashValue(String hashValue){
+//        if(hashValue.length()!=HASH_SIZE)
+//            return false;
+//        for(int i=0;i<hashValue.length();++i){
+//            if('0'!=hashValue.charAt(i)&&'1'!=hashValue.charAt(i))return false;
+//        }
+//        return true;
+//    }
+//    public byte[] compact(){
+//        return compact(binaryzationMatrix);
+//    }
+//
+//    /**
+//     * 指纹数据按位压缩
+//     * @param hashValue
+//     * @return
+//     */
+//    private static byte[] compact(byte[] hashValue){
+//        byte[] result=new byte[(hashValue.length+7)>>3];
+//        byte b=0;
+//        for(int i=0;i<hashValue.length;++i){
+//            if(0==(i&7)){
+//                b=0;
+//            }
+//            if(1==hashValue[i]){
+//                b|=1<<(i&7);
+//            }else if(hashValue[i]!=0)
+//                throw new IllegalArgumentException("invalid hashValue,every element must be 0 or 1");
+//            if(7==(i&7)||i==hashValue.length-1){
+//                result[i>>3]=b;
+//            }
+//        }
+//        return result;
+//    }
+//
+//    /**
+//     * 压缩格式的指纹解压缩
+//     * @param compactValue
+//     * @return
+//     */
+//    private static byte[] uncompact(byte[] compactValue){
+//        byte[] result=new byte[compactValue.length<<3];
+//        for(int i=0;i<result.length;++i){
+//            if((compactValue[i>>3]&(1<<(i&7)))==0)
+//                result[i]=0;
+//            else
+//                result[i]=1;
+//        }
+//        return result;
+//    }
+//    /**
+//     * 字符串类型的指纹数据转为字节数组
+//     * @param hashValue
+//     * @return
+//     */
+//    private static byte[] toBytes(String hashValue){
+//        hashValue=hashValue.replaceAll("\\s", "");
+//        byte[] result=new byte[hashValue.length()];
+//        for(int i=0;i<result.length;++i){
+//            char c = hashValue.charAt(i);
+//            if('0'==c)
+//                result[i]=0;
+//            else if('1'==c)
+//                result[i]=1;
+//            else
+//                throw new IllegalArgumentException("invalid hashValue String");
+//        }
+//        return result;
+//    }
+//    /**
+//     * 缩放图像到指定尺寸
+//     * @param src
+//     * @param width
+//     * @param height
+//     * @return
+//     */
+//    private static BufferedImage resize(Image src,int width,int height){
+//        BufferedImage result = new BufferedImage(width, height,
+//                BufferedImage.TYPE_3BYTE_BGR);
+//        Graphics g = result.getGraphics();
+//        try{
+//            g.drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
+//        }finally{
+//            g.dispose();
+//        }
+//        return result;
+//    }
+//    /**
+//     * 计算均值
+//     * @param src
+//     * @return
+//     */
+//    private static  int mean(byte[] src){
+//        long sum=0;
+//        // 将数组元素转为无符号整数
+//        for(byte b:src)sum+=(long)b&0xff;
+//        return (int) (Math.round((float)sum/src.length));
+//    }
+//    /**
+//     * 二值化处理
+//     * @param src
+//     * @return
+//     */
+//    private static byte[] binaryzation(byte[]src){
+//        byte[] dst = src.clone();
+//        int mean=mean(src);
+//        for(int i=0;i<dst.length;++i){
+//            // 将数组元素转为无符号整数再比较
+//            dst[i]=(byte) (((int)dst[i]&0xff)>=mean?1:0);
+//        }
+//        return dst;
+//
+//    }
+//    /**
+//     * 转灰度图像
+//     * @param src
+//     * @return
+//     */
+//    private static BufferedImage toGray(BufferedImage src){
+//        if(src.getType()==BufferedImage.TYPE_BYTE_GRAY){
+//            return src;
+//        }else{
+//            // 图像转灰
+//            BufferedImage grayImage = new BufferedImage(src.getWidth(), src.getHeight(),
+//                    BufferedImage.TYPE_BYTE_GRAY);
+//            new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null).filter(src, grayImage);
+//            return grayImage;
+//        }
+//    }
+//
+//    @Override
+//    public String toString() {
+//        return toString(true);
+//    }
+//    /**
+//     * @param multiLine 是否分行
+//     * @return
+//     */
+//    public String toString(boolean multiLine) {
+//        StringBuffer buffer=new StringBuffer();
+//        int count=0;
+//        for(byte b:this.binaryzationMatrix){
+//            buffer.append(0==b?'0':'1');
+//            if(multiLine&&++count%HASH_SIZE==0)
+//                buffer.append('\n');
+//        }
+//        return buffer.toString();
+//    }
+//    @Override
+//    public boolean equals(Object obj) {
+//        if(obj instanceof FingerPrint){
+//            return Arrays.equals(this.binaryzationMatrix,((FingerPrint)obj).binaryzationMatrix);
+//        }else
+//            return super.equals(obj);
+//    }
+//
+//    /**
+//     * 与指定的压缩格式指纹比较相似度
+//     * @param compactValue
+//     * @return
+//     * @see #compare(FingerPrint)
+//     */
+//    public float compareCompact(byte[] compactValue){
+//        return compare(createFromCompact(compactValue));
+//    }
+//    /**
+//     * @param hashValue
+//     * @return
+//     * @see #compare(FingerPrint)
+//     */
+//    public float compare(String hashValue){
+//        return compare(new FingerPrint(hashValue));
+//    }
+//    /**
+//     * 与指定的指纹比较相似度
+//     * @param hashValue
+//     * @return
+//     * @see #compare(FingerPrint)
+//     */
+//    public float compare(byte[] hashValue){
+//        return compare(new FingerPrint(hashValue));
+//    }
+//    /**
+//     * 与指定图像比较相似度
+//     * @param image2
+//     * @return
+//     * @see #compare(FingerPrint)
+//     */
+//    public float compare(BufferedImage image2){
+//        return compare(new FingerPrint(image2));
+//    }
+//    /**
+//     * 比较指纹相似度
+//     * @param src
+//     * @return
+//     * @see #compare(byte[], byte[])
+//     */
+//    public float compare(FingerPrint src){
+//        if(src.binaryzationMatrix.length!=this.binaryzationMatrix.length)
+//            throw new IllegalArgumentException("length of hashValue is mismatch");
+//        return compare(binaryzationMatrix,src.binaryzationMatrix);
+//    }
+//    /**
+//     * 判断两个数组相似度,数组长度必须一致否则抛出异常
+//     * @param f1
+//     * @param f2
+//     * @return 返回相似度(0.0~1.0)
+//     */
+//    private static float compare(byte[] f1,byte[] f2){
+//        if(f1.length!=f2.length)
+//            throw new IllegalArgumentException("mismatch FingerPrint length");
+//        int sameCount=0;
+//        for(int i=0;i<f1.length;++i){
+//            if(f1[i]==f2[i])++sameCount;
+//        }
+//        return (float)sameCount/f1.length;
+//    }
+//    public static float compareCompact(byte[] f1,byte[] f2){
+//        return compare(uncompact(f1),uncompact(f2));
+//    }
+//    public static float compare(BufferedImage image1,BufferedImage image2){
+//        return new FingerPrint(image1).compare(new FingerPrint(image2));
+//    }
+//
+//}
diff --git a/src/main/java/cc/mrbird/febs/mall/test/ImageToChar.java b/src/main/java/cc/mrbird/febs/mall/test/ImageToChar.java
index ea4d0a2..76354a9 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/ImageToChar.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/ImageToChar.java
@@ -1,156 +1,156 @@
-package cc.mrbird.febs.mall.test;
-
-import cn.hutool.core.util.ObjectUtil;
-import com.madgag.gif.fmsware.AnimatedGifEncoder;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * 基于Java的图片字符画(含动图)
- * https://blog.csdn.net/weixin_53070478/article/details/127183821?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-4-127183821-blog-125549681.235^v43^pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.3&utm_relevant_index=7
- */
-public class ImageToChar {
-
-    static char[] ss = " `.^,:~\"<!ct+{i7?u30pw4A8DX%#HWM".toCharArray();
-
-    /**
-     * 将输入的图片转换成灰度图片
-     * @param bi
-     * @return
-     */
-    public static BufferedWriter ImageToChar(BufferedImage bi,String target){        //定义灰度方法  返回值为BufferedImage对象
-        int width = bi.getWidth();
-        int height =bi.getHeight();
-        BufferedWriter bw = null;  //构建新的对象模型
-        try {
-            bw = new BufferedWriter(new FileWriter(target),360);
-
-            // 遍历图片的RGB值,把得到的灰度值存到bufferedImage_end中,然后返回bufferedImage_end
-            int autoAdd = 2;//自增
-            for (int j = 0; j < height; j += autoAdd) {
-                for (int i = 0; i < width; i += autoAdd) {
-                    int pixel = bi.getRGB(i, j);
-                    int[] rgb = new int[3];
-                    rgb[0] = pixel >> 16 & 0xff;
-                    rgb[1] = pixel >> 8 & 0xff;
-                    rgb[2] = pixel & 0xff;
-                    int Gray = (rgb[0] * 28 + rgb[1] * 151 + rgb[2] * 77) >> 8; //通过三原色值计算像素点的灰度
-                    int x = Gray * ss.length / 255 % ss.length;     //灰度值的百分比 计算出相应密度的字符表
-                    bw.write(ss[x]);    //输出该字符
-                    bw.write(ss[x]);
-                }
-                bw.newLine();
-            }
-            bw.flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return bw;
-    }
-
-    /**
-     * GIF转图片
-     * https://blog.csdn.net/adminstate/article/details/128917090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171653969716800197097670%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171653969716800197097670&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-128917090-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E5%9B%BE%E7%89%87%E8%BD%ACGif&spm=1018.2226.3001.4187
-     * @param args
-     */
-//    public static void main(String[] args) {
-//        Integer scaleSize = 360;
-//        GifDecoder gd = new GifDecoder();
-//        try{
-//            gd.read(Files.newInputStream(new File("D:\\image\\imageGif.gif").toPath()));
-//            for (int i = 0; i < gd.getFrameCount(); i++) {  //逐帧转换为图片。
-//                BufferedImage frame = gd.getFrame(i);
-//                float width = frame.getWidth(); // 像素
-//                float height = frame.getHeight(); // 像素
-//                float scale = width/scaleSize;
-//                BufferedImage buffImg = new BufferedImage(scaleSize, (int)(height/scale), BufferedImage.TYPE_INT_RGB);
-//                //使用TYPE_INT_RGB修改的图片会变色
-//                buffImg.getGraphics().drawImage(
-//                        frame.getScaledInstance(scaleSize, (int)(height/scale), Image.SCALE_SMOOTH), 0,
-//                        0, null);
+//package cc.mrbird.febs.mall.test;
 //
-//                ImageIO.write(buffImg, "jpg", new File("D:\\image\\gif\\"+i+".png"));
+//import cn.hutool.core.util.ObjectUtil;
+//import com.madgag.gif.fmsware.AnimatedGifEncoder;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.image.BufferedImage;
+//import java.io.BufferedWriter;
+//import java.io.File;
+//import java.io.FileWriter;
+//import java.io.IOException;
+//
+///**
+// * 基于Java的图片字符画(含动图)
+// * https://blog.csdn.net/weixin_53070478/article/details/127183821?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_utm_term~default-4-127183821-blog-125549681.235^v43^pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.3&utm_relevant_index=7
+// */
+//public class ImageToChar {
+//
+//    static char[] ss = " `.^,:~\"<!ct+{i7?u30pw4A8DX%#HWM".toCharArray();
+//
+//    /**
+//     * 将输入的图片转换成灰度图片
+//     * @param bi
+//     * @return
+//     */
+//    public static BufferedWriter ImageToChar(BufferedImage bi,String target){        //定义灰度方法  返回值为BufferedImage对象
+//        int width = bi.getWidth();
+//        int height =bi.getHeight();
+//        BufferedWriter bw = null;  //构建新的对象模型
+//        try {
+//            bw = new BufferedWriter(new FileWriter(target),360);
+//
+//            // 遍历图片的RGB值,把得到的灰度值存到bufferedImage_end中,然后返回bufferedImage_end
+//            int autoAdd = 2;//自增
+//            for (int j = 0; j < height; j += autoAdd) {
+//                for (int i = 0; i < width; i += autoAdd) {
+//                    int pixel = bi.getRGB(i, j);
+//                    int[] rgb = new int[3];
+//                    rgb[0] = pixel >> 16 & 0xff;
+//                    rgb[1] = pixel >> 8 & 0xff;
+//                    rgb[2] = pixel & 0xff;
+//                    int Gray = (rgb[0] * 28 + rgb[1] * 151 + rgb[2] * 77) >> 8; //通过三原色值计算像素点的灰度
+//                    int x = Gray * ss.length / 255 % ss.length;     //灰度值的百分比 计算出相应密度的字符表
+//                    bw.write(ss[x]);    //输出该字符
+//                    bw.write(ss[x]);
+//                }
+//                bw.newLine();
 //            }
-//        }catch(IOException e){
-//            System.out.println(e);
+//            bw.flush();
+//        } catch (IOException e) {
+//            e.printStackTrace();
 //        }
+//        return bw;
 //    }
-
-
-    /**
-     * 图片转GIF
-     * https://blog.csdn.net/adminstate/article/details/128917090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171653969716800197097670%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171653969716800197097670&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-128917090-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E5%9B%BE%E7%89%87%E8%BD%ACGif&spm=1018.2226.3001.4187
-     * @param args
-     */
-    public static void main(String[] args) {
-        // 存放jpg文件目录
-        String inpath = "D:\\image\\gif\\";
-
-        //生成GIF
-        AnimatedGifEncoder animatedGifEncoder = new AnimatedGifEncoder();
-        animatedGifEncoder.setRepeat(0);
-        animatedGifEncoder.start("D:\\image\\gif\\screenshot.gif");
-
-        try{
-            //获取目录下所有jpg及其他非gif图片文件
-            String[] pic = new File(inpath).list();
-            BufferedImage[] src = new BufferedImage[pic.length];
-
-            for (int i = 0; i <= src.length; i++) {
-                String pngPath = inpath + i + ".png";
-                if(new File(pngPath).exists()){
-                    animatedGifEncoder.setDelay(100); //设置播放间隔
-                    src[i] = ImageIO.read(new File(pngPath)); // 读入需要播放的jpg文件
-                    animatedGifEncoder.addFrame(src[i]);  //添加到帧中
-                }
-            }
-            animatedGifEncoder.finish();
-        }catch(IOException e){
-            System.err.println("合成gif图失败");
-        }
-    }
-
-    /**
-     * 将GIF图片转换成字符串
-     * @param args
-     */
-//    public static void main(String[] args) {
-//        GifDecoder gd = new GifDecoder();
-//        try{
 //
-//            gd.read(Files.newInputStream(new File("D:\\image\\gif\\screenshot.gif").toPath()));
-//            System.out.println(gd.getFrameCount());
-//            for (int i = 0; i < gd.getFrameCount(); i++) {  //逐帧转换为字符集。
-//                System.out.println(gd.getFrameCount());
-//                BufferedImage frame = gd.getFrame(i);
-//                ImageToChar(frame,"D:\\image\\ImageToChar.txt");    //参数提供缓冲图片对象,以及目标文本输出地址。
-//                try {
-//                    Thread.sleep(500);
-//                } catch (InterruptedException e) {
-//                    e.printStackTrace();
+//    /**
+//     * GIF转图片
+//     * https://blog.csdn.net/adminstate/article/details/128917090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171653969716800197097670%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171653969716800197097670&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-128917090-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E5%9B%BE%E7%89%87%E8%BD%ACGif&spm=1018.2226.3001.4187
+//     * @param args
+//     */
+////    public static void main(String[] args) {
+////        Integer scaleSize = 360;
+////        GifDecoder gd = new GifDecoder();
+////        try{
+////            gd.read(Files.newInputStream(new File("D:\\image\\imageGif.gif").toPath()));
+////            for (int i = 0; i < gd.getFrameCount(); i++) {  //逐帧转换为图片。
+////                BufferedImage frame = gd.getFrame(i);
+////                float width = frame.getWidth(); // 像素
+////                float height = frame.getHeight(); // 像素
+////                float scale = width/scaleSize;
+////                BufferedImage buffImg = new BufferedImage(scaleSize, (int)(height/scale), BufferedImage.TYPE_INT_RGB);
+////                //使用TYPE_INT_RGB修改的图片会变色
+////                buffImg.getGraphics().drawImage(
+////                        frame.getScaledInstance(scaleSize, (int)(height/scale), Image.SCALE_SMOOTH), 0,
+////                        0, null);
+////
+////                ImageIO.write(buffImg, "jpg", new File("D:\\image\\gif\\"+i+".png"));
+////            }
+////        }catch(IOException e){
+////            System.out.println(e);
+////        }
+////    }
+//
+//
+//    /**
+//     * 图片转GIF
+//     * https://blog.csdn.net/adminstate/article/details/128917090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171653969716800197097670%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171653969716800197097670&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-128917090-null-null.142^v100^pc_search_result_base8&utm_term=java%20%E5%9B%BE%E7%89%87%E8%BD%ACGif&spm=1018.2226.3001.4187
+//     * @param args
+//     */
+//    public static void main(String[] args) {
+//        // 存放jpg文件目录
+//        String inpath = "D:\\image\\gif\\";
+//
+//        //生成GIF
+//        AnimatedGifEncoder animatedGifEncoder = new AnimatedGifEncoder();
+//        animatedGifEncoder.setRepeat(0);
+//        animatedGifEncoder.start("D:\\image\\gif\\screenshot.gif");
+//
+//        try{
+//            //获取目录下所有jpg及其他非gif图片文件
+//            String[] pic = new File(inpath).list();
+//            BufferedImage[] src = new BufferedImage[pic.length];
+//
+//            for (int i = 0; i <= src.length; i++) {
+//                String pngPath = inpath + i + ".png";
+//                if(new File(pngPath).exists()){
+//                    animatedGifEncoder.setDelay(100); //设置播放间隔
+//                    src[i] = ImageIO.read(new File(pngPath)); // 读入需要播放的jpg文件
+//                    animatedGifEncoder.addFrame(src[i]);  //添加到帧中
 //                }
 //            }
+//            animatedGifEncoder.finish();
 //        }catch(IOException e){
-//            System.out.println(e);
+//            System.err.println("合成gif图失败");
 //        }
 //    }
-
-    /**
-     * 将图片转换成字符串
-     * @param args
-     */
-//    public static void main(String[] args) {
-//        try{
-//            ImageToChar(
-//                    ImageIO.read(new File("D:\\image\\outDpi.png")),
-//                    "D:\\image\\ImageToChar.txt");
-//        }catch(IOException e){
-//            System.out.println(e);
-//        }
-//    }
-}
+//
+//    /**
+//     * 将GIF图片转换成字符串
+//     * @param args
+//     */
+////    public static void main(String[] args) {
+////        GifDecoder gd = new GifDecoder();
+////        try{
+////
+////            gd.read(Files.newInputStream(new File("D:\\image\\gif\\screenshot.gif").toPath()));
+////            System.out.println(gd.getFrameCount());
+////            for (int i = 0; i < gd.getFrameCount(); i++) {  //逐帧转换为字符集。
+////                System.out.println(gd.getFrameCount());
+////                BufferedImage frame = gd.getFrame(i);
+////                ImageToChar(frame,"D:\\image\\ImageToChar.txt");    //参数提供缓冲图片对象,以及目标文本输出地址。
+////                try {
+////                    Thread.sleep(500);
+////                } catch (InterruptedException e) {
+////                    e.printStackTrace();
+////                }
+////            }
+////        }catch(IOException e){
+////            System.out.println(e);
+////        }
+////    }
+//
+//    /**
+//     * 将图片转换成字符串
+//     * @param args
+//     */
+////    public static void main(String[] args) {
+////        try{
+////            ImageToChar(
+////                    ImageIO.read(new File("D:\\image\\outDpi.png")),
+////                    "D:\\image\\ImageToChar.txt");
+////        }catch(IOException e){
+////            System.out.println(e);
+////        }
+////    }
+//}
diff --git a/src/main/java/cc/mrbird/febs/mall/test/PixelateImage.java b/src/main/java/cc/mrbird/febs/mall/test/PixelateImage.java
index a1d2709..150d765 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/PixelateImage.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/PixelateImage.java
@@ -1,95 +1,95 @@
-package cc.mrbird.febs.mall.test;
-
-import com.sun.image.codec.jpeg.JPEGCodec;
-import com.sun.image.codec.jpeg.JPEGEncodeParam;
-import com.sun.image.codec.jpeg.JPEGImageEncoder;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class PixelateImage {
-
-    public static void main(String[] args) {
-        handleDpi(new File("D:\\image\\inputDpi.png"),50,50);
-        getPixel("D:\\image\\input.png");
-        try {
-            resizeImage("D:\\image\\input.png","D:\\image\\output.png",360);//将图片压缩至100宽
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 功能:获取图片像素
-     * * @param filePath 图片路径
-     */
-    public static void getPixel(String filePath){
-        File file = new File(filePath);
-        BufferedImage bi = null;
-        try {
-            bi = ImageIO.read(file);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        int width = bi.getWidth(); // 像素
-        int height = bi.getHeight(); // 像素
-        System.out.println("width=" + width + ",height=" + height + ".");
-    }
-
-
-    /**
-     * @param inputPath  源图片路径
-     * @param outputPath  修改大小后图片路径
-     * @param scaleSize 图片的修改比例,目标宽度
-     */
-    public static void resizeImage(String inputPath, String outputPath,int scaleSize) throws IOException {
-
-        File srcFile = new File(inputPath);
-        Image srcImg = ImageIO.read(srcFile);
-        BufferedImage bi = null;
-        try {
-            bi = ImageIO.read(srcFile);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        float width = bi.getWidth(); // 像素
-        float height = bi.getHeight(); // 像素
-        float scale = width/scaleSize;
-        BufferedImage buffImg = null;
-        buffImg = new BufferedImage(scaleSize, (int)(height/scale), BufferedImage.TYPE_INT_RGB);
-        //使用TYPE_INT_RGB修改的图片会变色
-        buffImg.getGraphics().drawImage(
-                srcImg.getScaledInstance(scaleSize, (int)(height/scale), Image.SCALE_SMOOTH), 0,
-                0, null);
-
-        ImageIO.write(buffImg, "JPEG", new File(outputPath));
-    }
-
-    /**
-     * 改变图片DPI
-     *
-     * @param file
-     * @param xDensity
-     * @param yDensity
-     */
-    public static void handleDpi(File file, int xDensity, int yDensity) {
-        try {
-            BufferedImage image = ImageIO.read(file);
-            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));
-            JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
-            jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
-            jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
-            jpegEncodeParam.setQuality(0.1f, false);
-            jpegEncodeParam.setXDensity(xDensity);
-            jpegEncodeParam.setYDensity(yDensity);
-            jpegEncoder.encode(image, jpegEncodeParam);
-            image.flush();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-}
+//package cc.mrbird.febs.mall.test;
+//
+//import com.sun.image.codec.jpeg.JPEGCodec;
+//import com.sun.image.codec.jpeg.JPEGEncodeParam;
+//import com.sun.image.codec.jpeg.JPEGImageEncoder;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.image.BufferedImage;
+//import java.io.File;
+//import java.io.FileOutputStream;
+//import java.io.IOException;
+//
+//public class PixelateImage {
+//
+//    public static void main(String[] args) {
+//        handleDpi(new File("D:\\image\\inputDpi.png"),50,50);
+//        getPixel("D:\\image\\input.png");
+//        try {
+//            resizeImage("D:\\image\\input.png","D:\\image\\output.png",360);//将图片压缩至100宽
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 功能:获取图片像素
+//     * * @param filePath 图片路径
+//     */
+//    public static void getPixel(String filePath){
+//        File file = new File(filePath);
+//        BufferedImage bi = null;
+//        try {
+//            bi = ImageIO.read(file);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        int width = bi.getWidth(); // 像素
+//        int height = bi.getHeight(); // 像素
+//        System.out.println("width=" + width + ",height=" + height + ".");
+//    }
+//
+//
+//    /**
+//     * @param inputPath  源图片路径
+//     * @param outputPath  修改大小后图片路径
+//     * @param scaleSize 图片的修改比例,目标宽度
+//     */
+//    public static void resizeImage(String inputPath, String outputPath,int scaleSize) throws IOException {
+//
+//        File srcFile = new File(inputPath);
+//        Image srcImg = ImageIO.read(srcFile);
+//        BufferedImage bi = null;
+//        try {
+//            bi = ImageIO.read(srcFile);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        float width = bi.getWidth(); // 像素
+//        float height = bi.getHeight(); // 像素
+//        float scale = width/scaleSize;
+//        BufferedImage buffImg = null;
+//        buffImg = new BufferedImage(scaleSize, (int)(height/scale), BufferedImage.TYPE_INT_RGB);
+//        //使用TYPE_INT_RGB修改的图片会变色
+//        buffImg.getGraphics().drawImage(
+//                srcImg.getScaledInstance(scaleSize, (int)(height/scale), Image.SCALE_SMOOTH), 0,
+//                0, null);
+//
+//        ImageIO.write(buffImg, "JPEG", new File(outputPath));
+//    }
+//
+//    /**
+//     * 改变图片DPI
+//     *
+//     * @param file
+//     * @param xDensity
+//     * @param yDensity
+//     */
+//    public static void handleDpi(File file, int xDensity, int yDensity) {
+//        try {
+//            BufferedImage image = ImageIO.read(file);
+//            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file));
+//            JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
+//            jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
+//            jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
+//            jpegEncodeParam.setQuality(0.1f, false);
+//            jpegEncodeParam.setXDensity(xDensity);
+//            jpegEncodeParam.setYDensity(yDensity);
+//            jpegEncoder.encode(image, jpegEncodeParam);
+//            image.flush();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//    }
+//}
diff --git a/src/main/java/cc/mrbird/febs/mall/test/getGray.java b/src/main/java/cc/mrbird/febs/mall/test/getGray.java
index 6b9815b..5de6809 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/getGray.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/getGray.java
@@ -1,51 +1,51 @@
-package cc.mrbird.febs.mall.test;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.awt.image.RenderedImage;
-import java.io.File;
-import java.io.IOException;
-
-public class getGray {
-
-    /**
-     * 将输入的图片转换成灰度图片
-     * @param bufferedImage_start
-     * @return
-     */
-    public static BufferedImage gray(BufferedImage bufferedImage_start){        //定义灰度方法  返回值为BufferedImage对象
-        int width = bufferedImage_start.getWidth();
-        int height =bufferedImage_start.getHeight();
-        BufferedImage bufferedImage_end = new BufferedImage(width,height, BufferedImage.TYPE_3BYTE_BGR );  //构建新的对象模型
-        // 遍历图片的RGB值,把得到的灰度值存到bufferedImage_end中,然后返回bufferedImage_end
-        for (int y = 0; y < height; y++) {
-            for (int x = 0; x < width; x++) {
-
-                int pixel = bufferedImage_start.getRGB(x, y);
-                int[] rgb = new int[3];    //分别表示红绿蓝RGB。
-                rgb[0] = pixel >> 16 & 0xff;
-                rgb[1] = pixel >> 8 & 0xff;
-                rgb[2] = pixel & 0xff;
-                int gray = (rgb[0] * 28 + rgb[1] * 151 + rgb[2] * 77) >> 8;
-
-//                Color color = new Color(bufferedImage_start.getRGB(x,y));//构建Color获取图片像素点
-//                int gray = (int)(color.getRed() * 0.2126 + color.getGreen() * 0.7152 + color.getBlue() * 0.0722);
-                Color color_end = new Color(gray,gray,gray);   //将设置的像素设置到bufferedImage_end
-                bufferedImage_end.setRGB(x,y,color_end.getRGB());
-            }
-        }
-        return bufferedImage_end;
-    }
-
-    public static void main(String[] args) {
-        try{
-            RenderedImage rendImage =gray(ImageIO.read(new File("D:\\image\\inputDpi.png")));
-            File file = new File("D:\\image\\outDpi.png");
-            ImageIO.write(rendImage, "png", file);
-        }catch(IOException e){
-            System.out.println(e);
-        }
-    }
-
-}
+//package cc.mrbird.febs.mall.test;
+//
+//import javax.imageio.ImageIO;
+//import java.awt.*;
+//import java.awt.image.BufferedImage;
+//import java.awt.image.RenderedImage;
+//import java.io.File;
+//import java.io.IOException;
+//
+//public class getGray {
+//
+//    /**
+//     * 将输入的图片转换成灰度图片
+//     * @param bufferedImage_start
+//     * @return
+//     */
+//    public static BufferedImage gray(BufferedImage bufferedImage_start){        //定义灰度方法  返回值为BufferedImage对象
+//        int width = bufferedImage_start.getWidth();
+//        int height =bufferedImage_start.getHeight();
+//        BufferedImage bufferedImage_end = new BufferedImage(width,height, BufferedImage.TYPE_3BYTE_BGR );  //构建新的对象模型
+//        // 遍历图片的RGB值,把得到的灰度值存到bufferedImage_end中,然后返回bufferedImage_end
+//        for (int y = 0; y < height; y++) {
+//            for (int x = 0; x < width; x++) {
+//
+//                int pixel = bufferedImage_start.getRGB(x, y);
+//                int[] rgb = new int[3];    //分别表示红绿蓝RGB。
+//                rgb[0] = pixel >> 16 & 0xff;
+//                rgb[1] = pixel >> 8 & 0xff;
+//                rgb[2] = pixel & 0xff;
+//                int gray = (rgb[0] * 28 + rgb[1] * 151 + rgb[2] * 77) >> 8;
+//
+////                Color color = new Color(bufferedImage_start.getRGB(x,y));//构建Color获取图片像素点
+////                int gray = (int)(color.getRed() * 0.2126 + color.getGreen() * 0.7152 + color.getBlue() * 0.0722);
+//                Color color_end = new Color(gray,gray,gray);   //将设置的像素设置到bufferedImage_end
+//                bufferedImage_end.setRGB(x,y,color_end.getRGB());
+//            }
+//        }
+//        return bufferedImage_end;
+//    }
+//
+//    public static void main(String[] args) {
+//        try{
+//            RenderedImage rendImage =gray(ImageIO.read(new File("D:\\image\\inputDpi.png")));
+//            File file = new File("D:\\image\\outDpi.png");
+//            ImageIO.write(rendImage, "png", file);
+//        }catch(IOException e){
+//            System.out.println(e);
+//        }
+//    }
+//
+//}
diff --git a/src/main/java/cc/mrbird/febs/mall/test/imageTest.java b/src/main/java/cc/mrbird/febs/mall/test/imageTest.java
index 6458e9c..821c5ef 100644
--- a/src/main/java/cc/mrbird/febs/mall/test/imageTest.java
+++ b/src/main/java/cc/mrbird/febs/mall/test/imageTest.java
@@ -1,100 +1,100 @@
-package cc.mrbird.febs.mall.test;
-
-import com.sun.image.codec.jpeg.JPEGCodec;
-import com.sun.image.codec.jpeg.JPEGEncodeParam;
-import com.sun.image.codec.jpeg.JPEGImageEncoder;
-
-import javax.imageio.ImageIO;
-import javax.swing.*;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.awt.image.ConvolveOp;
-import java.awt.image.Kernel;
-import java.awt.image.RenderedImage;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class imageTest {
-
-    public static void main(String[] args) throws IOException {
-
-//        File originalImage = new File("D:\\image\\out.png");
-//        try{
-//            RenderedImage rendImage =getGray.gray(ImageIO.read(new File("D:\\image\\input.png")));
-//            ImageIO.write(rendImage, "png", originalImage);
-//        }catch(IOException e){
-//            System.out.println(e);
-//        }
-
-
-
-        File originalImage = new File("D:\\image\\input.png");
-        System.out.println("源文件大小" + originalImage.length());
-        File resizedImg1 = new File("D:\\image\\out3.png");
-        resize(originalImage, resizedImg1, Integer.parseInt(Long.toString(originalImage.length())), 0.1f);
-        System.out.println("0.1转换后文件大小" + resizedImg1.length());
-
-    }
-//        ## 遍历文件夹下图片批量压缩
-//    public static void main(String[] args) throws IOException {
-//        File folder = new File("C:\\Users\\Win\\Desktop\\faceImages");//文件夹路径
-//        File[] listOfFiles = folder.listFiles();
-//        for (int i = 0; i < listOfFiles.length; i++) {
-//            if (listOfFiles[i].isFile()) {
-//                File originalImage = listOfFiles[i];
-//                System.out.println("源文件大小" + originalImage.length());
-//                String fileName = originalImage.getName();
-//                File resizedImg1 = new File("C:\\Users\\Win\\Desktop\\productImages\\" + fileName);
-//                resize(originalImage, resizedImg1, 64, 0.9f);
-//                System.out.println(fileName + "0.8转换后文件大小" + resizedImg1.length());
-//            } else if (listOfFiles[i].isDirectory()) {
-//                System.out.println("Directory " + listOfFiles[i].getName());
-//            }
-//        }
+//package cc.mrbird.febs.mall.test;
 //
+//import com.sun.image.codec.jpeg.JPEGCodec;
+//import com.sun.image.codec.jpeg.JPEGEncodeParam;
+//import com.sun.image.codec.jpeg.JPEGImageEncoder;
+//
+//import javax.imageio.ImageIO;
+//import javax.swing.*;
+//import java.awt.*;
+//import java.awt.image.BufferedImage;
+//import java.awt.image.ConvolveOp;
+//import java.awt.image.Kernel;
+//import java.awt.image.RenderedImage;
+//import java.io.File;
+//import java.io.FileOutputStream;
+//import java.io.IOException;
+//
+//public class imageTest {
+//
+//    public static void main(String[] args) throws IOException {
+//
+////        File originalImage = new File("D:\\image\\out.png");
+////        try{
+////            RenderedImage rendImage =getGray.gray(ImageIO.read(new File("D:\\image\\input.png")));
+////            ImageIO.write(rendImage, "png", originalImage);
+////        }catch(IOException e){
+////            System.out.println(e);
+////        }
+//
+//
+//
+//        File originalImage = new File("D:\\image\\input.png");
+//        System.out.println("源文件大小" + originalImage.length());
+//        File resizedImg1 = new File("D:\\image\\out3.png");
+//        resize(originalImage, resizedImg1, Integer.parseInt(Long.toString(originalImage.length())), 0.1f);
+//        System.out.println("0.1转换后文件大小" + resizedImg1.length());
 //
 //    }
-
-    /**
-     * 缩放图片(压缩图片质量,改变图片尺寸)
-     * 若原图宽度小于新宽度,则宽度不变!
-     * @param newWidth 新的宽度
-     * @param quality  图片质量参数 0.7f 相当于70%质量
-     */
-    public static void resize(File originalFile, File resizedFile, int newWidth, float quality) throws IOException {
-        if (quality > 1) {
-        }
-        ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
-        Image i = ii.getImage();
-        Image resizedImage = null;
-        int iWidth = i.getWidth(null);
-        int iHeight = i.getHeight(null);
-        if (iWidth < newWidth) {
-            newWidth = iWidth;
-        }
-        if (iWidth > iHeight) {
-            resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight) / iWidth, Image.SCALE_SMOOTH);
-        } else {
-            resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight, newWidth, Image.SCALE_SMOOTH);
-        }
-        Image temp = new ImageIcon(resizedImage).getImage();
-        BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB);
-        Graphics g = bufferedImage.createGraphics();
-        g.setColor(Color.white);
-        g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
-        g.drawImage(temp, 0, 0, null);
-        g.dispose();
-        float softenFactor = 0.05f;
-        float[] softenArray = {0, softenFactor, 0, softenFactor, 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0};
-        Kernel kernel = new Kernel(3, 3, softenArray);
-        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
-        bufferedImage = cOp.filter(bufferedImage, null);
-        FileOutputStream out = new FileOutputStream(resizedFile);
-        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
-        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
-        param.setQuality(quality, true);
-        encoder.setJPEGEncodeParam(param);
-        encoder.encode(bufferedImage);
-    }
-}
+////        ## 遍历文件夹下图片批量压缩
+////    public static void main(String[] args) throws IOException {
+////        File folder = new File("C:\\Users\\Win\\Desktop\\faceImages");//文件夹路径
+////        File[] listOfFiles = folder.listFiles();
+////        for (int i = 0; i < listOfFiles.length; i++) {
+////            if (listOfFiles[i].isFile()) {
+////                File originalImage = listOfFiles[i];
+////                System.out.println("源文件大小" + originalImage.length());
+////                String fileName = originalImage.getName();
+////                File resizedImg1 = new File("C:\\Users\\Win\\Desktop\\productImages\\" + fileName);
+////                resize(originalImage, resizedImg1, 64, 0.9f);
+////                System.out.println(fileName + "0.8转换后文件大小" + resizedImg1.length());
+////            } else if (listOfFiles[i].isDirectory()) {
+////                System.out.println("Directory " + listOfFiles[i].getName());
+////            }
+////        }
+////
+////
+////    }
+//
+//    /**
+//     * 缩放图片(压缩图片质量,改变图片尺寸)
+//     * 若原图宽度小于新宽度,则宽度不变!
+//     * @param newWidth 新的宽度
+//     * @param quality  图片质量参数 0.7f 相当于70%质量
+//     */
+//    public static void resize(File originalFile, File resizedFile, int newWidth, float quality) throws IOException {
+//        if (quality > 1) {
+//        }
+//        ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());
+//        Image i = ii.getImage();
+//        Image resizedImage = null;
+//        int iWidth = i.getWidth(null);
+//        int iHeight = i.getHeight(null);
+//        if (iWidth < newWidth) {
+//            newWidth = iWidth;
+//        }
+//        if (iWidth > iHeight) {
+//            resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight) / iWidth, Image.SCALE_SMOOTH);
+//        } else {
+//            resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight, newWidth, Image.SCALE_SMOOTH);
+//        }
+//        Image temp = new ImageIcon(resizedImage).getImage();
+//        BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null), temp.getHeight(null), BufferedImage.TYPE_INT_RGB);
+//        Graphics g = bufferedImage.createGraphics();
+//        g.setColor(Color.white);
+//        g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));
+//        g.drawImage(temp, 0, 0, null);
+//        g.dispose();
+//        float softenFactor = 0.05f;
+//        float[] softenArray = {0, softenFactor, 0, softenFactor, 1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0};
+//        Kernel kernel = new Kernel(3, 3, softenArray);
+//        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
+//        bufferedImage = cOp.filter(bufferedImage, null);
+//        FileOutputStream out = new FileOutputStream(resizedFile);
+//        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
+//        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);
+//        param.setQuality(quality, true);
+//        encoder.setJPEGEncodeParam(param);
+//        encoder.encode(bufferedImage);
+//    }
+//}

--
Gitblit v1.9.1