java对图片进行缩略和得到视频的缩略图

java提取视频缩略图或某一帧的图片 这篇文章主要介绍了使用java提取视频缩略图或某一帧的图片功能的实现,在开发中,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 文章目录1 :添加POM依赖:2 :VideoToImageUtil 工具类3 :案例实图 1 :添加POM依赖: 代码如下依赖(示例): <!--start:视频获取某一帧的图片--> <dependency> <groupId>org.bytedeco. 阅读详情

要求对大图和视频文件进行缩略 以方便列表 学习过后做了点小总结 


对图片进行缩略的话网上现成的代码很多

我这里只尝试了其中一种

直接贴代码了

public class PicHelper
{

	

	/**
	 * <p>Title: ImageUtil </p>
	 * <p>Description: </p>
	 * <p>Email: icerainsoft@hotmail.com </p> 
	 * @author Ares
	 * @date 2014年10月28日 上午10:24:26
	 */
	

	  
	    private static Logger log = LoggerFactory.getLogger(PicHelper.class);
	    
	    private static String DEFAULT_THUMB_PREVFIX = "thumb_";
	    private static String DEFAULT_CUT_PREVFIX = "cut_";
	    private static Boolean DEFAULT_FORCE = false;
	    
	    
	    /**
	     * <p>Title: cutImage</p>
	     * <p>Description:  根据原图与裁切size截取局部图片</p>
	     * @param srcImg    源图片
	     * @param output    图片输出流
	     * @param rect        需要截取部分的坐标和大小
	     */
	    public void cutImage(File srcImg, OutputStream output, java.awt.Rectangle rect){
	        if(srcImg.exists()){
	            java.io.FileInputStream fis = null;
	            ImageInputStream iis = null;
	            try {
	                fis = new FileInputStream(srcImg);
	                // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
	                String types = Arrays.toString(ImageIO.getReaderFormatNames()).replace("]", ",");
	                String suffix = null;
	                // 获取图片后缀
	                if(srcImg.getName().indexOf(".") > -1) {
	                    suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1);
	                }// 类型和图片后缀全部小写,然后判断后缀是否合法
	                if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()+",") < 0){
	                    log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);
	                    return ;
	                }
	                // 将FileInputStream 转换为ImageInputStream
	                iis = ImageIO.createImageInputStream(fis);
	                // 根据图片类型获取该种类型的ImageReader
	                ImageReader reader = ImageIO.getImageReadersBySuffix(suffix).next();
	                reader.setInput(iis,true);
	                ImageReadParam param = reader.getDefaultReadParam();
	                param.setSourceRegion(rect);
	                BufferedImage bi = reader.read(0, param);
	                ImageIO.write(bi, suffix, output);
	            } catch (FileNotFoundException e) {
	                e.printStackTrace();
	            } catch (IOException e) {
	                e.printStackTrace();
	            } finally {
	                try {
	                    if(fis != null) fis.close();
	                    if(iis != null) iis.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        }else {
	            log.warn("the src image is not exist.");
	        }
	    }
	    
	    public void cutImage(File srcImg, OutputStream output, int x, int y, int width, int height){
	        cutImage(srcImg, output, new java.awt.Rectangle(x, y, width, height));
	    }
	    
	    public void cutImage(File srcImg, String destImgPath, java.awt.Rectangle rect){
	        File destImg = new File(destImgPath);
	        if(destImg.exists()){
	            String p = destImg.getPath();
	            try {
	                if(!destImg.isDirectory()) p = destImg.getParent();
	                if(!p.endsWith(File.separator)) p = p + File.separator;
	                cutImage(srcImg, new java.io.FileOutputStream(p + DEFAULT_CUT_PREVFIX + "_" + new java.util.Date().getTime() + "_" + srcImg.getName()), rect);
	            } catch (FileNotFoundException e) {
	                log.warn("the dest image is not exist.");
	            }
	        }else log.warn("the dest image folder is not exist.");
	    }
	    
	    public void cutImage(File srcImg, String destImg, int x, int y, int width, int height){
	        cutImage(srcImg, destImg, new java.awt.Rectangle(x, y, width, height));
	    }
	    
	    public void cutImage(String srcImg, String destImg, int x, int y, int width, int height){
	        cutImage(new File(srcImg), destImg, new java.awt.Rectangle(x, y, width, height));
	    }
	    /**
	     * <p>Title: thumbnailImage</p>
	     * <p>Description: 根据图片路径生成缩略图 </p>
	     * @param imagePath    原图片路径
	     * @param w            缩略图宽
	     * @param h            缩略图高
	     * @param prevfix    生成缩略图的前缀
	     * @param force        是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图)
	     * return 缩略图的文件名
	     */
	    public static String thumbnailImage(File srcImg, FileOutputStream output, int w, int h, String prevfix, boolean force){
	        if(srcImg.exists()){
	            try {
	                // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
	                String types = Arrays.toString(ImageIO.getReaderFormatNames()).replace("]", ",");
	                String suffix = null;
	                // 获取图片后缀
	                if(srcImg.getName().indexOf(".") > -1) {
	                    suffix = srcImg.getName().substring(srcImg.getName().lastIndexOf(".") + 1);
	                }// 类型和图片后缀全部小写,然后判断后缀是否合法
	                if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()+",") < 0){
	                    log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);
	                    return null;
	                }
	                log.debug("target image's size, width:{}, height:{}.",w,h);
	                Image img = ImageIO.read(srcImg);
	                // 根据原图与要求的缩略图比例,找到最合适的缩略图比例
	                if(!force){
	                    int width = img.getWidth(null);
	                    int height = img.getHeight(null);
	                    if((width*1.0)/w < (height*1.0)/h){
	                        if(width > w){
	                            h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0)));
	                            log.debug("change image's height, width:{}, height:{}.",w,h);
	                        }
	                    } else {
	                        if(height > h){
	                            w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h/(height*1.0)));
	                            log.debug("change image's width, width:{}, height:{}.",w,h);
	                        }
	                    }
	                }
	                BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
	                Graphics g = bi.getGraphics();
	                g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null);
	                g.dispose();
	                // 将图片保存在原目录并加上前缀
	                ImageIO.write(bi, suffix, output);
	                output.close();
	               
	            } catch (IOException e) {
	               log.error("generate thumbnail image failed.",e);
	               return null;
	            }
	        }else{
	            log.warn("the src image is not exist.");
	        }
			return DEFAULT_THUMB_PREVFIX+srcImg.getName();
	    }
	    public static String thumbnailImage(File srcImg, String destination,int w, int h, String prevfix, boolean force){
	        String p = srcImg.getAbsolutePath();
	        try {
	            if(!srcImg.isDirectory()) p = srcImg.getParent();
	            if(!p.endsWith(File.separator)) p = p + File.separator;
	            return  thumbnailImage(srcImg, new java.io.FileOutputStream(destination + prevfix +srcImg.getName()), w, h, prevfix, force);
	        } catch (FileNotFoundException e) {
	            log.error("the dest image is not exist.",e);
	        }
			return null;
	    }
	    
	 
	    
	    public static String thumbnailImage(String imagePath,String destination, int w, int h, boolean force){
	    	  File srcImg = new File(imagePath);
	    	return thumbnailImage(srcImg,destination, w, h, DEFAULT_THUMB_PREVFIX, DEFAULT_FORCE);
	    }
	    
	    public static String thumbnailImage(String imagePath,String destination, int w, int h){
	    	File dfile = new File(destination);
	    	if(!dfile.exists()){
	    		dfile.mkdirs();
	    	}
	        return thumbnailImage(imagePath,destination+"/", w, h, DEFAULT_FORCE);
	    }
	    
	    public static void main(String[] args) {
	        System.out.println(new PicHelper().thumbnailImage("C:\\Users\\zhengzechao\\Desktop\\1.png", "d:",150, 100));
	        
	    //    new PicHelper().cutImage("imgs/Tulips.jpg","imgs", 250, 70, 300, 400);
	    }
	    
	    

	

}




