PDF、视频格式缩略图获取(pdf2img)

获取pdf缩略图

导入依赖:

  1. <dependency>
  2. <groupId>org.apache.pdfbox</groupId>
  3. <artifactId>pdfbox</artifactId>
  4. <version>2.0.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.pdfbox</groupId>
  8. <artifactId>pdfbox-tools</artifactId>
  9. <version>2.0.9</version>
  10. </dependency>

代码:

  1. /**
  2. * 获取pdf缩略图
  3. *
  4. * @param path pdf绝对路径
  5. * @return 方便minio上传的InputStream
  6. */
  7. public static InputStream getPdfThumbnail(String path) {
  8. File file = new File(path);
  9. PDDocument doc = null;
  10. InputStream in = null;
  11. try {
  12. doc = PDDocument.load(file);
  13. PDFRenderer renderer = new PDFRenderer(doc);
  14. //int pageCount = doc.getNumberOfPages(); 获取pdf总页数 全转图片就要个这
  15. //renderImageWithDPI(pageIndex,dpi) pdf页码 Windows native DPI
  16. BufferedImage image = renderer.renderImageWithDPI(0, 300);
  17. //BufferedImage bb = resize(bi,220,156);调整大小 会压缩质量,分辨率
  18. in = getInputStream(image);
  19. } catch (IOException e) {
  20. log.error("出错了:" + e.getMessage());
  21. e.printStackTrace();
  22. } finally {
  23. try {
  24. doc.close();
  25. } catch (IOException e) {
  26. log.error("流关闭异常:" + e.getMessage());
  27. e.printStackTrace();
  28. }
  29. }
  30. return in;
  31. }

转流方法:

  1. private static InputStream getInputStream(BufferedImage image) throws IOException {
  2. InputStream in = null;
  3. ByteArrayOutputStream os = new ByteArrayOutputStream();
  4. ImageIO.write(image, "png", os);
  5. in = new ByteArrayInputStream(os.toByteArray());
  6. return in;
  7. }

获取视频格式缩略图

导入依赖:

  1. <dependency>
  2. <groupId>org.bytedeco</groupId>
  3. <artifactId>javacv-platform</artifactId>
  4. <version>1.5.7</version>
  5. </dependency>

