每天分享一点小知识,积少成多。今天分享的是一款图片无损压缩工具!最近在做网站的备案,上次的图片要求不能大于9M,无奈只能压缩图片了,今天对比了几款图片压缩工具,最终得出Caesium Image Compressor款工具是最合适的。
老外开发的,感觉就是比国内的好点;
开源免费,不需要破解,无水印无广告;
有安装版和移动版,移动版直接解压就可以使用;
最主要的是无损压缩,有损压缩后图片也很清晰,可以根据个人需要设置压缩率;
支持批量压缩,可以手动加载多张图片,或直接打开文件夹内所有图片;
EasyImageSizer
LightImageResizer
Mass Image Compressor
好压图片转换
图压
Caesium Image Compressor
测试过以上几款图片压缩工具,测试过程就不说了,毕竟个人意见,我最终留下了Caesium Image Compressor,好了今天的分享就这么多,关注我不迷路!
软件可以自行百度
编写第一个自定义View为了后续文章中描述方便,我们把布局过程中的两个步骤单独分离,分别称为测量过程和布局过程。本篇文章的目标是在View内部(100,100)坐标处绘制一个边长为100的正方形,效果如下:怎么实现上面所说的效果呢?首先来考虑下如果是在现实生活中,我们要绘制一个顶点在(100,100),边长为100的正方形,我们需要什么呢? 纸笔坐标系那么在View系统中是否有响应的抽象实现呢?如果有的话,绘制工作就变的异常简单了。首先来看下坐标系,这个肯定有啊,我们在View简介中就已经介绍过了Android中的坐标系,这里我们要进行View内部绘制,选用的肯定是View坐标系哈,以View左上角为坐标原点,水平右向为X正向,垂直下向为Y正向。那么纸呢?还记得onDraw函数原型吗?它的参数Canvas对象就是纸的抽象实现。笔的抽象实现是Paint类,位于android.graphics包下,自此我们就找到了Android系统中View绘制的三要素:Canvas:画布,调用其内部方法进行绘制Paint:画笔,调用其内部方法进行画笔特性设置,例如抗锯齿,画笔颜色,画笔粗细等坐标系:Vi
作者|李俊辰、王强Flutter作为跨平台开发利器,一经推出便在业内赢得了不错的口碑。Flutter最初是应用于iOS和Android应用开发的,后扩展到了Web、macOS和Linux,现如今也可以开发Windows应用了,补齐了全平台的最后一块拼图。Flutter作为谷歌出品的UI框架,凭借“多端一致”和“渲染性能”两方面的优势,深受广大开发者的推崇。谷歌曾表示Flutter的目标是提供一个可移植的框架,从而在各种平台上都能构建以原生速度运行的UI。这也意味着,在谷歌眼中,Flutter不止于跨平台开发,而是全平台制霸。今年7月8日谷歌发布了Flutter在Linux上的第一个Alpha版本。而现在,谷歌宣布Flutter在Windows上的Alpha版本正式发布。对于仅Windows10就有超过10亿安装量的桌面操作系统来说,Flutter的这个版本已经让人等了很久了。Flutter的Alpha版最初于2017年在谷歌的I/O开发者大会上发布,将近一年后发布了Beta版。Flutter最初是为Android和iOS应用开发而设计的,但此后已扩展到了Web、macOS和Linux几
最近发现腾讯云中授权子用户权限QCloudResourceFullAccess后子用户无法通过api接口支付cvm的订单, 错误提示 [TencentCloudSDKException]code:UnauthorizedOperationmessage:由于您没有支付权限,无法完成支付,请开通后再试如果给于QCloudFinanceFullAccess该策略允许您管理账户内财务相关的内容,例如:付款、开票。该策略则权限过大不符合要求. 问题再次转到QCloudResourceFullAccess这个策略该策略的描述是该策略允许您管理账户内所有云服务资产。 但是查看策略的内容发现{ "version":"2.0", "statement":[ { "effect":"allow", "action":"*", "resource":"*" }, { "effect":"deny&
WhenIpackaginglicensewithinthenupkg,IwillusingLicensetoreplacelicentUrl.IusingthiscodetosetthelicenseasMITbutitcannotpack.<licensetype="MIT"/>复制Becauseitisanewestfeature.Ifyournugetversionis5.0.2thatyoushouldusethiscode.<licensetype="expression">MIT</license>复制PackagingLicensewithinthenupkg·NuGet/HomeWiki
说明:@SafeVarargs是jdk1.7引入的适用于可变参数与泛型能够更好结合的一个注解。@SuppressWarnings产生编译期警告的示例代码官方解释:程序员认定带有注释的主体或者构造函数不会对其执行潜在的不安全操作将此注释应用于未经检查的方法或者构造器在"不可具体化"的和未经检查的参数类型警告关于所有数组参数创建的时候除了强加使用@Target元注解的限制之外,编译器还被用在注解类型上来实现额外的限制下面几种情况会在使用@SafeVarags注解的时候产生编译时错误:在声明一个固定参数的方法或者构造函数的时候也就是说如果你认为你的方法或者构造方法是类型安全的,那么你也就可以使用@SafeVarargs来跳过@SuppressWarnings("unchecked")检查。示例:publicclassSafeVarargs{ //这其实不是一个安全的类型检查 @SafeVarargs staticvoidm(List<String>...lists){ //先会存储到array[0]的位置 Object[]array=li
删除原RegionTwo的glance的endpoint,新增RegionOne的glance的endpoint到RegionTwo[root@stone-controller-1~]#keystoneendpoint-list|grep9292 /usr/lib/python2.7/site-packages/keystoneclient/shell.py:65:DeprecationWarning:ThekeystoneCLIisdeprecatedinfavorofpython-openstackclient.ForaPythonlibrary,continueusingpython-keystoneclient. 'python-keystoneclient.',DeprecationWarning) |a7bde0b6d0124002acde9a1a7a6f5d8e|RegionIronic|http://10.254.3.245:9292|http://10.254.3.245:9292|http://10.254.3.245:9292|dc9c789e
前言:上章我们借助vant的AddressList列表组件实现了地址列表页面的快速编写,同样,这一章节我们还是借助vant组件,快速完成新增地址的编辑功能页面。 Github:https://github.com/Ewall1106/mall 首先我们来看看地址编辑页面的效果: 地址编辑页面效果展示1、新建地址编辑页面(1)跟以前一样,我们复制一份我们已经初始化好了的test.vue页面重命名为addressEdit.vue页面开始初始化。 关于文件名字规范这里提一句,大家可以参考一下我写的关于vue的命名规范(2)路由添加,老规矩还是去router的index.js中添加addressEdit路由 (3)为地址列表address.vue添加路由跳转到该页面。截图来自vant官网根据文档中的描述,我们可以知道为add事件添加路由跳转:在address.vue页面中添加跳转事件至此,addressEdit.vue页面的初始化工作基本就完成了。2、引入vant地址编辑组件(1)首先在main.js中引入AddressEdit地址编辑并注册:import{AddressEdit}fr
将多个逻辑上不相关列组合到一起形成了PL/SQL的记录类型,从而可以将记录类型作为一个整体对待来处理。而且PL/SQL记录类型可以进行 嵌套以及基于PL/SQL记录来定义联合数组,嵌套表等。本文首先回顾了PL/SQL记录的几种声明形式,接下来主要描述PL/SQL记录的嵌套以及基于 记录的集合。 有关PL/SQL记录语法、以及在SQL中使用PL/SQL记录,请参考:PL/SQL-->PL/SQL记录1、下面的示例同时描述了基于表,基于游标,以及基于用户自定义的记录 DECLARE rec_tabdept%ROWTYPE;-->基于表类型使用ROWTYPE来声明记录变量 v_counterPLS_INTEGER:=0; CURSORcur_tabIS-->声明游标 SELECTdname,locFROMdept; rec_cur_tabcur_tab%ROWTYPE;-->基于定义的游标使用ROWTYPE来声明记录变量 TYPEdept_rec_typeISRECORD-->用户自定义记录类型 ( dnamedept.dname%TYPE--
什么是营销号码安全营销号码安全(SecurityofMarketingPhoneNumber,SMPN)为您提供精准的、一站式号码安全感知保护及预防服务,服务涵盖号码安全防护、风险号码识别及恶意呼叫治理等多领域能力。通过便捷轻量的云端API调用,帮助客户建立从企业到终端,全方位号码安全管理体系,提升对风险的感知和应对能力。营销号码安全支持不同的付费方式,您可以根据需求选取不同的套餐,实现成本优化。 应用场景企业认证 场景:当企业号码外呼时,品牌企业通过使用号码认证服务,可以在移动终端展示企业名称、Logo等信息。 效果:增加企业C端曝光,提升企业品牌形象,提高客户触达率,减少负面标记。 营销监控 场景:企业运维人员可通过营销号码安全建立号码安全管理体系,保护外呼号码安全,监控号码营销程度。 效果:建立全方位号码安全管理体系,提升企业对风险的感知及应对能力。 号码治理 场景:全国及区域运营商,可通过营销号码安全建立号码治理体系,监控号码恶意活动,保护终端安全。 效果:建立全方位号码治理体系,识别号码恶意行为,遏制号码违法行为。
详细代码:https://github.com/cxcn/dtool 前言 .def是百度手机输入法-更多设置-自定义输入方案所使用的格式。 解析 码表偏移量0x6D # 占用字节数 描述 a 1 编码长度(红色框) b 1 词长*2+2 a 编码(黄色框),可以是纯编码,也可以是编码=位置 b-2 词(绿色框),utf16-le编码 6 6个空字节代表词条结束 代码实现: r.Seek(0x6D,0)//从0x6D开始读 forr.Len()>4{ codeLen,_:=r.ReadByte()//编码长度 wordSize,_:=r.ReadByte()//词长*2+2 //读编码 tmp=make([]byte,int(codeLen)) r.Read(tmp)//编码切片 code:=string(tmp) spl:=strings.Split(code,"=")//直接删掉=号后的 code=spl[0] //读词 tmp=make([]byte,int(wordSize)-2)//-2后就是字节长度,没有考虑4字节的
先下载bootstrap-select,并添加到项目中,然后在页面引用 <linkhref="{%static'css/bootstrap-select.min.css'%}"rel="stylesheet"> <scriptsrc="{%static'js/bootstrap-select.min.js'%}"></script>复制 也可以用在线cdn先测试,因为bootstrap-select对jQuery版本和bootstrap版本都有要求前端代码如下:复制 <divclass="form-group"> <labelfor="firstname"class="col-sm-3control-label">测试人员</label> <divclass="col-sm-7"> <selectclass="col-lg-6form-control"id="tester"name="tester"title="请选择测试人员"data-live-search="true"&
<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title></title> <basetarget="_blank_"/> </head> <body> <ahref="http://www.baidu.com">百度</a> <ahref="http://sina.com"target="_self">新浪</a> <ahref="http://sohu.com">搜狐</a> <ahref="http://163.com">网易</a> </body> </html>复制 1、注意base标签是单标签 2、base标签的位置 3、默认是当前窗口打开的
原文链接www.cnblogs.com/zhouzhendong/p/UOJ206.html 题解 T=1的情况直接大力从两边向中间询问即可。 T=2的情况挺妙的,我没想到。 考虑首先花费n+1代价得到全局最大值和最小值,也就是a[1]和a[n]。 然后考虑将值域均分为n-1段,每一段询问一下。答案一定在相邻两段区间的左边一段的Max和右边一段的Min之间,或者a[1]与a[1]右侧数,或者a[n]与a[n]左侧数中产生。 我们考虑证明这个东西: 设每一段的长度$d=\left\lceil\frac{a[n]-a[1]}{n-1}\right\rceil$,如果答案在某一段区间中,那么$ans\leqd-2$。然而,根据抽屉原理,总共有$a[n]-a[1]-1-(n-2)$个空位,分成$n-1$段,那么最长的一段至少长度为$\left\lceil\frac{a[n]-a[1]-1-(n-2)}{n-1}\right\rceil=d-1>d-2$,故答案不可能在某一段区间内。 接下来证明一下我们的花费在$3n$之内。 1.第一次询问花费n+1。 2.接下
centos的systemctl命令 systemctlis-enabled*.service #查询服务是否开机启动 systemctlenable*.service #开机运行服务 systemctldisable*.service #取消开机运行 systemctlstart*.service #启动服务 systemctlstop*.service #停止服务 systemctlrestart*.service #重启服务 systemctlreload*.service #重新加载服务配置文件 systemctlstatus*.service #查询服务运行状态 systemctl--failed #显示启动失败的服务 CentOS7中systemctl的使用与CentOS6中service的区别 转载 https://blog.csdn.net
单体架构中数据安全问题: 1数据安全的问题。2 AQS的原理。 3 lock 是如何实现线程的阻塞和唤醒 ReentrantLock 原理(独占锁) AQS abstractQueuedSynchronizer 是解决并发场景下的数据的安全问题。 lock锁的使用: 公平锁:公平锁和非公平锁的对列都是基于锁内部维护的一个双向链表,表结点node的值就是每一个请求当前锁的线程,公平锁就是每次都是依次获取队首取值。非公平锁就是随机获取新的线程的锁有很大的几率直接获取锁。 设置公平锁就在ReentrantLock(true)设置非公平锁就在ReentrantLock(false) 数据安全的问题产生的原因是什么: 可见性: JMM java的内存模型 解决的方式:volatile synchrionized lock 有序性: 指令重新排序&n
从一个渐变圆角进度条浅出画一个圆 开始 这一切需要从一个(简单)的需求开始,在最开始对设计第一眼看到这张图的时候,感觉挺简单的嘛,直接用echarts饼图模拟出来一个就好了 echarts 然后上echarts试了一下发现实现不出来了 设计图这边采用的是锥形渐变,而echarts只有线性渐变和径向渐变。 css 然后准备换种方案,css就有锥形渐变,然后通过conic-gradient加上mask画出了一个渐变的环形然后可以再通过剪裁实现出进度的展示。 但是存在两个问题,一个是conic-gradient属性兼容性不好ie和火狐都不支持,二个是后来发现了还存在一个需求进度条的两端需要有圆角,然后这种实现方式就不行了。 其实在写这篇文章的时候才想到一个方法就是在两端加上两个半圆形,不过得计算半圆形的位置。 Canvas&SVG 在我的理解中在页面上作图总共有四种方式。 dom+css Canvas SVG WebGL WebGL是一头雾水还是试试Canvas和SVG吧,因为更熟悉Canvas一些,我这边就采用Canvas来试试。 Canvas可以轻松的实现圆角和环形,
使用LogMiner查看归档日志 https://www.cnblogs.com/Memories-off/p/10435489.html 查看归档文件序号selectsequence#,first_timefromv$log_historyorderbyfirst_timedesc; 查看归档日志大小du-m归档日志文件 用sql语句确定要分析的归档日志文件selectt.first_time,t.namefromv$archived_logtorderbyt.first_timedesc; 使用LogMiner分析数据execsys.dbms_logmnr.add_logfile(logfilename=>'+fra/orcl/ARCHIVELOG/2017_12_20/thread_4_seq_44812.51752.963273579',options=>dbms_logmnr.new); 启动LogMinerexecutedbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_onlin
SpringBoot添加定时任务 背景描述:需要定期执行一批数据,所以就需要定义定时任务啦 一、固定的定时任务类:(修改定时任务执行时间时需要重启服务) packagecom.gaunyi.batteryonline.web.scheduled; importcom.gaunyi.batteryonline.service.OnePartnerContactsAbstract; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.context.annotation.Configuration; importorg.springframework.scheduling.annotation.EnableScheduling; importorg.springframework.scheduling.annotation.Scheduled; /** *定时任务类 */ @Configuration//1.主要用于标记配置类,兼备C
基于SSM的健身房管理系统 Theprojectwasmadein2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 代码请见GitHub 项目展示 用户登录页 用户注册页 用户主页 用户购买健身卡(商城)页 管理员登录页 管理员主页 管理员添加用户页 管理员编辑用户页 细节1:常驻工具栏(内含搜索栏) 细节2:登录账号密码实时反馈(AJAX) **细节3:翻页功能&可选每页显示条数** 细节4:人性化的交互设计 项目环境 JDK:1.8 IDE:IDEA201903 DataBase:MySQL8.0 Mybatis:3.5.2 POM:Maven Tomcat9 Bootstrap3 JQuery2 lombok插件 分页插件:PageHelper5.1.11 涉及技术MySQL数据库,Spring,JavaWeb及MyBatis,简单的前端知识 项目详情 设计数据库 大二没有好好学系统设计与分析,画的图一塌糊