基于.NetCore开源的Windows的GIF录屏工具

推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。

项目简介

这是基于.Net Core + WPF 开发的、开源项目,可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域,并将其转为 GIF动画,还支持自定义 GIF 动画效果、字幕、背景音乐。

核心功能

1、GIF动画制作:支持录像、摄像头、画板模式;

2、编辑动画:支持导入文件、实时录制;支持裁剪、旋转等;

3、字幕:包括文字、字母、数字等;

4、动画效果:过渡效果、水印、阴影、模糊等;

5、快捷键:快速启动录像机、编辑器,视频的开始、停止、放弃等;

6、语言:支持中文等多个版本;

7、自动化:设定鼠标、按键、边框等效果。

项目结构

图片

界面截图

主界面

图片

画板

图片

编辑器

图片

应用程序配置

图片

录像机

图片

多语言

图片

项目地址

http://github.com/NickeManarin/ScreenToGif

更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单

- End -

文章首发于公众号【编程乐趣】,欢迎大家关注。
图片

本文转载于网络 如有侵权请联系删除

相关文章

  • Java和Java大数据有什么区别?

    大家好,又见面了,我是你们的朋友全栈君。单单提起java或者大数据,很多人对此都一目了然,但对于Java大数据这样一个新鲜名词,多少有些疑惑。那java和java大数据学习的内容是一样的吗?两者有什么区别呢?今天就从java和java大数据的以下方面谈谈两者的区别。Java和Java大数据有什么区别Java和大数据的关系:java是计算机的一门编程语言;可以用来做很多工作,大数据开发属于其中一种;大数据属于互联网方向,就像现在建立在大数据基础上的AI方向一样,他两不是一个同类,但是属于包含和被包含的关系;java可以用来做大数据工作,大数据开发或者应用不必要用java,可以Python,Scala,go语言等。目前最火的大数据开发平台是Hadoop,而Hadoop则是采用java语言编写。一方面由于hadoop的历史原因,Hadoop的项目诞生于一个java高手;另一方面,也有Java跨平台方面的优势;基于这两个方面的原因,所以Hadoop采用了Java语言。但是也因为Hadoop使用了java所以就出现了“Java大数据”。Java是我们耳熟能详的编程语言,大数据更是当今科技的明星技

  • 【分享】在集简云上架应用如何设置动作字段参数?

    在开发者平台应用授权和触发/执行字段时都会涉及到字段参数,我们介绍一下各个字段参数的配置。应用授权时的字段参数设置界面:动作设置-添加普通字段时的字段参数设置界面:字段参数包括:字段Key:用于接口调用时的唯一字段标识,字段key应该为英文字母,例如API_Key。同时,接口调试中的{{input.data.xxx}}中的”xxx"部分为字段key,例如如果您的字段key为:phone_number,接口调试中如需要引用此字段,可以输入{{input.data.phone_number}}字段名称:在前端展现给用户的字段名称,例如用户名,非必填,如果不填写则以字段key做为字段名称字段说明:非必填,在前端展现给用户,用于说明改字段内容如何填写,我们建议填写字段说明例如格式示例,特别是日期时间类型的字段,需要填写格式在字段说明中。字段类型:字段类型决定此字段的字段值在接口中以什么格式请求,如果是文本,多行文本则以文本格式请求,如果是数值,浮点则以数值格式请求。“展示字段”是一个前端展现的字段一般用于说明,展示字段不会用于接口请求。是否必填:如果勾选则用户必须填写内容,否则无法进

  • HTML DOM clearInterval() 方法

    定义和用法clearInterval()方法可取消由setInterval()设置的timeout。clearInterval()方法的参数必须是由setInterval()返回的ID值。语法clearInterval(id_of_setinterval)复制参数描述id_of_setinterval由setInterval()返回的ID值。下面这个例子将每隔50毫秒调用clock()函数。您也可以使用一个按钮来停止这个clock: <html> <body> <inputtype="text"id="clock"size="35"/> <scriptlanguage=javascript> varint=self.setInterval("clock()",50) functionclock() { vart=newDate() document.getElementById("clock").value=t } </scrip

  • Spring MVC 3 深入总结

    一、前言:大家好,Spring3MVC是非常优秀的MVC框架,由其是在3.0版本号公布后,如今有越来越多的团队选择了Spring3MVC了。Spring3MVC结构简单,应了那句话简单就是美,并且他强大不失灵活,性能也非常优秀。官方的下载网址是:http://www.springsource.org/download(本文使用是的Spring3.0.5版本号)Struts2也是比較优秀的MVC构架,长处非常多比方良好的结构。但这里想说的是缺点,Struts2因为採用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都非常好。能够參考我写的一篇关于SpringMVC与Struts2与Servlet比較的文章http://elf8848.iteye.com/admin/blogs/698217Spring3MVC的长处:1、Spring3MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。2、Spring3MVC非常easy就能够写出性能优秀的程序,Struts2要处处小心才

  • Java如何优雅地实现接口数据校验

    本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过SpringMVC定义一个Controller层接口,并将接口请求或返回参数分别定义在一个Java实体类中,这样SpringMVC在接收到Http请求(POST/GET)后,就会自动将请求报文自动映射成一个Java对象。这样的代码通常是这样写的:@RestController publicclassOrderController{ @Autowired privateOrderServiceorderServiceImpl; @PostMapping("/createOrder") publicCreateOrderBOvalidationTest(@ValidatedCreateOrderDTOcreateOrderDTO){ returnorderServiceImpl.createOrder(createOrderDTO); } } 复制这样的代码相信大家并不陌生,但在后续的逻辑实现过程中却会遇到这样的问题:“在接收请求参数后如何

  • django-rest-framewor

    源码繁琐,多说无益,耐心细读官方文档:https://www.django-rest-framework.org/个人总结:REST是一种软件架构设计风格,不是标准,也不是具体的技术实现,只是提供了一组设计原则和约束条件。DRF(DjangoRestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个DjangoApp,所以,本质上,它是一个DjangoApp。安装:(确定Django已经安装)>>>pipinstalldjangorestframework复制1APIView   首先需要了解django中views.View类及其相关流程,看如下关系图(最好看源码):DRFAPIView请求流程:  DRF对django视图配置流程图(个人画)2解析器组件(用来解析数据的请求的组件)  Django并不能处理请求协议为application/json编码协议的数据  注意:DRF解析器会封装到View中的parsers内,在视图函数被调用时,会传入request,通过request.data拿到数据才进行解析,即解

  • 东南亚的招聘骗局,程序员请注意!

    程序员的成长之路互联网/程序员/成长/职场关注阅读本文大概需要5.2分钟。总有些我认为是常识的事情,在别人看来都是第一次接触。很多骗局都是如此,圈内人不上当,圈外人不警惕。毕竟骗子吃的就是信息不对称的生意。关于东南亚的招聘骗局,便是如此。他们当前主力针对的是程序员一族,被骗者甚众,很多人一去不回。今天我把这点东西写出来,希望更多人能看到,能警醒。东南亚,当今华人冒险者的天堂。这里离中国很近,所以交通方便,市场相通,物流便利。这里的文化习惯与国内接近,并且有大量华人,所以融入当地环境,难度很低。而且当地立法宽松,执法更宽松,只要一些进贡,绿灯开起来就没灭过。在这里,博彩和色情产业是合法的,当地政府只管税收和贿赂,不管闲事。最妙的是,这里离大陆虽然近但又不是十分近,所以大陆警方想跨国抓人困难重重。市场广阔,文化融合简单,监管宽松,作恶成本低,种种条件带来的后果,就是一个很理想的罪恶之地。菲律宾,印尼,柬埔寨,老挝,马来西亚,缅甸,到处都有罪恶发生。美丽的热带风光下,是无数博彩网站的大本营。一套完整网络博彩体系的运转,需要大量的程序员来维护。不要小看博彩,博彩体系非常复杂,从架构稳定性到数据

  • 崇尚开源软件的公司如何从中获益?

    开源:透明的安全性专有软件和开源软件之间的对比与IT行业本身一样古老。几乎所有类别的软件都可以从开发和销售代码的供应商处获得,或者从公开代码的开发人员社区里获得。在过去十年中,对使用开放软件的厌恶,特别是在企业领域,已经发生了显著的改变。管理人员意识到,即便是Facebook,谷歌和亚马逊这样的IT巨头也都在依赖开源,一般的企业也应该如此。开源的优势众所周知:较低的成本,安全性和由开发者社区带来的更高的质量以及没有与制造商的联系(沟通的成本,需求的过度定制导致软件开发质量下降,译者个人理解),都是有力的论据。在某些领域,开源产品已经站在各自领域的潮头。例如,Linux,Firefox和WordPress,在消费领域就取得了巨大成功。MySQL,Apache,FreeBSD,Zimbra和Alfresco等工具、产品经常应用于企业环境。然而,区别不是黑白之辩:软件不能简单地分为开放和封闭,自由和非自由,开源和专有。软件种类划分存在各种子类别,这导致其许可条款存在巨大差异。但是,对于公司而言,它主要只是开源和专有软件的相关类别,两者的结合的产物--商业开源软件才是真正的两者完美融合的形式。

  • NFT 合约中优秀的开发模式

    本文作者:Tiny熊[1]最近开发了不少NFT合约,之前一直想总结一篇文章介绍NFT开发中的各种技巧,奈何总是各种事情没有动手,今天看到老外的这篇总结,非常全面,就翻译一下。以下是原文翻译:我读过很多NFT合约,以下是我在最好的合约中看到的最常见的开发模式:用计数器取代ERC721Enumerable,以节省Gas。使用ERC721A来实现高效的批量铸造。使用mint而不是safeMint使用Merkle树实现白名单机制可升级/可交换的元数据合约防范机器人防止NFT狙击手(针对性铸造稀有NFT)其他模式用计数器取代ERC721Enumerable,以节省Gas。首先,简单介绍一下背景,ERC-721标准由2个扩展组成:ERC721MetadataERC721Enumerable核心721标准是非常简单的,你只需要实现以下函数,就能符合核心721标准:2个扩展在上面添加了这些函数:那么,ERC721Enumerable的问题在哪里?OpenZeppelin为所有这些接口提供了现成的实现。它们中没有一个是完美的,但2个实现(ERC721和ERC721Metadata)做得相当好。然而,ER

  • std::get&lt;C++11多线程库~线程间共享数据&gt;(10):使用互斥量保护共享数据(1)

      1/* 2*话题1:使用互斥量保护共享数据 3* 4*1.C++中使用互斥量 5*2.用代码来保护共享数据 6*3.定位接口间的条件竞争 7*4.死锁:问题描述及解决方案 8*5.避免思索的进阶指导 9*6.std::unique_lock----灵活的锁 10*7.不同域中互斥量所有权的传递 11*8.锁的粒度 12* 13* 14*当程序中有共享数据时,你肯定不想让程序其陷入条件竞争的情况。将所有访问共享数据结构的代码都标记为互斥是否是一种更好的办法呢? 15*这样,任何一个线程在执行时,其他线程试图访问共享数据时,就必须进行等待。除非该线程就在修改共享数据,否则任何线程都不可能会看到修改中的共享数据。 16* 17*当访问共享数据前,将数据锁住,在访问结束后,再将数据解锁。线程库需要保证,当一个线程使用特定互斥量锁住共享数据时, 18*其他的线程想要访问锁住的数据,都必须等到之前那个线程对数据进行解锁后,才能进行访问。这就保证了所有线程都能读写共享数据,而不会出现破坏共享数据的未定义行为。 19* 20*互斥量一种数据保护通用机制,但它不是“神”;需要编排代码来保

  • spring基础(一)

    1packagecom.oracle.demo01; 2 3importcom.oracle.factory.InstanceFactory; 4importcom.oracle.pojo.User; 5importcom.oracle.pojo.User2; 6importorg.junit.Test; 7importorg.springframework.beans.factory.BeanFactory; 8importorg.springframework.context.ApplicationContext; 9importorg.springframework.context.annotation.AnnotationConfigApplicationContext; 10importorg.springframework.context.support.ClassPathXmlApplicationContext; 11importorg.springframework.context.support.FileSystemXmlApplicationContext; 12

  • 介绍一下css盒子模型?

    ①盒模型:内容(content)、填充(padding)、边界(margin)、边框(border) ②类型:IE盒子模型、标准W3C盒子模型; ③两种盒模型的主要区别是:标准盒模型的宽高是值内容宽高(content)   ④而IE盒模型的宽高是指content+padding+border。   ⑤设置盒模型的方式是:设置box-sizing   box-sizing:content-box 标准盒模型   box-sizing:border-boxIE盒模型   ⑥盒子模型的定位   网页默认的布局方式   浮动   Position定位  

  • shell解析my.cnf配置文件

    my.cnf配置格式如下 vimy.cnf[client]port=3306socket=/tmp/mysql.socket [mysqld]port=3306server-id=1datadir=/usr/local/mysql/data [mysqld_safe]port=3306 moreparseMy.sh #!/bin/bashcnf=$(cd`dirname$0`;pwd)"/my.cnf" #得到区块数组g_sec=(`sed-n'/\[*\]/p'$cnf|grep-v'^#'|tr-d[]`)#sed-n'/\[*\]/p'得到包含[*]的行#grep-v'^#'去掉#打头的行#tr-d[]去掉[]#g_sec=(clientmysqldmysqld_safe) for((i=0;i<${#g_sec[@]};i++))doecho"解析No."$isec_name=${g_sec[i]}g_names=(`sed-n'/\['$sec_name'\]/,/\[/p'$cnf|grep-Ev'\[|\]|^$|^#'|awk-F'=''{print$1}'`)#

  • celery worker的工作模式

      默认是进程池方式,进程数以当前机器的CPU核数为参考,每个CPU开四个进程。如何自己指定进程数:    celeryworker-Aproj--concurrency=4 如何改变进程池方式为协程方式:  celeryworker-Aproj--concurrency=1000-Peventlet-c1000 #安装eventlet模块 $pipinstalleventlet #启用Eventlet池 $celery-Acelery_tasks.mainworker-linfo-Peventlet-c1000复制

  • 2022-11-21 vue+uniapp之小程序 video iphone手机 视频播放卡顿

    如题。卡一两次可以当成是视频缓存问题,可要是一直卡者不动那就是代码问题了。 经测试,android和ios手机存在卡顿情况,ios较为明显一点,原因我猜测是在小程序中video这个标签在ios的系统里没有设置缓存机制,导致每次进入都得重新加载视频。 解决方案:给video标签添加一行属性 custom-cache="{{false}}"复制 这个应该就是官方为了解决视频卡顿,缓存引起的问题而做出的解决方案。

  • 通过Nginx实现负载均衡

    百度了下负载均衡:英文名称为LoadBalance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 嗯,跟我理解差不多:如果你的网站请求很多(是“很多”),造成什么结果呢?响应速度变慢(每个请求都是要创建线程去执行的,而一台服务器能同时开辟的线程数是有限的),严重的服务器崩掉。 如何解决呢? 办法一:更换服务器,换台牛逼点的呗,4核换8核,8核换16核,16核....额,那这样是不是很贵啊?这是肯定的,所以呢 办法二:不换服务器,加服务器,多弄几天价廉的服务器,这也是一种解决办法。将请求分散到不同的服务器上,这样一来,压力平摊了,多好。老板说:这个好,这个好。 针对办法二,最关键的一点就是如何将请求分散到不同的服务器上,这需要一种算法,最最简单的可以弄个随机算法,我之前在分布式存储图片中提到过: varlist=db.ImageServerInfo.Where<ImageServerInfo>(c=>c.State==1).ToList(); intserverCount=lis

  • 软工实践|结对第二次—文献摘要热词统计及进阶需求

    班级:软件工程1916|W 作业:结对第二次—文献摘要热词统计及进阶需求 结对学号:221600418黄少勇、221600420黄种鑫 课程目标:学会使用Git、提高团队协作能力 Github地址:基础需求、进阶需求 分工: 黄少勇--词频统计代码实现,性能优化 黄种鑫--爬虫代码实现,可视化实现,单元测试 目录 Github签入记录 PSP表格 解题思路 设计实现过程 性能分析及优化 关键代码 行数统计 字符数统计 单词数(词频)统计 爬虫实现 单元测试 遇到的困难及解决方法 评价队友 附加题 爬虫拓展 数据可视化 不足 Github签入记录 基本需求: 进阶需求: PSP PSP2.1 PersonalSoftwareProcessStages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 10 •Estimate •估计这个任务需要多少时间 10 10 Development 开发 750 980 •Analysis •需求分析(包括学习新技术) 120 150 •DesignSpec •生成设计

  • 5V USB充电器电路图

    5VUSB充电器电路图 时间:2017-12-27 关键字:USB充电器电路图   充电器原理图    USB充电器套件,又名MP3/MP4充电器,输入AC160-240V,50/60Hz,额定输出:DC5V250mA(标签贴纸为500mA,如果要长期输出更大电流,请更换Q1为13003)。MP3和MP4在全国范围大量流行,不过作为日常用品的充电器由于直接和220V高压相连,具有故障率较高,容易损坏的特点,特别是买到那些不成熟的产品后,真是苦不看言。最后,受学校老师委托,我们联系到了一款成熟量产的充电器套件,现在一同给广大电子爱好者分享。   传输文件进行[薄膜开关]打样 下面是对着实物绘制的电路原理图:(电路板上有多种元件安装方法,安装请与原理图、实物图为准,PCB板上有些元件孔是不要安装的,有些元件要装在别的元件孔上,这点请注意!)说明:为了简化电路,达到学习目地,图中用1欧的电阻F1起到保险丝的作用,用一个二极管D1完成整流作用。接通电源后,C1会有300V左右的直流电压,通过R2给Q1的基极提供电流,Q1

  • mysql 最大连接数

      方式一:一次性修改 服务重启后还原 查看 showvariableslike'max_connections%'; 修改setGLOBALmax_connections=1024;复制 方式二:通过配置文件修改 vi/etc/my.cnf 在[mysqld]下添加max_connections=1024 保存重启服务servicemysqldrestart复制 ​复制

  • tornado中self.set_header()的一个问题

    self.set_header()必须要写在self.write()之后,否则会报错

  • git操作

    step1:本地回退到相应的版本gitreset--hard<版本号>gitreset--hard203738c9ccad7d95b728c8d9d287f2ff24eaaca2   step2:远程仓库也退到相应的版本gitpushorigin<分支名>--forcegitpushoriginmaster--force   gitlab管理master的版本回退的地方在Setting->Repository->ProtectedBranches   创建新的分支: gitbranchyourNewBranchName gitcheckout yourNewBranchName gitpush-uorigin yourNewBranchName   gitlab打tag: 查看标签 gittag 创建标签 gittag标签名字-m'消息内容' 推送标签 gitpushorigin标签名字 删除标签 gittag-d标签名字 删除远端的标签 g

相关推荐

推荐阅读