代码:

  1. /**
  2. * 截取视频第六帧的图片
  3. * 防止视频前5帧是黑屏
  4. * @param filePath 视频路径
  5. * @return InputStream
  6. */
  7. public static InputStream videoImage(String filePath) {
  8. InputStream in = null;
  9. try {
  10. FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
  11. ff.start();
  12. //getLengthInFrames() 获取视频帧数量
  13. int ffLength = ff.getLengthInFrames();
  14. Frame f;
  15. int i = 0;
  16. while (i < ffLength) {
  17. f = ff.grabImage();
  18. //截取第6帧
  19. if ((i > 5) && (f.image != null)) {
  20. in = doExecuteFrame(f);
  21. break;
  22. }
  23. i++;
  24. }
  25. ff.stop();
  26. } catch (FFmpegFrameGrabber.Exception e) {
  27. e.printStackTrace();
  28. }
  29. return in;
  30. }
  1. /**
  2. * 截取缩略图
  3. *
  4. * @param f Frame
  5. */
  6. private static InputStream doExecuteFrame(Frame f) {
  7. InputStream in = null;
  8. if (null == f || null == f.image) {
  9. return in;
  10. }
  11. Java2DFrameConverter converter = new Java2DFrameConverter();
  12. BufferedImage bi = converter.getBufferedImage(f);
  13. try {
  14. in = getInputStream(bi);
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. return in;
  19. }

PDF、视频格式缩略图获取(pdf2img)的更多相关文章

  1. 我的Android进阶之旅------>使用ThumbnailUtils类获取视频的缩略图

    今天看了一段代码,是关于获取视频的缩略图的,让我认识了一个ThumbnailUtils类,代码如下. Bitmap bitmap = ThumbnailUtils.createVideoThumbna ...

  2. Android 获取SDCard上图片和视频的缩略图

    获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...

  3. ViedoUtil获取视频的缩略图

    package com.jcf.utilsdemo; import android.graphics.Bitmap; import android.media.ThumbnailUtils; publ ...

  4. Java将视频转为缩略图--ffmpeg

    Java生成视频缩略图 对于上传视频生成缩略图使用的是ffmpeg进行生成的. 自己在网上找了如何进行编译ffmpeg的方法 但是感觉太复杂了 就到csdn上找到了编译好的ffmpeg文件 体会到ff ...

  5. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...

  6. C#使用FFmpeg 将视频格式转换成MP4示例

    一.常用视频格式分辨率 640x480p 720p格式,分辨率为1280×720p / 60Hz,行频为45kHz 1080p格式,分辨率为1920×1080逐行扫描,专业格式 二.FFmpeg部分参 ...

  7. Flv视频格式如何转换成MP4格式

    如何将flv视频格式转换成MP4格式呢?随着现在视频格式的不断多样化,视频格式转换的问题也成了现在生活中常见的问题,那么我们应该怎样将flv视频格式转换成MP4格式呢?下面我们就一起来看一下吧. 操作 ...

  8. 爬虫技巧-西瓜视频MP4地址获取

    记录一下西瓜视频MP4地址的获取步骤 目标: 指定西瓜视频地址,如 https://www.ixigua.com/a6562763969642103303/#mid=6602323830,获取其视频M ...

  9. Atitit.多媒体区----web视频格式的选择总结

    Atitit.多媒体区----web视频格式的选择总结 1. 因为现阶段不同的浏览器支持的视频格式是不同的 1 2. 各浏览器Html5 Video支持的影音格式: 2 3. 解决方案是什么?Flas ...

  10. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...

随机推荐

  1. 一步步搞懂MySQL元数据锁(MDL)

    某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令'delete from bigtable',但好长时间也没删完,经过咨询后,获知dr ...

  2. 【Java UI】HarmonyOS添加日历事件

    ​参考资料 CalendarDataHelper Events Reminders api讲解 添加权限 在config.json添加权限代码如下 "reqPermissions" ...

  3. 使用读写分离模式扩展 Grafana Loki

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500127&idx=1&sn=995987d558 ...

  4. 使用 Loki 搭建个人日志平台

    文章转载自:https://blog.kelu.org/tech/2020/01/31/grafana-loki-for-logging-aggregation.html 背景 Loki的第一个稳定版 ...

  5. sql limit函数

    select * from <表名> order by <列名> desc limit <第几位数>; select * from villa_info order ...

  6. 微信小程序开发优化

    一.开发优化一 1.使用Vant Weapp 1.1 什么是Vant Weapp Vant Weapp官网链接 Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应 ...

  7. 洛谷P2517 HAOI2010 订货 (费用流)

    标准的费用流问题,关键在于巧妙地建模 一共有n个月份,源点设为0,汇点设为n+1 1.源点向所有月份连边,容量为正无穷,费用为该月进货的费用 2.每个月向下一个月连边,容量为仓库容量,费用为存货费用 ...

  8. TCP与UDP的联系与区别

    TCP(Transmission Control Protocol,传输控制协议) 他是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接. 这说明TCP连接是一个非常复杂的过程,需 ...

  9. Windows docker环境安装

    前期准备 1.hyper-v功能 win10家庭版没有提供hyper-v的问题可通过如下脚本解决,保存为bat并运行重启电脑即可. pushd "%~dp0" dir /b %Sy ...

  10. 前端框架Vue------>第一天学习(3)

    文章目录 8 .使用Axios实现异步通信 9 .表单输入绑定 9.1 . 什么是双向数据绑定 9.2 .为什么要实现数据的双向绑定 9.3 .在表单中使用双向数据绑定 8 .使用Axios实现异步通 ...