自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 一个免费、简单、功能齐全的在线录屏应用

最新上线了新版本的在线录屏(https://www.mnggiflab.com/product-mng/recording),功能比之前的版本丰富了很多,支持摄像头录制、多种音频选择、固定区域录制、设置录制背景、定时录制等。点击选择摄像头,可进行摄像头录制,摄像头可进行拖拽移动,在右上方的设置区域可对摄像头录制进行形状、宽高、圆角等设置。选择好录屏窗口后,进入到下面的录制区域选择界面,调整并拖动选择框选择固定区域录制,也可点击跳过按钮录制完整窗口。设置完成后,点击下方的开始录制按钮进行录制。

2023-12-14 14:21:58 461

原创 可以设置压缩大小的在线GIF压缩

最近对gif压缩页面进行了更新,之前每次压缩都会自动下载,但是大多数时候压缩gif都需要调整参数,有的时候并不能一次性设置好,如果每次压缩都下载下来就会导致下载目录下有非常多的压缩文件,非常混乱。于是我增加了压缩历史的功能,支持压缩前后对比预览,批量下载压缩结果。每次设置好压缩参数后,点击压缩,压缩完成后,会显示一个gif列表,列表里面显示了gif压缩前后的尺寸和大小,另外还支持压缩前后对于预览。压缩完多个gif后,可以点击下载全部按钮,点击后将会下载一个包含所有压缩历史的zip压缩文件。

2023-02-06 22:42:36 245

原创 上线了新版在线GIF压缩功能,支持指定压缩大小

最近上线了新版本的gif压缩功能,可以指定gif尺寸,压缩大小以及自动抽帧比例。挺好用的,尤其是制作微信表情包和发GIF头条的时候,应该很好用 (https://www.mnggiflab.com/product/gif-compress-v2)上传一个1.7M的gif,指定压缩大小为500kb,自动抽帧比例为30%,点击压缩即可。如果压不到想要的大小,可以调整抽帧比例以及宽度。...

2022-08-16 17:11:09 496

原创 可以在电脑上在线录制视频GIF的软件,不需要下载安装

并打开在线录屏网站https//www.mnggiflab.com/product/screen-recorder。录制完成后,回到录屏页面,点击停止录制按钮完成录屏。点击录屏转GIF按钮可跳转到视频转GIF页面。对录屏进行剪裁、添加水印、并转换成GIF。点击录屏按钮开始录制视频。...

2022-07-20 18:41:20 251

原创 把录制的视频进行剪裁并转换成GIF

在线录屏(https://www.mnggiflab.com/product/screen-recorder)的页面更新了,现在录制好视频后,点击录屏转GIF按钮可以直接跳转到视频转GIF页面()https://www.mnggiflab.com/product/video-to-gif进行剪裁啦,不需要手动上传录制好的视频文件,第一次跳转可能花费的时间稍长,后面就很快了在这个页面里面可以对录屏文件进行剪裁,支持各种比例剪裁,还支持圆形剪裁框。剪裁好了后还可以添加文字水印和图片水印。使用下面的工具条

2022-07-08 16:31:37 198

原创 JS异步递归内存泄漏分析记录

JS异步递归内存泄漏分析记录之所以有这篇文章记录,是因为rescript不支持async/await。在写循环自动播放视频的时候,需要每间隔一定的时间,将视频中的某一帧渲染到canvas上,只能使用promise来实现了,下面是样例代码let sleep = time => { Promise.make((resolve, _) => { Js.Global.setTimeout(() => { resolve(. ignore()) }, time)-

2022-04-19 10:49:12 430

原创 一个免费的在线录屏网站

大概花了一周时间,用rescript写了这个在线录屏的页面,大部分时间都在查MDN文档。。由于是调用的浏览器的API,目前只支持chrome和firefox的PC端浏览器废话不多说,先介绍下功能:首先打开一键录屏网站 点击开始录制按钮进行录制点击录制下载可以下载录制好的视频(目前只支持webm格式),点击一键转换按钮可以将录屏转换为GIF格式图片,如果有编写教程、示例需求的同学应该需要用到这个功能。有的时候需要对录屏前后的片段进行删减,可以点击录屏剪辑按钮调整录屏前后的时间段,点击剪裁按钮进

2022-03-01 10:56:36 1992

原创 如何对录屏进行剪辑

打开 一键录屏网站 ,进行录屏操作录屏完成后,点击停止录屏按钮,点击录屏剪辑按钮,打开剪辑页面(建议只剪辑3分钟内的录屏)调整进度条的两端,选取时间段调整完成后,点击剪裁按钮进行剪辑剪辑完成后,点击下载按钮将录屏的视频保存到本地,点击转换按钮可将录屏转换为GIF格式图片...

2022-03-01 10:54:13 3361

原创 如何将录屏转换为高清GIF

打开 在线录屏 (https://www.mnggiflab.com/screen-recorder)网站,点击开始录制按钮可以选择录制整个屏幕,任意一个软件的界面窗口,或者浏览器的任意标签页,选择[分享系统声音]来控制是否录制系统声音。点击分享按钮开始录制以浏览器的其中一个标签页为例录制完成后,在标签页的上方点击停止分享的按钮,回到录屏网站,点击停止按钮这个时候可以看到下方播放区域已经在自动播放录屏了。点击录屏下载按钮可以下载录制好的视频点击转换为GIF按钮,将录屏转换为高清GIF

2022-02-20 14:10:58 1237

原创 从录屏到转换为GIF的一站式解决方案

推荐一款在线免费的录屏网站(一键录屏 https://www.mnggiflab.com/screen-recorder),可以很方便的对电脑端进行录屏,并且可以将录制好的视频转换为GIF导出首先打开 录屏网站(https://www.mnggiflab.com/screen-recorder) ,点击开始录制可以选择录制整个屏幕,录制单独的窗口,以及录制浏览器的某个标签点击 [分享系统中的音频] 可以录制声音点击录屏预览部分后,点击分享即可开始录制录制完成后,点击停止录制点击录屏下载按

2022-02-18 17:14:21 655

原创 怎么调整gif表情包的比例?

打开 在线编辑gif(https://www.mnggiflab.com/gif-editor) 网站,上传你的gif表情文件,右键素材添加到编辑区后,点击全选按钮选中所有图片点击编辑按钮,调整gif的尺寸和比例在剪裁比例中选择需要的比例尺,拖拽剪裁框来调整剪裁范围,点击剪裁按钮进行剪裁剪裁完成后,点击完成按钮返回主界面,点击导出按钮即可...

2022-02-10 10:36:56 1286

原创 怎么把一个gif表情包分解成多个?

经常在网上遇到过很多有趣的表情包,但是下载到本地后发现gif文件特别大,有没有办法能够把一个大的gif分解成多个小的gif呢?首先,打开 在线编辑gif(https://www.mnggiflab.com/gif-editor) 网站,上传好你的gif后,将其添加到编辑区进行分解然后选中前面一半的图片,点击导出按钮,即可将这部分图片合成为一个小的gif了再点击取消选中,然后选中后面部分的图片,再点击导出操作,就可以导出后面部分的gif了...

2022-02-09 17:10:12 1097

原创 如何保存gif表情包里面的部分图片?

大家在网上经常会看到很多有趣的gif表情包,尤其是里面有部分图片非常惊艳,想要把这些图片保存下来,比如下面这个“大郎吃药”的动图首先,打开网站 在线编辑gif表情包(https://www.mnggiflab.com/gif-editor) ,上传你的gif表情包文件右键,将gif添加到编辑区进行分解选中你觉得好看的图片,点击编辑区工具栏里面的下载按钮就可以把这些图片下载到本地了下面是下载好的图片...

2022-02-08 15:32:59 1223

原创 如何对一个GIF表情包进行压缩剪裁?

gif表情包太大了怎么办,有没有什么办法减少它的尺寸呢?这里推荐两个办法:1.对它进行压缩,打开 在线压缩gif文件 网站,上传你的gif文件,选择压缩品质,然后进行压缩,如果压缩效果达不到要求,可以进行多次压缩2.一般使用方法1就足够了,当你的gif文件经过压缩后尺寸还是达不到要求,或者尺寸达到要求了,但是画面清晰度较低的时候,可以使用这个方法进行处理,打开 在线剪辑gif表情包 网站,上传你的gif文件,将它添加到编辑区进行分解。选中你觉得多余或者重复的图片,点击删除按钮进行删除全选所有

2022-02-07 10:28:16 3610

原创 如何合并多个gif?

如何保存gif表情包里面的部分图片?大家在网上经常会看到很多有趣的gif表情包,尤其是里面有部分图片非常惊艳,想要把这些图片保存下来,比如下面这个“大郎吃药”的动图首先,打开网站 在线编辑gif表情包 ,上传你的gif表情包文件右键,将gif添加到编辑区进行分解选中你觉得好看的图片,点击编辑区工具栏里面的下载按钮就可以把这些图片下载到本地了下面是下载好的图片...

2022-02-06 16:01:40 709

原创 如何把视频转换为gif动图

如何把视频转换为gif动图使用网站(https://www.mnggiflab.com/video-to-gif)可以很方便的将视频(mp4 等 web 支持的视频格式)转换为 gif 动图格式,本网站利用 web 的 video 标签将视频解析为一系列图像帧,再将各帧合并成 gif 动图,包含了一键自动选帧、设置每帧的延迟、视频尺寸裁剪、gif 动图预览、gif 动图免费下载等功能,下面是操作方法:界面总览下面是视频转 gif 的主要功能界面上传视频上传视频,点击上传视频按钮,选择本地视频文.

2021-10-22 14:47:06 2213

原创 nodejs脚本性能分析

步骤v8-profiler-node8CPU性能分析https://www.speedscope.app/v8-profiler-node8安装好v8-profiler-node8npm i v8-profiler-node8CPU性能分析在要测试的代码块前后进行profiling,然后将profiler保存至本地文件const profiler = require('v8-profiler-node8')const start = () => { profiler.startPr

2020-12-23 17:40:18 382

原创 我的第一个npm包

前言:最近对前端的兴趣越来越大,于是决定把之前量化回测的代码从java改为用ts重写,数据api使用python的tushare包提供。我在调用api的时候想要写一个函数缓存,因为有的数据量特别大,每次调用都比较耗时,在java里面我可以使用HashMap来实现,在js里面呢?我在es6里面找到了Map这个数据结构,但是一番尝试后我发现Map只能对基本的数据类型使用值作为key的存储,如果值是对象的话,key存储的是这个对象的引用。于是我决定自己实现一个简单的HashMap,目前的实现很简单,如果键是基本类

2020-09-24 11:14:03 141

原创 react在package.json里配置proxy的原因

以前单独使用webpack的时候,我们知道在开发过程中可以配置devServer里的proxy,从而访问后端提供的接口。react内部也是使用的webpack那么怎么去配置proxy呢,我在react的官网里并没有找到,没有办法在网上找了很久的资料终于找到了方法:在package.json里配置,可是为什么这样配置就可以让webpack知道这个proxy?react提供了create-react-app来简化创建app的过程,但是也隐藏了很多的配置细节,通过package.json中scripts里的ej

2020-09-22 16:59:24 3421

原创 Arrays.asList踩坑

一不小心在项目里用到了Arrays.asList,将一个数组转换成List了,结果在调用add的时候报java.lang.UnsupportedOperationException异常,之前只是在网上的其他资料里看到过不要使用Arrays.asList转换数组,没有具体去深挖为什么,没想到还真的碰到了这个问题。于是看了下Arrays.asList的源码@SuppressWarnings("varargs")public static <T> List<T> asList(T...

2020-09-07 10:31:40 149

原创 java注解@SafeVarargs

自己写了一个工具方法public class Maps { public static <K, V> HashMap<K, V> newHashMap(Entry<K, V>... entries) { HashMap<K, V> map = new HashMap<>(); for (Entry<K, V> entry : entries) { map.put(entry.getKey(),

2020-08-18 11:29:55 421

原创 达梦库查询字段信息(长度、精度、是否主键)

项目需要查询表的字段相关信息,包含名称、长度、精度、是否主键。查了半天达梦数据库的手册,感觉好绕啊,如果有更简单的方法请在评论里添加下,在这里记录下SQL@Select("select t1.column_name, t1.data_type, t1.data_length, t1.data_scale, t2.constraint_type from user_tab_columns t1" + "left join" + "(select t1.column_name, t1.tab

2020-08-11 17:15:23 5651 1

原创 Hikari的max-lifetime和mysql的wait_timeout

之前做的项目一直都没在意hikari连接池的参数配置,项目上线也没遇到什么问题。最近的一个使用mysql库的项目老是报No operations allowed after connection closed.提醒,于是翻了下hikaricp和mysql的书,max-lifetime表示一个连接在连接池中的最大生命周期,如果一个连接距离上一次使用的时间大于mysql的wait_timeout,此时mysql将连接关闭了。如果hikari的max-lifetime小于wait_timeout,hikar

2020-08-07 15:11:51 13779 4

原创 实现一个通用的遗传算法框架

这两天写了一个比较通用的遗传算法框架common-geneticalgorithm,之所以写这个是因为以前每次需要用到遗传算法的时候总是手写一遍,从开始写代码起到现在估计至少写了不下20次了,有

2020-07-01 13:49:28 758

原创 betterplot-使用java绘制漂亮的统计图

花了大概一周的时间终于把这个包完成了,之所以会写这个包完全是因为在java里画图实在是太丑了,而且太不容易了。之前在用smile在做机器学习相关的事情,这个包说实话真的很好用,而且提供的DataFrame操作数据很方便,比kotlin的krangl包好用多了,就是画图的时候感觉很别扭,于是便有了写betterplot的想法,主要思路是通过echart.js在前端绘制图表,通过后端提供绘图api,但是通过http接口的形式来绘图还是比较麻烦的,于是我封装了后端的http接口,通过betterplot-api包

2020-06-30 10:37:36 692

原创 java 数组排序后返回索引

直接上代码/** * 排序后返回索引 * @param v * @param <T> * @return */static <T> int[] sortToIndex(T[] v) { Map<T, Queue<Integer>> indexMap = new HashMap<>(); for (int i=0; i<v.length; i++) { Queue<Integer> in

2020-06-06 21:17:37 1654

原创 ts实现观察者模式

下午写了两篇文章后也没什么事情,就看了会javascript框架设计的书,看到观察者模式,如下面代码:下面用ts实现了一遍type Func = (...args: any) => void;class PubSub { handlers: { [index: string]: Func[] }; constructor() { this.handlers = {}; } // 订阅事件 on(eventType: string, handler: Func)

2020-05-21 18:25:46 562

原创 大文件上传后端处理方法

前一篇文章写了大文件上传前端代码,现在记录下后端的处理思路。代码见https://github.com/Mng12345/big-file-upload-backend后台使用springboot实现,主要使用一个数组来判断文件是否完成上传,当每次上传一个信的文件时根据uid在缓存中新建或者将本次的文件块信息记录至缓存中@Getter@Setter@Builderpublic static class FileInfo { // 路径 private String fileP

2020-05-21 16:29:39 1117

原创 大文件上传vue

之前做项目的时候遇到一个文件上传的问题,当时用没有考虑文件较大时,后端响应过长导致链接断开的问题。这个需求后来取消了,不过问题一直在,最近研究了下怎么解决这个问题。代码见https://github.com/Mng12345/big-file-upload,核心原理是前端使用Blob.slice方法对文件进行分块,下面是分块代码:makeChunks(file: File): FileChunks { const fileChunks: FileChunks = { file,

2020-05-21 15:34:31 277

原创 js正则断言及其他

先行断言/x(?=y)/匹配x,x必须在y的前面,如:"90, 91%, 100%".match(/\d+(?=%)/g)>> ["91", "100"]先行否定断言/x(?!y)/匹配x,x后面不是y(注:match的参数正则是全局匹配时,返回的数组里的元素是正则匹配的结果,当参数正则不是全局匹配时,返回的数组里第一个元素是正则匹配的结果,第二个元素是()提取的结果)"90, 91%, 92".match(/\d+(?!%)/g)>> ["90", "9",

2020-05-11 18:30:55 303

原创 Nestjs调试(vscode)

最近和朋友一起写一个成本管理系统,刚好又零零碎碎看了和写了不少js和ts的代码。于是就想使用js的技术栈来实现,采用前后端分离的架构,前端框架使用vue,在vue.config.js中配置devServer代理。后端框架使用nestjs。前两天刚把环境配置好,在前端代码里调用后端提供的一个api发现返回为空,于是就想调试下nestjs。不得不说文档是个好东西,只要找得到,所有问题就能迎刃而解。不...

2020-05-07 13:46:00 4319 2

原创 js数组的默认排序

js数组的默认排序是将数组的元素按照字符串的unicode进行排序,比如数组:[-10, -1, 2].sort()的排序结果为: [-1, -10, 2]。将[-10, -1, 2]的每个元素转换为unicode字符串如下:[-10, -1, 2].map(item => (item + "").split("").map(i => i.charCodeAt(0).toStrin...

2020-04-28 11:33:09 928

原创 react实现的弹窗组件,鼠标移入弹出的菜单,菜单保持弹出状态

最近打算模仿在线ps实现一个手稿上色的单页面应用,需要实现鼠标移入button弹出菜单,移出button菜单消失,鼠标移入菜单,菜单保持弹出的状态。一开始是想把弹出的菜单用absolute定位,然后将left置为button的范围内,这样可以实现效果,但是不美观,弹出的菜单很有可能会覆盖部分button。查阅了网上的方法:当鼠标移出button时,使用setTimeout设置菜单延时消失,当鼠标移...

2020-04-14 10:10:24 2461

原创 div填满页面问题

作为前端小透明,最近遇到一个需要两个div在垂直方向上填充满整个页面的问题,具体效果如下:<div class="out"> <div class="one">1</div> <div class="two">2</div></div>在网上找到的方法如下:.out { position: ...

2020-04-13 16:26:15 562

原创 不想删系列

deepcopy耗时真的很大import timefrom typing import List, Dict, Unionexist_cuts: Dict[int, int] = { 0: 0, 1: 1, 2: 5, 3: 8}cut_p_maxcache: Dict[int, int] = dict()cut_cord_maxcache: Di...

2020-03-15 23:18:59 109

原创 ArrayList源码阅读

ArrayList类结构int DEFAULT_CAPACITY = 10;Object[] EMPTY_ELEMENTDATA = {};Object[] elementData;int size;// 初始化,将DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值给elementDatapublic ArrayList() { this.elementD...

2019-11-01 14:35:32 122

原创 安卓gradle版本问题记录

https://blog.csdn.net/zengsidou/article/details/79797417

2019-10-12 10:49:32 103

原创 一个自己写的python打包依赖工具包

动机最近由于项目原因,需要在不能联网的环境下部署python项目。由于项目在windows下开发的,部署到linux上后又需要手动安装各种依赖包,尝试在本地虚拟机使用virtualenv开发,发现打包后的python解析器运行不了,只能使用系统安装好的python,然后指定venv下的site-packages路径才能运行项目,一两次还好,每次都需要这样做就比较麻烦了。于是开发了个人的pymvn...

2019-09-02 17:52:25 522

原创 redis安装记录

官网下载redis源码,解压tar -zxf redis-5.0.5.tar.gz编译安装make MALLOC=libcmake install PREFIX=/usr/local/redis配置mkdir /usr/local/redis/etc将解压目录下的redis.conf和sentinel.conf复制到/usr/local/redis/etc下,更改以下配置re...

2019-08-26 11:15:49 101

原创 spark问题记录

1.Initial job has not accepted any resources; check your cluster UI to ensure…解决方案:1.打开spark的UI界面,http://ip:8080/,查看Alive Workers数量。若为0则表明spark的worker未启动。...

2019-08-19 11:01:14 250

java排序(更新中)(插入、合并、快排)

增加了使用随机值做分割的快速排序,算法效果相比使用最后一个数做分割的快速排序较好

2017-08-22

java排序(更新中)

插入排序,合并排序,快速排序

2017-08-21

java插入排序与合并排序

针对200000长度的数组,采用插入排序和合并排序,对比两种算法的时间复杂度

2017-08-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除