当前位置: 首页 > news >正文

国外游戏商城网站欣赏本钢建设公司官网

国外游戏商城网站欣赏,本钢建设公司官网,价格划算的网站开发,邯郸免费网络springboot#xff08;JavaCV #xff09;实现视频截取第N帧并保存图片 现在视频网站展示列表都是用img标签展示的#xff0c;动图用的是gif#xff0c;但是我们上传视频时并没有视屏封面#xff0c;就这需要上传到服务器时自动生成封面并保存 本博客使用jar包的方式实现…springbootJavaCV 实现视频截取第N帧并保存图片 现在视频网站展示列表都是用img标签展示的动图用的是gif但是我们上传视频时并没有视屏封面就这需要上传到服务器时自动生成封面并保存 本博客使用jar包的方式实现上传视频文件并且截取视频第一帧保存到阿里云的OSS也可以保存到本地获取其他任何地方。 JavaCV 是一款开源的视觉处理库基于GPLv2协议对各种常用计算机视觉库封装后的一组jar包 封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。 此方法的好处是不需要再服务器上安装插件直接代码中就可以实现视频截取。 我们需要截取视频第一帧主要用到了ffmpeg和opencv。 一 , 引入jar包 我用到的maven的目前最新javacv版本1.4.3它应该支持jdk1.7及以上我项目用的还是jdk1.8. 不过需要注意的是在使用的过程当中 , maven引入jar的时候 会引入所有平台的版本 全部引入大小在五百兆左右(不建议使用) !--视频截取第一帧--dependencygroupIdorg.bytedeco/groupIdartifactIdjavacv/artifactIdversion1.4.3/version/dependencydependencygroupIdorg.bytedeco.javacpp-presets/groupIdartifactIdffmpeg-platform/artifactIdversion4.0.2-1.4.3/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversionRELEASE/version/dependency二 , java 代码实现 public class ImgTools {//util调用application.propertiesprivate final static ResourceBundle RESOURCE_BUNDLE ResourceBundle.getBundle(application);private final static String aliyuVideonImg RESOURCE_BUNDLE.getString(aliyun.video.img);// public static void main(String[] args) throws Exception { // ImgTools imgTools new ImgTools(); // System.out.println(imgTools.randomGrabberFFmpegVideoImage // (视频地址可以是网络视频也可以是本地视频)); // }/*** 获取视频缩略图** param filePath视频路径* throws Exception*/public String randomGrabberFFmpegVideoImage(String filePath) throws Exception {String targetFilePath ;FFmpegFrameGrabber ff FFmpegFrameGrabber.createDefault(filePath);ff.start();//判断是否是竖屏小视频String rotate ff.getVideoMetadata(rotate);int ffLength ff.getLengthInFrames();Frame f;int i 0;int index 3;//截取图片第几帧while (i ffLength) {f ff.grabImage();if (i index) {if (null ! rotate rotate.length() 1) {targetFilePath doExecuteFrame(f, true); //获取缩略图} else {targetFilePath doExecuteFrame(f, false); //获取缩略图}break;}i;}ff.stop();return targetFilePath; //返回的是视频第N帧}/*** 截取缩略图存入阿里云OSS按自己的上传类型自定义转换文件格式** param f* return* throws Exception*/public String doExecuteFrame(Frame f, boolean bool) throws Exception {if (null f || null f.image) {return ;}Java2DFrameConverter converter new Java2DFrameConverter();BufferedImage bi converter.getBufferedImage(f);if (bool true) {Image image (Image) bi;bi rotate(image, 90);//图片旋转90度}ByteArrayOutputStream os new ByteArrayOutputStream();ImageIO.write(bi, png, os);byte[] sdf os.toByteArray();InputStream input new ByteArrayInputStream(os.toByteArray());MultipartFile multipartFile new MockMultipartFile(temp.jpg, temp.jpg, temp.jpg, input);Aliyunoss aliyunoss new Aliyunoss();//如需了解阿里云OSS请详读我的另一篇博客https://blog.csdn.net/weixin_44401989/article/details/105732856String url aliyunoss.uploadAli(multipartFile, aliyuVideonImg);return url;}/*** 图片旋转角度** param src 源图片* param angel 角度* return 目标图片*/public static BufferedImage rotate(Image src, int angel) {int src_width src.getWidth(null);int src_height src.getHeight(null);// calculate the new image sizeRectangle rect_des CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage res null;res new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 res.createGraphics();// transform(这里先平移、再旋转比较方便处理绘图时会采用这些变化绘图默认从画布的左上顶点开始绘画源图片的左上顶点与画布左上顶点对齐然后开始绘画修改坐标原点后绘画对应的画布起始点改变起到平移的效果然后旋转图片即可)//平移原理修改坐标系原点绘图起点变了起到了平移的效果如果作用于旋转则为旋转中心点g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);//旋转原理transalte(dx,dy)-rotate(radians)-transalte(-dx,-dy);修改坐标系原点后旋转90度然后再还原坐标系原点为(0,0),但是整个坐标系已经旋转了相应的度数 g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);// //先旋转以目标区域中心点为旋转中心点源图片左上顶点对准目标区域中心点然后旋转 // g2.translate(rect_des.width/2,rect_des.height/ 2); // g2.rotate(Math.toRadians(angel)); // //再平移原点恢复到源图的左上顶点处现在的右上顶点处否则只能画出1/4 // g2.translate(-src_width/2,-src_height/2);g2.drawImage(src, null, null);return res;}/*** 计算转换后目标矩形的宽高** param src 源矩形* param angel 角度* return 目标矩形*/private static Rectangle CalcRotatedSize(Rectangle src, int angel) {double cos Math.abs(Math.cos(Math.toRadians(angel)));double sin Math.abs(Math.sin(Math.toRadians(angel)));int des_width (int) (src.width * cos) (int) (src.height * sin);int des_height (int) (src.height * cos) (int) (src.width * sin);return new java.awt.Rectangle(new Dimension(des_width, des_height));} }public class ImgTools {//util调用application.propertiesprivate final static ResourceBundle RESOURCE_BUNDLE ResourceBundle.getBundle(application);private final static String aliyuVideonImg RESOURCE_BUNDLE.getString(aliyun.video.img);// public static void main(String[] args) throws Exception { // ImgTools imgTools new ImgTools(); // System.out.println(imgTools.randomGrabberFFmpegVideoImage // (视频地址可以是网络视频也可以是本地视频)); // }/*** 获取视频缩略图** param filePath视频路径* throws Exception*/public String randomGrabberFFmpegVideoImage(String filePath) throws Exception {String targetFilePath ;FFmpegFrameGrabber ff FFmpegFrameGrabber.createDefault(filePath);ff.start();//判断是否是竖屏小视频String rotate ff.getVideoMetadata(rotate);int ffLength ff.getLengthInFrames();Frame f;int i 0;int index 3;//截取图片第几帧while (i ffLength) {f ff.grabImage();if (i index) {if (null ! rotate rotate.length() 1) {targetFilePath doExecuteFrame(f, true); //获取缩略图} else {targetFilePath doExecuteFrame(f, false); //获取缩略图}break;}i;}ff.stop();return targetFilePath; //返回的是视频第N帧}/*** 截取缩略图存入阿里云OSS按自己的上传类型自定义转换文件格式** param f* return* throws Exception*/public String doExecuteFrame(Frame f, boolean bool) throws Exception {if (null f || null f.image) {return ;}Java2DFrameConverter converter new Java2DFrameConverter();BufferedImage bi converter.getBufferedImage(f);if (bool true) {Image image (Image) bi;bi rotate(image, 90);//图片旋转90度}ByteArrayOutputStream os new ByteArrayOutputStream();ImageIO.write(bi, png, os);byte[] sdf os.toByteArray();InputStream input new ByteArrayInputStream(os.toByteArray());MultipartFile multipartFile new MockMultipartFile(temp.jpg, temp.jpg, temp.jpg, input);Aliyunoss aliyunoss new Aliyunoss();//如需了解阿里云OSS请详读我的另一篇博客https://blog.csdn.net/weixin_44401989/article/details/105732856String url aliyunoss.uploadAli(multipartFile, aliyuVideonImg);return url;}/*** 图片旋转角度** param src 源图片* param angel 角度* return 目标图片*/public static BufferedImage rotate(Image src, int angel) {int src_width src.getWidth(null);int src_height src.getHeight(null);// calculate the new image sizeRectangle rect_des CalcRotatedSize(new Rectangle(new Dimension(src_width, src_height)), angel);BufferedImage res null;res new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 res.createGraphics();// transform(这里先平移、再旋转比较方便处理绘图时会采用这些变化绘图默认从画布的左上顶点开始绘画源图片的左上顶点与画布左上顶点对齐然后开始绘画修改坐标原点后绘画对应的画布起始点改变起到平移的效果然后旋转图片即可)//平移原理修改坐标系原点绘图起点变了起到了平移的效果如果作用于旋转则为旋转中心点g2.translate((rect_des.width - src_width) / 2, (rect_des.height - src_height) / 2);//旋转原理transalte(dx,dy)-rotate(radians)-transalte(-dx,-dy);修改坐标系原点后旋转90度然后再还原坐标系原点为(0,0),但是整个坐标系已经旋转了相应的度数 g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);// //先旋转以目标区域中心点为旋转中心点源图片左上顶点对准目标区域中心点然后旋转 // g2.translate(rect_des.width/2,rect_des.height/ 2); // g2.rotate(Math.toRadians(angel)); // //再平移原点恢复到源图的左上顶点处现在的右上顶点处否则只能画出1/4 // g2.translate(-src_width/2,-src_height/2);g2.drawImage(src, null, null);return res;}/*** 计算转换后目标矩形的宽高** param src 源矩形* param angel 角度* return 目标矩形*/private static Rectangle CalcRotatedSize(Rectangle src, int angel) {double cos Math.abs(Math.cos(Math.toRadians(angel)));double sin Math.abs(Math.sin(Math.toRadians(angel)));int des_width (int) (src.width * cos) (int) (src.height * sin);int des_height (int) (src.height * cos) (int) (src.width * sin);return new java.awt.Rectangle(new Dimension(des_width, des_height));} }
http://www.w-s-a.com/news/711183/

