| | |
| | | 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); |
| | | //// } |
| | | //// } |
| | | //} |