对视频的转码的话比较复杂 也说不上复杂  只是作者本身走了点歪路 

使用了ffmpeg的支持

ffmpeg的官网下载地址如下

https://ffmpeg.zeranoe.com/builds/

建议下载对应自己系统的static压缩包 即可免编译使用 如果想深入学习的话 可以下载源代码

下载完以后压缩并在环境变量里Path下配置ffmpeg.exe的bin目录

cmd下输入ffmpeg -version显示了版本信息则说明安装成功 可以使用了 

使用代码很简单

下面只贴出作者自己的测试缩略图的代码

  public static void handler(String ffmpegPath,String upFilePath,String mediaPicPath){
		  List<String> cutpic = new ArrayList<String>();
			cutpic.add(ffmpegPath);
			cutpic.add("-i");
			cutpic.add(upFilePath); // 同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)
			cutpic.add("-y");
			cutpic.add("-f");
			cutpic.add("image2");
			cutpic.add("-ss"); // 添加参数"-ss",该参数指定截取的起始时间
			cutpic.add("0"); // 添加起始时间为第17秒
			cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间
			cutpic.add("0.001"); // 添加持续时间为1毫秒
			cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小
			cutpic.add("500*400"); // 添加截取的图片大小为350*240
			cutpic.add(mediaPicPath); // 添加截取的图片的保存路径

			boolean mark = true;
			ProcessBuilder builder = new ProcessBuilder();
			try {
			   
			    builder.command(cutpic);
			    builder.redirectErrorStream(true);
			    // 如果此属性为 true,则任何由通过此对象的 start() 方法启动的后续子进程生成的错误输出都将与标准输出合并,
			    //因此两者均可使用 Process.getInputStream() 方法读取。这使得关联错误消息和相应的输出变得更容易
			    builder.start();
			} catch (Exception e) {
			    mark = false;
			    System.out.println(e);
			    e.printStackTrace();
			}
	  }
	
		  
	   public static void main(String[] args){
		   handler("D:\\迅雷下载\\ffmpeg-20161104-b4e9252-win64-static\\bin\\ffmpeg.exe","D:\\迅雷下载\\黑马\\29 Linux系统挂载操作mount详细使用\\29 Linux系统挂载操作mount详细使用.wmv","d:\\uu.jpg");
	   }