相关文章:

  • 建设网站什么语言比较合适柳州建设网经济适用房
  • 企业网站的主要功能板块平台推广是做什么的
  • 网页网站自做全搞定西安建设工程信息网诚信平台
  • 网站vip怎么做建网站外包公司
  • 胶州建网站域名不备案可以正常使用吗
  • 网站建设客户开发方案软件工程师行业分析
  • 沈阳网站建设黑酷科技微信小程序怎么一键删除
  • 做网站产品搜索展示实现西安百度推广服务公司
  • 建立网站接受投注是什么意思一般使用的分辨率的显示密度是多少
  • 怎么建立一个网站开展业务网站建设人员的工资分配
  • 求职网站建设方案企业网站开发需求分析
  • 西安企业网站开发可以做哪些有趣的网站
  • 房产类网站开发云南百度建站
  • 泰州网站建设电话彩票网站怎么做代理
  • 泉州网站制作推广山西网站开发建设
  • 百度商桥怎样绑定网站百度推广登陆
  • 重庆网站建设论坛株洲论坛
  • 网站怎么做切换中英文济南广运建设公司网站
  • 网页游戏网站搭建免费建网站哪个模板多
  • 公司起名打分最准的免费网站直播网站app开发
  • 医疗器械类网站前置审批网站临时域名
  • 金融网站策划方案网站开发表格整体页面居中
  • 句容本地网站黄石下陆区建设局网站
  • 免费网站服务陕西省咸阳市建设银行网站
  • 网站建设活动计划做网站意义
  • 莱芜新闻主持人名单seo sem 外贸建站 网站建设 文化墙设计
  • 易语言可以做网站嘛赣州网站建设开发
  • 网站建设规范布局网站建设费往什么科目
  • 乐清手机网站设计哪个汽车网站汽贸店免费做
  • 网站建设课程总结报告推广软文