这篇文章给大家分享的是有关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; i<charImgs.length; i++) { File file = new File(Client.class.getClassLoader().getResource("").getFile()+"chargif/"+i+".jpg"); ImageIO.write(charImgs[i], "jpg", file); } } catch (IOException e) { e.printStackTrace(); } System.out.println("图片输出完成!"); } public void initBounds() { ImgToCharacter.readGiF(); ImgToCharacter.draw(); BufferedImage[] charImgs = ImgToCharacter.getCharImgs(); int max_width = 0; int max_height = 0; for (BufferedImage img : charImgs) { if(img.getWidth() > max_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); Iterator<ImageReader> iter = 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<size; m++) { for(int n=0; n<size; n++) { if(i+m < img.getWidth() && j+n < img.getHeight()) result += img.getRGB(i+m, j+n); } } return Math.abs(result) / (size*size); } }
感谢各位的阅读!关于“java怎么实现抖音代码舞源码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
分享名称:java怎么实现抖音代码舞源码
网站URL:https://www.cdcxhl.com/article42/jgpoec.html
成都网站建设公司_创新互联,为您提供企业建站、品牌网站建设、外贸网站建设、定制开发、品牌网站设计、网站设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联