看到一个python五毛钱特效

原文:https://blog.csdn.net/ZackSock/article/details/105558172

那不得java也来搞一搞对吧。

      

勉强五毛特效吧~~~~直接上源码吧

有个maven依赖 用于生成gif图片

<dependency><groupId>com.madgag</groupId><artifactId>animated-gif-lib</artifactId><version>1.2</version>
</dependency>
package com.joefan.video.video;import com.madgag.gif.fmsware.AnimatedGifEncoder;
import com.sun.imageio.plugins.gif.GIFImageReader;
import com.sun.imageio.plugins.gif.GIFImageReaderSpi;import javax.imageio.ImageIO;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.FileImageInputStream;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;public class Gif {public static void main (String[] args) {String src = "C:\\Users\\joefan\\Desktop\\pic\\src.gif" ;String tarFile = "C:\\Users\\joefan\\Desktop\\pic\\tar.gif";String bag = "C:\\Users\\joefan\\Desktop\\pic\\bag.jpg";handle(src, tarFile, bag);}/*** 将gif图片替换背景* @param src gif图片* @param target 替换背景后生成的文件命* @param bag 替换的背景图片*/public static boolean handle(String src, String target, String bag) {FileImageInputStream in;try {//原gif信息in = new FileImageInputStream(new File(src));ImageReaderSpi readerSpi = new GIFImageReaderSpi();GIFImageReader gifReader = (GIFImageReader) readerSpi.createReaderInstance();gifReader.setInput(in);//帧数int num = gifReader.getNumImages(true);if (num > 0) {// 新gif操作类 用于生成一个新的gifAnimatedGifEncoder encoder = new AnimatedGifEncoder();encoder.setRepeat(0);encoder.start(target);//新的帧图片数组BufferedImage[] frames = new BufferedImage[num];for (int i = 0; i < num; i++) {//读取原帧图片并去除背景 生成无背景透明图BufferedImage bufferedImage = convert(gifReader.read(i));//读取背景图片BufferedImage bagBufferedImage = ImageIO.read(new File(bag));//合并帧图 并转换为输入流BufferedImage bufferedImage1 = merge(bufferedImage, bagBufferedImage);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(bufferedImage1, "jpg", os);InputStream is = new ByteArrayInputStream(os.toByteArray());//写入gif帧encoder.setDelay(200); //设置播放的延迟时间frames[i] = ImageIO.read(is); // 读入需要播放的jpg文件encoder.addFrame(frames[i]);  //添加到帧中}encoder.finish();}}catch (Exception e){System.out.println(e.getMessage());}return false;}/*** 去除纯色背景图片* @param image image*/private static BufferedImage convert(BufferedImage image) {//将背景色变透明ImageIcon imageIcon = new ImageIcon(image);int w = imageIcon.getIconWidth();int h = imageIcon.getIconHeight();BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_4BYTE_ABGR);Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());int alpha;for (int i = bufferedImage.getMinX(); i < w; i++) {for (int j = bufferedImage.getMinY(); j < h; j++) {int rgb = bufferedImage.getRGB(i, j);//以背景色左上角最小像素做参考系int RGB = bufferedImage.getRGB(bufferedImage.getMinX(), bufferedImage.getMinY());int r = (rgb & 0xff0000) >> 16;int g = (rgb & 0xff00) >> 8;int b = (rgb & 0xff);int R = (RGB & 0xff0000) >> 16;int G = (RGB & 0xff00) >> 8;int B = (RGB & 0xff);//a为色差范围值,渐变色边缘处理,数值需要具体测试,50左右的效果比较可以int a = 45;if (Math.abs(R - r) < a && Math.abs(G - g) < a && Math.abs(B - b) < a) {alpha = 0;} else{alpha = 255;}rgb = (alpha << 24) | (rgb & 0x00ffffff);bufferedImage.setRGB(i, j, rgb);}}g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());return bufferedImage;}/*** 图片合并* @param source 原图* @param bag 背景图*/private static BufferedImage merge(BufferedImage source, BufferedImage bag) throws Exception {if (bag.getWidth() < source.getWidth() || bag.getHeight() < source.getHeight()) {throw new Exception("背景图片太小");}Graphics2D g;int startWidth = ( bag.getWidth() - source.getWidth() ) / 2;int startHeight= ( bag.getHeight() - source.getHeight() ) / 2;try {int w = source.getWidth();int h = source.getHeight();g = bag.createGraphics();g.drawImage(source, startWidth, startHeight, w, h, null);g.dispose();} catch (Exception e) {System.out.println(e.getMessage());}return bag;}}

java实现5毛钱特效相关推荐

  1. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)

    一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...

  2. 逻辑差学计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...

    原标题:数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有! 最近正是留学申请季,也是大三/高二党开始备战明年申请季.无论对于高中生.本科生.还是硕士生来说,上哪所学校和学什么专业成为了现阶段 ...

  3. 学数学但是不会计算机,数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有!...

    原标题:数学差的人不配学计算机?布朗大学教授告诉你一毛钱关系都没有! 最近正是留学申请季,也是大三/高二党开始备战明年申请季.无论对于高中生.本科生.还是硕士生来说,上哪所学校和学什么专业成为了现阶段 ...

  4. 最近领导给我升职了,压力和工作量都很大,但是工资1毛钱都没涨,你们怎么看?...

    黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Linux编程 点击右侧关注,免费入门到精通! 升职加薪是件令人开心的事情, 一方面表示了公司对你能力的认可, ...

  5. 京东员工因两年一毛钱没涨而离职,618后跳槽涨薪翻倍

    塞翁失马,焉知祸福.这是某名京东员工的感慨,其称自己职级T4,在京东两年一毛钱没涨,618后跳槽,涨薪翻倍高达60%,很开心的提了离职,毕竟谁会和钱过不去呢? 对此,有京东员工留言称:t4月薪20k左 ...

  6. pygame的字体画不出来_5毛钱的圆珠笔画的?每一幅都是大师之作,网友:为何我画不出来...

    5毛钱的圆珠笔画的?每一幅都是大师之作,网友:为何我画不出来 艺术家们总是在记录这个社会,他们通过各种各样的方式来表现出他们对这个社会的热爱,而这些方式中最常见的就是绘画了,在艺术家的画笔之下,定格了 ...

  7. 网购切莫小看1毛钱 暗藏信用卡诈骗玄机

    淘宝.京东.团购网吸引了大量网民,网购的火爆的同时也乐翻了那些职业网上骗子.在百度知道.淘宝网控诉购物被骗的帖子比比皆是.钓鱼欺诈网站 严重威胁网购安全,网民在线购物时,可使用金山卫士.金山网盾防骗. ...

  8. 怎么能学好Java开发,学好Java一般需要多少钱

    怎么能学好Java开发,学好Java一般需要多少钱?互联网时代,掌握一门潮流的编程语言就意味着高薪和广阔的就业前景,而Java是很多人的一致选择.不过用户需求的不断变化促使企业对Java开发人员的技能 ...

  9. 5毛钱搞一个2.4GHz射频信号探测器

    射频电子领域神秘而又朦胧,今天我们通过一个小小的射频检波电路来体验一下射频世界的魅力. 实验目的 制作一个 2.4 GHz 射频信号探测器,电路简单总成本不到 5 毛钱.该电路在靠近 2.4 GHz ...

最新文章

  1. 做了6年的Java,java视频教程传智播客
  2. 从零开始学python电子书-从零开始学Python程序设计 PDF
  3. Python编程语言学习:包导入和模块搜索路径简介、使用方法之详细攻略
  4. contains不区分大小写_趣读丨2020祝福语怎么发才不像是群发?全网独一份的模板安排上了!...
  5. Reginal2011_Chengdu_I Isabella's Message
  6. [转] Bookmarklet(书签工具)编写指南
  7. sigaction()函数
  8. [Unity] AnimationEvent 因 Animator Controller 中 Transition 设置问题而不触发的快速解决办法:重新拖入 Animator 创建新 State
  9. pcl中set程序_PCL中分割方法的介绍(3)
  10. Uber 和通用拟开源自动驾驶可视化软件
  11. [JSOI2008] 最小生成树计数
  12. android mvvm点击事件,c# – MVVMCross:如何将Xamarin.Android事件绑定到ViewModel命令
  13. google地图距离算法,如何计算谷歌地图中两点之间的距离?
  14. uniapp 自定义模板
  15. 计算机室内设计cad实践报告,室内设计师助理实习报告范文
  16. mysql优化——mycat数据库中间件
  17. “1万起投,年化达8%”?天安金交中心卖力“吆喝”的产品,是“香”还是“坑”?
  18. Keepalived常用配置及脚本
  19. java连接数据库 SQL server :无法打开登录所请求的数据库
  20. 你吸烟吗......

热门文章

  1. erlang实现A星算法
  2. C++ 将十进制数转换为二进制数方法
  3. 情绪低落时的吃穿住行
  4. vue-01-基本语法--指令
  5. Linux基础开发工具快速入门
  6. 地壳中元素含量排名记忆口诀_地球上的化学元素含量排名从多到少,是怎样排名的呢(不是地壳,也不是大气)?...
  7. 51单片重要外设系列
  8. 纵使你是个小公司UI,也需要出一篇出色的设计文档
  9. mybatis-plus中的Enum用法案例
  10. 云HIS : 电子病历模板制作过程技术经验分享