时间:2021-05-19
本文实例为大家分享了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); }}完整源码下载地址:代码舞
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
抖音尬舞机目前只支持iOS版的,尬舞机打开的方法是: 1、用户打开抖音App后,点击位于屏幕底部的“+”模块后,就会在新打开的页卡中看到“尬舞机”功能。 2
抖音尬舞机目前只支持iOS版的,用户打开抖音App后,点击位于屏幕底部的+模块后,就会在新打开的页卡中看到尬舞机功能。之后点开尬舞机功能后,就会进入到一个新的页
本文实例为大家分享了抖音代码舞python制作代码,供大家参考,具体内容如下一、效果图二、转换代码fromimgimportImageascil_char=li
先上效果,视频敬上:字符舞:代码舞源代码:video_2_code_video.pyimportargparseimportosimportcv2imports
抖音50天内再次评级怎么办,抖音账号评级通知搬运,抖音账号评级广告过多,抖音被评级怎么能恢复?抖音账号评级通知搬运怎么办众所周知,抖音是可以实现变现的;但每个人