当然ffmpeg的功能很强大 下面推荐几篇文章供大家可以深入参考

http://www.tuicool.com/articles/fMRRZvY  javaWeb使用ffmpeg对视频转码和截图

http://www.360doc.com/content/15/0212/10/834950_448080831.shtml  


听说javaCV也能做到对视频的截图 关于二者的性能比较 还请使用过的牛牛比较比较


JAVA获取视频缩略图 超简单 获取视频缩略图。 立即下载

相关推荐

java视频生成图片(缩略图)-实例-(指定时间)

java视频生成图片(缩略图)-实例-(指定时间)

java生成视频缩略图

java生成视频缩略图,最终实现方式如下

qq_41444892的博客 1463

使用Javacv截取视频缩略图

上传有大小限制,所以工程移除了lib,需要自己下载 javacv jar包下载地址:http://search.maven.org/remotecontent?filepath=org/bytedeco/javacv-platform/1.4.2/javacv-platform-1.4.2-bin.zip

【JAVA】生成视频缩略图并上传至Minio

(1)使用照片墙方式将图片上传到Minio。目的:节省空间、避免图片过多加载不出来。(3)将缩略图上传到Minio。(2)将上传的图片生成缩略图。(1)pom.xml引入依赖。

weixin_47375144的博客 1829

java生成视频缩略图所需要的jar包.zip

java生成视频缩略图所需要的jar包,这是本人亲自运行通过的所需要的jar包,但是没有在linux系统上测试过。

国内外主流嵌入式GUI汇总

