别人的博客文章中有动态显示这是怎么做到的呢?别人的微信发送的表情动态为什么是自己鬼畜视频?这些都是别人做到的,本文就是让自己也可以做到以上的事情,制作鬼畜GIF动态,辣就学起来吧!
GIF的发明者是美国计算机科学家、GIF图像格式发明人斯蒂芬•威尔海特(Stephen Wilhite)。
GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像。它实际上是一种压缩文档,采用LZW压缩算法进行编码,有效地减少了图像文件在网络上传输的时间。它是目前广泛应用于网络传输的图像格式之一。
以下介绍几种生成方式。
如何根据给定的多张图片来合成一张gif图片。这种需求又如何来实现呢?
com.madgag animated-gif-lib 1.4
cn.hutool hutool-all 5.0.6
代码:
public static void main(String[] args) throws Exception {BufferedImage image1 = ImageIO.read(new File("D:/gif/11.png"));BufferedImage image2 = ImageIO.read(new File("D:/gif/22.jpg"));BufferedImage image3 = ImageIO.read(new File("D:/gif/33.jpg"));BufferedImage image4 = ImageIO.read(new File("D:/gif/44.jpg"));AnimatedGifEncoder e = new AnimatedGifEncoder();//生成的图片路径e.start(new FileOutputStream("D:/gif.gif"));//图片宽高e.setSize(300, 190);//图片之间间隔时间e.setDelay(400);//重复次数 0表示无限重复 默认不重复e.setRepeat(0);//添加图片e.addFrame(image1);e.addFrame(image2);e.addFrame(image3);e.addFrame(image4);e.finish();}
效果如下:
自定义生成,直接使用系统创建的方式来生成gif,不使用外部的图片、视频等资源,直接在界面上绘制一个GIF图。
代码:
public static void main(String[] args) throws IOException {AnimatedGifEncoder encoder = new AnimatedGifEncoder();encoder.start("D:/gif.gif");encoder.setTransparent(Color.WHITE);encoder.setRepeat(0);encoder.setDelay(50);BufferedImage img = new BufferedImage(200, 180, BufferedImage.TYPE_3BYTE_BGR);Graphics2D g2d = img.createGraphics();for (int i = 0; i < 100; i++) {g2d.setColor(Color.WHITE);g2d.fillRect(0, 0, 200, 180);g2d.setColor(Color.BLUE);g2d.drawOval(0, i, 120, 120);encoder.addFrame(img);}g2d.dispose();encoder.finish();}
效果:
ws.schild是基于ffmpeg的java工具包,是目前主流的对视频和音频进行转码、裁剪以及提取操作的java工具包。
依赖:
ws.schild jave-core 3.1.1 ws.schild jave-nativebin-win64 3.1.1 ws.schild jave-nativebin-linux64 3.1.1
或
ws.schild jave-all-deps 3.0.1
代码:
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import ws.schild.jave.info.MultimediaInfo;
import ws.schild.jave.info.VideoInfo;
import ws.schild.jave.info.VideoSize;import java.io.File;
import java.util.Arrays;public class VideoToGIf {//输出格式private static final String outputFormat = "gif";/*** 获得转化后的文件名** @param sourceFilePath : 源视频文件路径* @return*/public static String getNewFileName(String sourceFilePath) {File source = new File(sourceFilePath);String fileName = source.getName().substring(0, source.getName().lastIndexOf("."));return fileName + "." + outputFormat;}/*** 转化音频格式** @param sourceFilePath : 源视频文件路径* @param targetFilePath : 目标gif文件路径* @return*/public static void transform(String sourceFilePath, String targetFilePath) {File source = new File(sourceFilePath);File target = new File(targetFilePath);try {//获得原视频的分辨率MultimediaObject mediaObject = new MultimediaObject(source);MultimediaInfo multimediaInfo = mediaObject.getInfo();VideoInfo videoInfo = multimediaInfo.getVideo();VideoSize sourceSize = videoInfo.getSize();//设置视频属性VideoAttributes video = new VideoAttributes();video.setCodec(outputFormat);//设置视频帧率 正常为10 ,值越大越流畅video.setFrameRate(10);//设置视频分辨率VideoSize targetSize = new VideoSize(sourceSize.getWidth() / 5, sourceSize.getHeight() / 5);video.setSize(targetSize);//设置转码属性EncodingAttributes attrs = new EncodingAttributes();attrs.setVideoAttributes(video);// 音频转换格式类Encoder encoder = new Encoder();encoder.encode(mediaObject, target, attrs);System.out.println("转换完成...");} catch (EncoderException e) {e.printStackTrace();}}/*** 批量转化视频格式** @param sourceFolderPath : 源视频文件夹路径* @param targetFolderPath : 目标gif文件夹路径* @return*/public static void batchTransform(String sourceFolderPath, String targetFolderPath) {File sourceFolder = new File(sourceFolderPath);if (sourceFolder.list().length != 0) {Arrays.asList(sourceFolder.list()).forEach(e -> {transform(sourceFolderPath + "\\" + e, targetFolderPath + "\\" + getNewFileName(e));});}}public static void main(String[] args) {batchTransform("D:\\video", "D:\\video");}
}
效果:
问题:
发送的gif动图变成文件形式怎么办?
解决:
文件太大和动图尺寸过大,超过了微信的尺寸范围,那么就会以文件的形式来发送你的gif动图。
所以当你的gif动图过大时,最好能裁剪一下尺寸或者是压缩一下大小,这样就能解决这个问题了。
本文介绍了三种生成GIF动图的方式,自定义、图片转GIF、视频转GIF。赶快实践一下吧
点赞 收藏 关注
吾辈读书,只有两事,一者进德之事,讲求乎诚正修齐之道,以图无忝所生,一者修业之事,操习乎记诵词章之术,以图自卫其身。