java怎么实现抖音代码舞源码
这篇文章给大家分享的是有关java怎么实现抖音代码舞源码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,创新互联公司面向各种领域:围栏护栏等网站设计、成都营销网站建设解决方案、网站设计等建站排名服务。
具体内容如下
Client.java
package com.dance; import java.awt.Container; import java.awt.EventQueue; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; /** * //gif图片路径,推荐使用像素在400*400以内的 * //gif图片生成路径,这里没有整合AnimatedGifEncoder包 * //所以生成的是一些jpg图片,需要自己借助其他工具整个成gif * //如果有条件可以继续改进,直接生成一个gif文件 * @ClassName: Client * @Description: TODO(这里用一句话描述这个类的作用) * @author baitp * @date 2018年12月27日 * */ public class Client { public static String input = "2.gif"; public static String output = "D://charGif//"; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { MainFrame mainFrame = new MainFrame(); //创建并添加菜单栏 JMenuBar menuBar = new JMenuBar(); JMenu menuFile = new JMenu("GIF图片"); menuBar.add(menuFile); JMenuItem itemSave = new JMenuItem("上传"); // itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); menuFile.add(itemSave); mainFrame.setJMenuBar(menuBar); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); itemSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fd = new JFileChooser(); //fd.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fd.showOpenDialog(null); fd.setFileSelectionMode(0); File f = fd.getSelectedFile(); String url =Client.class.getClassLoader().getResource("").getFile()+"image/"+f.getName(); File outfile = new File(url); try { FileInputStream fi = new FileInputStream(f); FileOutputStream out =new FileOutputStream(outfile); //创建搬运工具 byte datas[] = new byte[1024*8]; //创建长度 int len = 0; //循环读取数据 while((len = fi.read(datas))!=-1){ out.write(datas,0,len); } Client.input=f.getName(); //3.释放资源 fi.close(); out.close(); } catch (Exception e1) { e1.printStackTrace(); } } }); } }); } } @SuppressWarnings("serial") class MainFrame extends JFrame { private int x; private int y; public static int WIDTH = 0; public static int HEIGHT = 0; { Toolkit kit = Toolkit.getDefaultToolkit(); int screen_width = kit.getScreenSize().width; int screen_height = kit.getScreenSize().height; x = (screen_width-WIDTH)/2; y = (screen_height-HEIGHT)/2; } public MainFrame() { setTitle("intlstar code dance 666"); initBounds(); createGIF(); setBounds(x, y, WIDTH, HEIGHT); setResizable(false); setIconImage(null); JPanel panel = new GamePanel(); Container container = getContentPane(); container.add(panel); } //将字符图片输出到指定目录 public void createGIF() { BufferedImage[] charImgs = ImgToCharacter.getCharImgs(); try { for (int i=0; imax_width) max_width = img.getWidth(); if(img.getHeight() > max_height) max_height = img.getHeight(); } WIDTH = max_width; HEIGHT = max_height; } }
GamePanel.java
package com.dance; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.swing.JPanel; @SuppressWarnings("serial") public class GamePanel extends JPanel{ private int fps = 6; private BufferedImage[] charImgs; int count = 0; private BufferedImage background = null; public GamePanel() { charImgs = ImgToCharacter.getCharImgs(); initBackgroudImg(); Thread t = new MyThread(); t.start(); } public void initBackgroudImg() { background = new BufferedImage(MainFrame.WIDTH, MainFrame.HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics gb = background.getGraphics(); gb.setColor(Color.white); gb.fillRect(0, 0, background.getWidth(), background.getHeight()); gb.dispose(); } @Override public void paint(Graphics g) { super.paint(g); int size = charImgs.length; int index = count % size; BufferedImage img = charImgs[index]; int w = img.getWidth(); int h = img.getHeight(); // int x = (MainFrame.WIDTH - w)/2; // int y = (MainFrame.HEIGHT - h)/2; //背景涂白 g.setColor(Color.white); g.fillRect(0, 0, MainFrame.WIDTH, MainFrame.HEIGHT); g.setColor(Color.black); // 3/4为显示比例,考虑到有的gif图片太大,所以缩小至一定比例在窗口中显示 g.drawImage(img, 0, MainFrame.HEIGHT - h,w*3/4, h*3/4, null); count++; } class MyThread extends Thread { long startTime; long endTime; long sleepTime; long spendTime; long period = 1000/fps; @Override public void run() { while(true) { startTime = System.currentTimeMillis(); repaint(); endTime = System.currentTimeMillis(); spendTime = endTime - startTime; sleepTime = period - spendTime; if(sleepTime < 0) sleepTime = 2; try { Thread.sleep(sleepTime); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
ImgToCharacter.java
package com.dance; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public class ImgToCharacter { private static BufferedImage[] realImgs; private static BufferedImage[] charImgs; private static int size = 4; private static String[] chars= {" ",".",":",";","-","~","1","i","o","r","a", "2","c","3","b","n","q","k","x","S","X", "7","Z","O","8","#","$","%","&","M","B", "W","@","@"}; public static void draw() { int interval = 16777215 / (chars.length-1) ; BufferedImage oneRealImg = null; int index = 0; while(index < realImgs.length) { oneRealImg = realImgs[index]; int width = oneRealImg.getWidth(); int height = oneRealImg.getHeight(); BufferedImage oneCharImg = new BufferedImage(width*3, height*3,BufferedImage.TYPE_INT_RGB); Graphics g = oneCharImg.getGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, oneCharImg.getWidth(), oneCharImg.getHeight()); g.setColor(Color.BLACK); g.setFont(new Font("黑体", Font.BOLD, 15)); for(int i= 0 ; i < height ; i+=size){ for(int j = 0 ; j < width; j+=size){ int rgb = getAvgRGB(j, i, oneRealImg); int k = rgb/interval; g.drawString(chars[k], 12*j/size, 12*i/size); } } g.dispose(); charImgs[index] = oneCharImg; index++; } } public static void readGiF() { try { System.out.println(ImgToCharacter.class.getClassLoader().getResource("").getFile()); File f = new File(ImgToCharacter.class.getClassLoader().getResource("").getFile()+"image/"+Client.input); String name = f.getName(); String suffix = name.substring(name.lastIndexOf('.')+1); Iteratoriter = ImageIO.getImageReadersBySuffix(suffix); ImageReader reader = iter.next(); ImageInputStream imageIn; imageIn = ImageIO.createImageInputStream(f); reader.setInput(imageIn); int count = reader.getNumImages(true); realImgs = new BufferedImage[count]; charImgs = new BufferedImage[count]; for(int i=0; i< count; i++) { realImgs[i] = reader.read(i); } } catch (IOException e) { e.printStackTrace(); } } public static BufferedImage[] getCharImgs() { return charImgs; } public static int getAvgRGB(int i, int j, BufferedImage img) { int result = 0; for(int m=0; m 感谢各位的阅读!关于“java怎么实现抖音代码舞源码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
本文标题:java怎么实现抖音代码舞源码
URL网址:http://pwwzsj.com/article/jgpoec.html