随着MCU资源增多,处理能力也强了,同时市场需求也增多了GUI功能也越来越丰富了,很多的嵌入式图形库都可以做出绚丽的界面。

m0_69914734的博客 3289

Java 上传视屏并生成缩略图

首先下载ffmpeg解压下载位置:https://download.youkuaiyun.com/download/weixin_39041673/10333948建立一个bat文件startG:/ffmpeg/bin/ffmpeg.exe -i %1 -ss 20 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f image2 %2exitG:/ffmpe...

weixin_39041673的博客 1032

RDMA 出现背景、如何实现?如何测试连通性?

文章目录一、背景:1、传统的 网络通信:2、传统网络通信的问题:二、RDMA :1、出现背景:2、RDMA 简介:3、如何工作:4、RDMA 与 Infiniband 的关系:5、支持 RDMA 的其他协议:6、RDMA 的优势:7、通过 Infiniband 实现 RDMA :8、如何测试 RDMA 连通性:   一、背景: 1、传统的 网络通信:     &n...

郑泽林 2162

Java实现doc、ppt、pdf和视频的缩略图

最近用java对word三大办公软件和视频进行缩略图展示,用到了spire这个插件,比较简单我直接展示下代码,主要就是那个jar包得自己打包,我自己使用pom没法直接导入(即使指定了网址),所以我这边只展示代码了。项目部署在linux上,生成缩略图的时候部分字体就会显示不了,如下图。后来发现是linux缺少中文字体导致的,这里介绍下导入中文字体的方法。这个主要就是生成的缩略图的文件命名。4.video缩略图。

weixin_43487532的博客 3675

大疆sdkV4以及V5webrtc推流

webrtcSDK中要用它的VideoCapturer来初始化推流 ViewdoCapturer是一个接口我们继承它 然后重建创建文件CapturerAircraft.java文件。CameraUtil.java这个是我们用来创建CapturerAircraft的一个工具。除了CapturerAircraft这个文件不一样外其他都是一样的。PlayBodyBean.java这个是我们的配置文件。下面的有个代码块第一个是v4的 第二个是v5的。接着我们来创建几个推流用到的webrtc工具。

weixin_41624865的博客 1187

组态王|组态王通过选择日期实现历史数据的查询

②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。另外你用过哪些组态软件?

做有价值的事,积累有价值的笔记! 4557

JAVA生成视频缩略图的两种方式

最近工作中遇到一个需求:在视频上传的时候截取视频图片。就调研了两种方法,亲测有效~~~ 方式一:使用ffmpng工具 一、ffmpng工具的安装 1.官网http://www.ffmpeg.org/download.html下载windows版本 2.下载完成并解压后,设置环境变量 3.dos窗口输入ffmpeg -version 命令,测试是否成功; 以上就是ffmpng...

weixin_30460489的博客 1734

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 329

Java 图片、视频生成缩略图

在后台将图片、视频、生成缩略图 前言 对于视频上传在后台生成缩略图。 1 下载FFmpeg 1.1 参考地址:http://www.ffmpeg.org/download.html 1.2 下载此文件(.zip文件),进行解压;设定无汉字的目录(java中用的到) 1.3 在java中为此文件设定路径----(ffmpeg_path) 2 后台代码 public static boolean ...

qq_39711356的博客 2228

FPGA远程升级避坑实录:用STARTUPE2原语搞定Flash时钟,K7325T实测有效

本文深入解析了FPGA远程升级中的STARTUPE2原语应用,特别针对K7325T芯片的Flash时钟问题提供了实测有效的解决方案。通过详细的原语工作机制、Vivado工程实现步骤及调试技巧,帮助工程师规避常见陷阱,提升远程升级的可靠性和效率。

weixin_42558093的博客 141

Oracle EBS Interface/API(43) -自定义AP发票状态说明API

在某项目,客户需求获得AP发票的状态说明,例如对账系统或者某些报表。由于标准系统未提供状态说明,需要通过AP发票的标准Form获得相关业务逻辑,然后自定义AP发票状态说明API。

