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 其他功能简述. 一. ...
随机推荐
- CMake | 将路径添加到 CMAKE_PREFIX_PATH
1. CMAKE_PREFIX_PATH CMAKE_PREFIX_PATH是一个分号分隔的路径列表,用来指明软件/库安装路径前缀,以供find_package(),find_program(),fi ...
- 《网页设计基础——HTML常用标签》
网页设计基础--HTML常用标签 一.网页框架: 格式: <html> <head> <title>网页标题</title> <sty ...
- 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。
[题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...
- 【译】CLR类型加载器设计
前言 本文翻译自BotR中的一篇,原文链接 Type Loader Design ,可以帮助我们了解CLR的类型加载机制(注意是Type类型,而不是Class类),文中涉及到术语或者容易混淆的地方,我 ...
- 【gRPC】C++异步服务端优化版,多服务接口样例
官方的C++异步服务端API样例可读性并不好,理解起来非常的费劲,各种状态机也并不明了,整个运行过程也容易读不懂,因此此处参考网上的博客进行了重写,以求顺利读懂. C++异步服务端实例,详细注释版 g ...
- Elasticsearch6.2服务器升配后的bug
.suofang img { max-width: 100% !important; height: auto !important } 本篇文章记录最近一次生产服务器硬件升级之后引起集群不稳定的现象 ...
- Traefik知识点
Traefik 的各种 Providers Traefik 中的配置发现是通过下面的一些 providers 来实现的. providers 是现有的一些基础架构组件,可以是编排工具,容器引擎,云提供 ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
- 我的 Kafka 旅程 - Consumer
kafka采用Consumer消费者Pull主动拉取数据的方式,当Broker无数据时,消费者空转.Kafka并不删除已消费的消息,各自独立的消费者可消费同一个Broker分区数据. 消费流程 1.消 ...
- [笔记] 二维FFT
假设现在有2个矩阵a和b,分别是n行m列和x行y列,现在你要计算它们的二维卷积,也就是求出矩阵s满足: \(s_{i,j}=\sum_{i'\leq i,j'\leq j}a_{i',j'}b_{i- ...