本文实例为大家分享了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

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 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

for(int n=0; 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实现抖音代码舞源码相关推荐

  1. wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了 ...

  2. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

  3. 抖音很火的设备性能在线测试HTML源码

    正文: 抖音很火的设备性能在线测试HTML源码,电脑和手机CPU性能测试,滑动放大3D模型看看你的手机能不能跑满帧~ 程序: wwhgr.lanzoue.com/irITj0aq6t9g 图片:

  4. 抖音seo优化排名系统,seo系统源码部署,关键词搜索排名

    抖音seo优化排名系统,seo系统源码部署,关键词搜索排名 思路: 利用各种挖词工具去找关键词:工具会根据关键词的各种数据,帮助我们更好的选择有潜力的精准关键词,在互联网业内,是通过行业关键词霸屏,技 ...

  5. 抖音斜体字加粗昵称生成HTML源码

    正文: 抖音斜体字加粗昵称生成HTML源码,直接通过输入你想要的字符,然后点击转换,特殊字符就生成好了,就是一个实现抖音昵称斜体加粗字体这样一个功能. 程序: lanzou.com/iX5WH0500 ...

  6. java毕业设计——基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码)——堡垒游戏

    基于java+J2ME的堡垒游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的堡垒游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: 基于ja ...

  7. java毕业设计—— 基于java+JSP+SSH的任务调度系统设计与实现(毕业论文+程序源码)——任务调度系统

    基于java+JSP+SSH的任务调度系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+SSH的任务调度系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  8. java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计H5女娲宫旅游网站设计与实现源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技 ...

  9. java毕业设计—— 基于java+javaEE+jsp的项目管理系统设计与实现(毕业论文+程序源码)——项目管理系统

    基于java+javaEE+jsp的项目管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+javaEE+jsp的项目管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  10. 基于Java开发一套完整的区块链系统(附源码)

    来源:https://blog.csdn.net/victory_long 前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究, ...

最新文章

  1. 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
  2. jQuery最简单的留言功能^-^
  3. Java形参的改变不会影响实参
  4. 计算图层面积(针对于面要素)ArcObject c++
  5. http accept字段有用吗_http协议(六)报文首部
  6. springmvc自定义404错误处理
  7. 第一次作业 四班05
  8. poj1066--Treasure Hunt(规范相交)
  9. Linux嵌入式_详解从原理图到数据手册解析PWM蜂鸣器实现
  10. 2018华为笔试题2
  11. I210网卡LINUX的mac,intel(R)I211网卡刷I210简易教程
  12. mysql关于xsd数据集的论述
  13. 【超级简单但超级有用】让PDF书籍变身为可搜索文件
  14. 计算机连校园网没有弹出页面,我的电脑连接校园网 能连上,但是浏览器不弹出来 登录页面,为何...
  15. L1-012 计算指数 (5 分) C语言
  16. C# Winform 仿Win10-计算器
  17. 高精地图落地 | InstaGraM:实时端到端矢量化高精地图新SOTA!
  18. C语言编程答案保留三位小数,如何用c语言求倒数,保留3位有效数字
  19. Gym 102055L Ultra Weak Goldbach's Conjecture (素数密度+打表/哥德巴赫猜想)
  20. java读Excel转List对象

热门文章

  1. Tableau Desktop 2021中文免费版下载(包含其它历史版本)
  2. 北京林业大学matlab公选课,【抛砖引玉】一学期结束分享一下部分公选课和通识课经验...
  3. 【NLP】学不会打我 半小时学会基本操作 13 孪生网络
  4. Python 编写几个经典例子
  5. mybatis驼峰映射
  6. matlab 7 安装序列号,Matlab7序列号
  7. android开机动画修改实战(bootanimation)
  8. linux看定时任务命令,linux命令-定时任务at
  9. VC9、VC11、VC14、VC15库 最新下载链接
  10. 此计算机缺少vc2005_spl_with_atl_fix_redist解决问题