PDF、视频格式缩略图获取(pdf2img)
PDF、视频格式缩略图获取(pdf2img)
获取pdf缩略图
导入依赖:
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.9</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.9</version>
</dependency>
代码:
/**
* 获取pdf缩略图
*
* @param path pdf绝对路径
* @return 方便minio上传的InputStream
*/
public static InputStream getPdfThumbnail(String path) {
File file = new File(path);
PDDocument doc = null;
InputStream in = null;
try {
doc = PDDocument.load(file);
PDFRenderer renderer = new PDFRenderer(doc);
//int pageCount = doc.getNumberOfPages(); 获取pdf总页数 全转图片就要个这
//renderImageWithDPI(pageIndex,dpi) pdf页码 Windows native DPI
BufferedImage image = renderer.renderImageWithDPI(0, 300);
//BufferedImage bb = resize(bi,220,156);调整大小 会压缩质量,分辨率
in = getInputStream(image);
} catch (IOException e) {
log.error("出错了:" + e.getMessage());
e.printStackTrace();
} finally {
try {
doc.close();
} catch (IOException e) {
log.error("流关闭异常:" + e.getMessage());
e.printStackTrace();
}
}
return in;
}
转流方法:
private static InputStream getInputStream(BufferedImage image) throws IOException {
InputStream in = null;
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
in = new ByteArrayInputStream(os.toByteArray());
return in;
}
获取视频格式缩略图
导入依赖:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.7</version>
</dependency>
代码:
/**
* 截取视频第六帧的图片
* 防止视频前5帧是黑屏
* @param filePath 视频路径
* @return InputStream
*/
public static InputStream videoImage(String filePath) {
InputStream in = null;
try {
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
ff.start();
//getLengthInFrames() 获取视频帧数量
int ffLength = ff.getLengthInFrames();
Frame f;
int i = 0;
while (i < ffLength) {
f = ff.grabImage();
//截取第6帧
if ((i > 5) && (f.image != null)) {
in = doExecuteFrame(f);
break;
}
i++;
}
ff.stop();
} catch (FFmpegFrameGrabber.Exception e) {
e.printStackTrace();
}
return in;
}
/**
* 截取缩略图
*
* @param f Frame
*/
private static InputStream doExecuteFrame(Frame f) {
InputStream in = null;
if (null == f || null == f.image) {
return in;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bi = converter.getBufferedImage(f);
try {
in = getInputStream(bi);
} catch (IOException e) {
e.printStackTrace();
}
return in;
}
PDF、视频格式缩略图获取(pdf2img)的更多相关文章
- 我的Android进阶之旅------>使用ThumbnailUtils类获取视频的缩略图
今天看了一段代码,是关于获取视频的缩略图的,让我认识了一个ThumbnailUtils类,代码如下. Bitmap bitmap = ThumbnailUtils.createVideoThumbna ...
- Android 获取SDCard上图片和视频的缩略图
获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...
- ViedoUtil获取视频的缩略图
package com.jcf.utilsdemo; import android.graphics.Bitmap; import android.media.ThumbnailUtils; publ ...
- Java将视频转为缩略图--ffmpeg
Java生成视频缩略图 对于上传视频生成缩略图使用的是ffmpeg进行生成的. 自己在网上找了如何进行编译ffmpeg的方法 但是感觉太复杂了 就到csdn上找到了编译好的ffmpeg文件 体会到ff ...
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...
- C#使用FFmpeg 将视频格式转换成MP4示例
一.常用视频格式分辨率 640x480p 720p格式,分辨率为1280×720p / 60Hz,行频为45kHz 1080p格式,分辨率为1920×1080逐行扫描,专业格式 二.FFmpeg部分参 ...
- Flv视频格式如何转换成MP4格式
如何将flv视频格式转换成MP4格式呢?随着现在视频格式的不断多样化,视频格式转换的问题也成了现在生活中常见的问题,那么我们应该怎样将flv视频格式转换成MP4格式呢?下面我们就一起来看一下吧. 操作 ...
- 爬虫技巧-西瓜视频MP4地址获取
记录一下西瓜视频MP4地址的获取步骤 目标: 指定西瓜视频地址,如 https://www.ixigua.com/a6562763969642103303/#mid=6602323830,获取其视频M ...
- Atitit.多媒体区----web视频格式的选择总结
Atitit.多媒体区----web视频格式的选择总结 1. 因为现阶段不同的浏览器支持的视频格式是不同的 1 2. 各浏览器Html5 Video支持的影音格式: 2 3. 解决方案是什么?Flas ...
- Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能
目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...
随机推荐
- 解决CDH 访问权限问题
CDH 6.2 安装好以后,直接使用root 或者 其他账号执行spark-shell 会报权限错误 22/01/04 17:46:28 ERROR spark.SparkContext: Error ...
- 新一代网络请求库:python-httpx库
目录 httpx库 一. 概述 1. 简介 2. 命令行模式 3. 快速开始 3.1 get请求 3.2 post请求 3.2.1 表单 3.2.2 文件 3.2.3 JSON 3.2.4 二进制 3 ...
- sklearn中MLPClassifier源码解析
神经网络 .fit() 首先传入类私用方法._fit() 确定hidden_layer_size是可迭代的 调用_validate_hyperparameters验证超参数是否合法 验证输入的x和y是 ...
- spring native 初体验实现 小米控制美的空调
目前关于 spring native 分享的文章还比较少 写这篇文章的主要目前是分享一下自己写的一个 小米控制美的空调 的程序 集成 spring native 过程中碰到的一些问题和解决方法 先放地 ...
- 三门问题模拟对比试验——附VB6和Python3源程序及EXE文件
三门问题模拟对比试验 [直接跳转到文件下载] 前言 "三门问题"是一个很有意思的概率论问题,涉及贝叶斯公式,是人工智能领域的一个经典问题. 为了直观地研究这个问题,也为了测试一下P ...
- OKR之剑(理念篇)01—— OKR带给我们的改变
作者:vivo互联网平台产品研发团队 一.前言 OKR即目标与关键成果法,起源于英特尔,在谷歌发扬光大.近几年在国内比较火,很多企业都相继引入了OKR的管理方式,小到2-3人的小微初创公司,大到十几万 ...
- ProxySQL(12):禁止多路路由
文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9372447.html multiplexing multiplexing,作用是将语句分多路路由.开启了mu ...
- EFCore分表实现
实现原理 当我们new一个上下文DbContext 后, 每次执行CURD方式时 ,都会依次调用OnConfiguring(),OnModelCreating()两个方法. OnConfiguring ...
- js对象结构赋值const {XXX } =this
样例1: const { xxx } = this.state; 上面的写法是es6的写法,其实就相当于: const xxx = this.state.xxx 样例2: const {comment ...
- 打造企业自己代码规范IDEA插件(中)
一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...