- 浏览: 191654 次
- 性别:
- 来自: 广州
文章分类
最新评论
备注:里面用到的ffmpeg可在https://ffmpeg.zeranoe.com/builds/ 下载
1、根据视频,生成截图
2、图片压缩并保存GetPicThumbnail
3、循环文件夹中的所有文件,生成对应的压缩图片 需要用到循环调用
先调用获取目录下所有文件夹的方法,此方法中调用了getFileName方法,也调用了自己,可实现循环遍历直到把所有文件都执行一边
有了这几个文件,批量压缩或者单独在上传时压缩又能游刃有余了
1、根据视频,生成截图
#region 从视频画面中截取一帧画面为图片 /// <summary> /// 从视频画面中截取一帧画面为图片 /// </summary> /// <param name="VideoName">视频文件,绝对路径</param> /// <param name="WidthAndHeight">图片的尺寸如:240*180</param> /// <param name="CutTimeFrame">开始截取的时间如:"1"</param> /// <returns></returns> public static string GetPicFromVideo(string VideoName, string WidthAndHeight, string CutTimeFrame) { //ffmpeg执行文件的路径 string ffmpeg = System.AppDomain.CurrentDomain.BaseDirectory + "ffmpeg\\ffmpeg.exe"; string PicName = VideoName + ".jpg";//视频图片的名字,绝对路径 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.Arguments = " -i " + VideoName + " -y -f image2 -ss " + CutTimeFrame + " -t 0.001 -s " + WidthAndHeight + " " + PicName; //設定程式執行參數 try { System.Diagnostics.Process.Start(startInfo); Thread.Sleep(5000);//线程挂起,等待ffmpeg截图完毕 } catch (Exception e) { return e.Message; } //返回视频图片完整路径 if (System.IO.File.Exists(PicName)) return PicName; return ""; } #endregion
2、图片压缩并保存GetPicThumbnail
#region 图片压缩并保存GetPicThumbnail /// <summary> /// 无损压缩图片 /// </summary> /// <param name="sFile">原文件位置</param> /// <param name="dFile">压缩后保存位置</param> /// <param name="flag">压缩比例,eg:按照百分比算如80,就是原图的高度乘以80%</param> /// <returns></returns> public static bool GetPicThumbnail(string sFile, string dFile, int flag) { System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile); ImageFormat tFormat = iSource.RawFormat; int sW = 0, sH = 0; //按比例缩放 Size tem_size = new Size(iSource.Width, iSource.Height); int dHeight = iSource.Height * flag / 100; //高度压缩百分不 int dWidth = iSource.Width * flag / 100;//宽度压缩百分比 if (tem_size.Width > dHeight || tem_size.Width > dWidth) //将**改成c#中的或者操作符号 { if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth)) { sW = dWidth; sH = (dWidth * tem_size.Height) / tem_size.Width; } else { sH = dHeight; sW = (tem_size.Width * dHeight) / tem_size.Height; } } else { sW = tem_size.Width; sH = tem_size.Height; } Bitmap ob = new Bitmap(dWidth, dHeight); Graphics g = Graphics.FromImage(ob); g.Clear(Color.WhiteSmoke); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel); g.Dispose(); //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) { ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径 } else { ob.Save(dFile, tFormat); } return true; } catch { return false; } finally { iSource.Dispose(); ob.Dispose(); } } #endregion
3、循环文件夹中的所有文件,生成对应的压缩图片 需要用到循环调用
先调用获取目录下所有文件夹的方法,此方法中调用了getFileName方法,也调用了自己,可实现循环遍历直到把所有文件都执行一边
#region 获取指定路径下所有文件名 /// <summary> /// 获得指定路径下所有文件名 /// </summary> /// <param name="path">文件写入流</param> public static void getFileName(string path) { string filePath = string.Empty; string newFilePath = string.Empty; DirectoryInfo root = new DirectoryInfo(path); FileInfo[] files = root.GetFiles(); foreach (FileInfo f in files) { filePath = f.FullName; //完整的目录名 newFilePath = filePath.Replace("D:\\DataImgs", "D:\\DataImgs\\thumbnail"); if (f.Name.ToLower().Contains("mp4") || f.Name.ToLower().Contains("avi") || f.Name.ToLower().Contains("rmvb")) { //针对MP4,把第一帧存为图片 GetPicFromVideo(filePath, "100*160", "1", ffmpeg); } else { //如果是图片都放到thumbnail文件夹下 GetPicThumbnail(filePath, newFilePath, 40); } } } #endregion #region 获取指定路径下所有子目录名 /// <summary> /// 获得指定路径下所有子目录名 /// </summary> /// <param name="path">文件夹路径</param> /// <param name="indent">输出时的缩进量</param> public static void getDirectory(string path) { getFileName(path); string dirPath = string.Empty; string newDirPath = string.Empty; DirectoryInfo root = new DirectoryInfo(path); DirectoryInfo[] dirs = root.GetDirectories(); foreach (DirectoryInfo d in dirs) { dirPath = d.FullName; if (dirPath == "D:\\DataImgs\\thumbnail") { MessageBox.Show("操作完成!"); } else { newDirPath = dirPath.Replace("D:\\DataImgs", "D:\\DataImgs\\thumbnail"); //更换文件夹创建路径 if (!Directory.Exists(newDirPath)) //如果不存在,则创建此文件夹 { Directory.CreateDirectory(newDirPath); } getDirectory(dirPath); } } } #endregion
有了这几个文件,批量压缩或者单独在上传时压缩又能游刃有余了
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 529项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 593原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 810在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 996hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2704先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1052///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2389服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 716本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 653原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9611、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 692写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 532需要单独引入的是COM中的Microsoft Office 1 ... -
获取视频文件的截图
2018-11-28 17:36 722视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1603在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
DataTable导出excel
2018-11-02 16:36 1159网上有很多关于导出的例子,这里讲一个利用NPOI导出excel ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4859具体的错误描述: 未能加载文件或程序集“System.Net. ... -
将app请求的简单json串转化为字典
2017-11-16 11:18 825通过Newtonsoft的DeserializeObject& ... -
WebAPI启用session功能
2017-11-16 11:04 1775第一步:简单建立两个类,以备修改WebApi的路由方式 第一 ... -
webapi记录请求和返回日志
2017-11-15 17:12 2167需求: 记录每个接口的请求参数及返回参数,方便以后回溯 fi ... -
超过了最大请求长度。System.Web.HttpException
2017-11-13 16:50 2437请在服务器端配置 方法一: 在通过WebSer ...
相关推荐
本文介绍了使用Java实现上传图片并生成缩略图的方法,包括获取文件路径、读取图像、创建缩略图及保存缩略图等步骤。通过这种方式,可以在不损失原图质量的前提下,有效地减少加载时间,提升用户体验。此外,本文还...
总结来说,基于Springmvc的图片上传和生成缩略图功能涉及以下几个关键步骤:配置Springmvc支持文件上传,编写Controller处理上传请求,生成并保存缩略图,以及与前端交互提供反馈。这些步骤都需要对Springmvc、文件I...
在图片预览和缩略图生成中,我们可以利用Canvas的drawImage方法将图片加载到Canvas上,然后通过调整Canvas的宽度和高度来生成缩略图。 3. **Data URL**:Data URL是一种内联资源表示方式,可以直接在页面中嵌入图像...
综上所述,实现"jsp上传图片并生成缩略图"的过程涉及到文件上传处理、图片的读取与缩放、文件存储以及错误处理等多方面技术。通过合理的设计和选用合适的工具库,可以在JSP中有效地实现这一功能。在实际开发中,还...
在生成缩略图后,你可能需要使用JAI来调整图片的大小和格式。 4. **JavaFX:** 虽然JavaFX主要是用于构建桌面和网页应用的图形用户界面,但它也包含了一些处理媒体的类,可以用于视频播放和截图。通过`Media`和`...
return "上传及生成缩略图成功"; } catch (Exception ex) { return "处理过程中发生错误:" + ex.Message; } } return "未上传文件"; } ``` ### 总结 通过以上方法,可以在ASP.NET项目中轻松实现上传图片...
在这个特定的场景中,"jSP上传图片生成缩略图"是一个常见的需求,尤其在网站开发中,如论坛、博客或电商网站等,用户可能需要上传图片,而为了提高页面加载速度和优化用户体验,通常会生成缩略图作为预览。...
在这个场景中,我们将关注如何使用Struts2框架结合FileUpload库来实现图片上传,并通过生成缩略图来优化用户体验。Struts2是一个流行的Java Web框架,它提供了一种结构化的方式来处理用户请求,而FileUpload则是处理...
在这个"asp无组件上传图片,aspjpeg生成缩略图和添加水印.zip"压缩包中,包含了解决这一问题的代码示例。主要涉及到以下几个核心知识点: 1. **图片上传**: ASP可以通过表单提交实现图片文件的上传。用户选择本地...
在这个特定的场景中,"JSP上传图片并生成缩略图"是一个常见的功能需求,尤其是在开发包含用户交互和多媒体内容的Web应用时。下面我们将详细探讨这一技术实现的关键知识点。 首先,**上传组件**是Web应用中用于接收...
接下来,我们处理图片文件生成缩略图。可以使用Image类和Graphics类提供的方法来完成。首先,读取原图,然后根据需要的尺寸创建一个新的Bitmap对象,再使用Graphics.DrawImage方法将原图绘制到新Bitmap上,最后保存...
在ASP.NET中,上传图片并生成缩略图和水印图...总的来说,ASP.NET中上传图片并生成缩略图和水印图的过程涉及文件上传、文件操作、图像处理等多个方面,通过熟练掌握这些技术,可以构建出高效且功能丰富的图片管理系统。
在PHP中,使用Imagick扩展可以轻松地从Word文件生成缩略图。以下是一个示例代码片段: ```php $im = new Imagick(); $im->setCompressionQuality(100); // 假设你有一个名为'example.docx'的Word文件 $docFile = ...
在IT领域,多图片上传、判断图片像素以及生成缩略图是常见的图像处理技术,尤其在网站开发和移动应用设计中极为重要。这些功能能够优化用户体验,减少服务器存储空间,并加速网页加载速度。下面我们将详细探讨这三个...
PDF生成缩略图是将PDF文档中的页面转换成小尺寸的图像表示,通常用于预览、索引或在文件管理器中快速查看PDF内容。在IT领域,这涉及到PDF处理和图像处理技术。以下是一些关于如何在C#中生成PDF缩略图的关键知识点: ...
生成缩略图和添加水印时,也需防止内存溢出或资源泄露,确保图片处理过程的安全性。 以上就是关于"Struts2上传文件、生成缩略图、添加文字和图片水印"的主要知识点,理解并掌握这些技术可以帮助开发者实现高效、...
总之,实现"java批量上传图片并生成缩略图"的功能,需要结合Java的Servlet技术处理文件上传,使用图像处理库生成缩略图,并且在前后端之间进行有效的通信。这不仅是技术上的挑战,也是对系统设计和优化能力的考验。
预览图片后,我们可能还需要生成缩略图,以减小数据传输量或适应不同的展示尺寸。这里我们可以利用HTML5的Canvas元素。 1. 创建一个canvas元素,并获取其2D渲染上下文。 ```javascript var canvas = document....
最后,生成缩略图是图像处理的一部分,常用于节省服务器空间和提高页面加载速度。在PHP中,可以使用GD库或Imagick扩展来创建缩略图。在这个DEMO中,可能包含一段代码,根据上传的图片生成预览尺寸的缩略图,用于展示...
php 上传图片生成缩略图 在PHP中获取EXIF信息应用EXIF函数库中的函数。首先,应该确定EXIF函数是否已经加载,在php.ini文件中查看“extension=php_exif.dll”前是否有分号“;”,如果有则说明未加载,那么就要去掉...