陈显平的专栏-Oracle EBS 605

java 提取视频缩略图_如何使用java提取视频缩略图或某一帧的图片

有个项目用到,需要上传视频,并提取一针图片.百度大法后整理如下.依赖使用mavenorg.bytedecojavacv0.8代码如下public class CreateImage {/*** 获取指定视频的帧并保存为图片至指定目录* [url=home.php?mod=space&uid=952169]@Param[/url] videofile 源视频文件路径* @param fra...

weixin_30015521的博客 583

手把手教你学Simulink——基于Simulink的电压型 vs 电流型整流器性能对比

摘要:本文基于Simulink平台对比分析了电压型整流器(VSR)和电流型整流器(CSR)的性能差异。VSR采用电容滤波,具有高功率因数(PF>0.99)、低输入电流THD(<3%)等优势,但动态响应较慢;CSR采用电感滤波,动态响应快(<0.05s),但THD较高(5%~8%)。研究建立了统一测试平台,详细对比了两者在稳态性能、动态响应、效率等方面的差异,并给出了控制算法实现和参数优化建议。通过量化分析,为电力电子工程师提供了拓扑选型依据,可根据恒压/恒流需求选择最优方案,有效缩短开发周

MHD0815的博客 172

Java之~ 视频JavaCV生成缩略图,获取视频第一帧图片路径

具体参考:https://blog.youkuaiyun.com/l1028386804/article/details/79755510 一、创建项目 1、创建Maven项目 2、添加依赖,导入jar包 在pom.xml中添加依赖配置 javacpp.jar,javacv-platform.jar具体如下:   &lt;!-- video --&gt; &lt;dependencies&gt;...

hpp的博客 3097

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android获取图片和视频的缩略图

获取图片缩略图: Java代码 byte[] imageByte=getImageFromURL(urlPath.trim()); //以下是把图片转化为缩略图再加载 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = t

极致的专注 无限的热情 2862

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 视频 缩略图_如何使用java提取视频缩略图或某一帧的图片

[Java] 纯文本查看 复制代码public class CreateImage {/*** 获取指定视频的帧并保存为图片至指定目录* [url=home.php?mod=space&uid=952169]@Param[/url] videofile 源视频文件路径* @param framefile 截取帧的图片存放路径* @throws Exception*/public sta...

weixin_35676877的博客 146

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux视频,图片 缩略图处理(FFMPEG,Imagescaling)

终端传送的多媒体有些需要生成缩略图以给用户更好更快速的浏览体验。 当然缩略图可以上传时生成并保存在数据库,也可以不保存并在在使用时动态生成,各有优劣。   下面是本人在Mongo+Play!+Scala中的应用 Imagescaling 包:java-image-scaling-0.8.6.jar   import org.apache.commons.io.output.Byt...

LJH940409666的专栏 728

Java-截取视频资料中的某一帧作为缩略图_java 通过视频的字节码流获取第一帧图片当作视频缩略图(1)

FFmpegFrameGrabber可以理解为解码器,也可以理解为帧收集器,可以获取视频资料的各种详细信息,时长,宽高,帧等,很强大。BufferedImage类是Image的一个子类,是一个带缓冲区图像类,主要作用是将一幅图片加载到内存中。

2401_84301352的博客 357

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

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

akon_vm的专栏 4万+

java视频生成缩略图_Java中使用ffmpeg生成视频缩略图

这篇文章介绍一种在Java中为视频生成缩略图的方式,借助的工具是ffmpeg。具体实现代码:/*** 从视频中每X秒创建一个缩略图** @param videoPath 视频文件完整路径* @param picSavePath 缩略图保存完整路径* @param yyyyMMddHHmmss 截图时间* @param picNumPerSecond 每秒几张图(例如:1表示每...

weixin_39557583的博客 424
上一篇: C语言进行二叉树的递归遍历和非递归遍历
下一篇: springmvc中controller注入request的线程安全问题
看风人Z
博客等级 码龄11年 13粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值