绝代码农 发表于 2021-8-17 12:04:24

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;
   //创建长度
   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, "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;
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;
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, 12*j/size, 12*i/size);
}
}
g.dispose();
charimgs = 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;
charimgs = new bufferedimage;
for(int i=0; i< count; i++) {
realimgs = 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);
}

}
完整源码下载地址:代码舞
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家。

文档来源:http://www.zzvips.com/article/180117.html
页: [1]
查看完整版本: java实现抖音代码舞源码