好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。
看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了。
做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩。
网上有看到 https://tinypng.com/ 中使用的 pngquant , 我去下载了pngquant的cli看了下,然后就开始了这个小网站的基础。
先看看前端页面:

这个功能还会扩建,所以现在界面只有简洁的一部分。
现在的功能基本上只有图片压缩和打包下载,
前端页面用到的: vue、webuploader、jq、layer、jszip
后端:express、co、md5、imagemin

才开始的时候使用的是纯pngquant-lib操作,虽然成功了,但是只能压缩png图片,所以抛弃了,去npmjs网站看了下,最后决定压缩直接用imagmin 前人栽树后人乘凉嘛。
整个流程逻辑,简单说就是:上传-压缩-打包
下面我就分步来说说处理的内容;
1. 上传
这里的上传使用的百度webuploader插件,用习惯了。
上传只做的对图片的验证,其它的没处理,比如文件大小什么的,所以大文件上传估计会有问题。
在用户打开页面的时候会分配一个目录用于保存上传的图片和压缩图片,其主要作用就是保存当前上传信息,后期扩展会用到,现在没什么大用处,主要作用可以避免用户上传图片不会出现冲突的情况。

2. 压缩
压缩使用的是:imagemin 写这个的是真大神 现在图片外流的图片压缩算法基本上都有他的影子 膜拜,不废话了
对imagemin进行一个简单的包装,方面项目内部使用

成功压缩后返回压缩后的图片大小、名称和base64数据
3. 打包:使用的是jszip在前端打包,本来想在后端打包,但是考虑到性能问题,打包就交给前端了,前端也没考虑浏览器兼容,
数据返回后,把接受到的数据放到zip里面去,然后就可以等待用户下载了。

遇到的问题:
1. imagemin中

imageminMozjpeg压缩配置:{targa: true},node压缩时居然报错,然后跑到https://www.npmjs.com/package/imagemin-mozjpeg去看,里面说明了targa通常不需要,我就呵呵了,直接干掉

2. jszip压缩,不需要 data:image/png;base64, 这个字符串,但是为了前端预览压缩后的文件,我在后端添加了这段文件头

开始捣鼓了半天,只知道报错,

最后打开jszip.js里面才看到

需要把base64头部的文件信息去掉,然后手动解决

最后总算搞定了。
这个压缩工具也算不错,不过什么都压缩,但是只有图片会进行处理,如果是其它文件它只会移动了文件而不压缩,即便是改变后缀也不会压缩。
我测试了100多张jpg图片,基本能压缩65%左右,不过不知道什么原因,压缩后用qq的图片浏览器看到居然有问题,其它的地方看到都没问题
最后附上github地址:https://github.com/zoeDylan/z_img
好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。的更多相关文章
- 捣鼓TinyMCE粘贴图片并上传+Flask后台
好久没有编程了,最近需要完成一个小功能,为了方便,需要粘贴图片后上传到后台.前台编辑器用tinymce(N年前用过,我也就知道这个编辑器而已.这次使用下来感觉文档更丰富了),后台我用的Flask.昨天 ...
- WSL捣鼓记——图形化(以emacs为例)
前言 这学期开始学习linux,但笔记本装了双系统之后指纹识别会失效,开虚拟机又十分占据内存,于是乎基本需要使用linux的时候就用wsl,可奈何只有命令行界面,在需要使用图形软件(如emacs)的时 ...
- 捣鼓FileZilla
今天突然对ftp服务器感兴趣,于是随意打了一个ftp词条,发现了FZ官网,好奇点进去下载了之后,捣鼓了一会.于是,也写一个小教程记录一下吧,害怕自己以后忘记怎么弄的了. 首先需要用到两个,一个是FZ ...
- 好久没来了,重出江湖,共享个python34+pyqt+pyserial串口工具源码
真的是好久没来了,写博客对我来说还真是难坚持下来,热度一过就忘了,就算什么时候想起来也懒得去敲一个字,这次真不知道能坚持多久,随心吧,想写写,不想写也不勉强自己. 最近由于工作调试需要自己写了一个带图 ...
- kotlin电商学习记录,好久没来逛逛了
好久没来,一直做毕业设计,用kotlin写一个基于以图搜图的购物app,现在又赶上实习,内容多,时间少,不过前途光明并由贵人指点.加油 kotlin电商学习记录 技术选型 视图层 kotlin-and ...
- 好久没玩docker了,温下手
好久没玩docker了,温下手 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum i ...
- 好久没玩laravel了,今天玩下Laravel项目迁移步骤
.在新的目录中克隆git远程版本库 .执行composer install安装依赖 .执行php artisan key:generate生成key 好久没玩laravel了,今天玩下Laravel项 ...
- 好久没写原生的PHP调用数据库代码了分享个
好久没写原生的PHP代码调用数据库了 eader("Content-type: text/html; charset=utf-8"); $time=$symptoms=$attr= ...
- 免费WiFi,仅仅为好久没联系的你们
昨日,认识五年的朋友搬来与我一起住了,说不上来,没有激动,仅仅是突然感觉生活又多了一点生机.兴致上来,晚上立马联系了已经近四个月没有联系的好友,才知道他们的生活也因这几个月发生了翻天覆地的变化.究竟什 ...
随机推荐
- 字符编码的种类:ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、UTF-16、Base64
ASCII码ASCII:https://zh.wikipedia.org/wiki/ASCIIASCII(American Standard Code for Information Intercha ...
- SEO-发信息注意的问题
SEO是什么? SEO的全称是Search Engine Optimization,翻译过来就是搜索引擎优化,说到搜索引擎,可能不是特别的清楚.通俗点讲,就是百度,谷歌,雅虎,这些可以直接搜索到你想要 ...
- Ubuntu 不支持 rpm
不是第一次犯这个错误了. 记一下. 每次安装jdk 的时候,习惯性下载rpm包. 然后的,然后在 ubuntu上rpm 安装的时候就跪了.. ubuntu需要使用Alien 把rpm 转成 deb再安 ...
- OAuth2.0 知多少
1. 引言 周末逛简书,看了一篇写的极好的文章,点击大红心点赞,就直接给我跳转到登录界面了,原来点赞是需要登录的. 可是没有我并没有简书账号,一直使用的QQ的集成登录.下面有一排社交登录按钮,我们可以 ...
- 对bootstrap不同版本的总结
之前以为bootstrap2和bootstrap3没啥区别,无非就是功能增加了,简直是误区啊 bootstrap3与bootstrap2版本语法都不同啦 栅格写法 col-md-3/span3 文本效 ...
- node.js 基础知识之 querystring.stringify querystring.escape
序列化 1. querystring.stringify({name:'chenshuai',ago:21,job:"web"}) 'name=chenshuai&am ...
- sass 与 less 的区别与学习
一直使用的都是sass,公司提出新需求要用less,看了一下less的官方文档,感觉记不住.在这我想用与sass的比较学习,加深印象.也希望可以帮助到一些人. 一.安装sass与less sass基于 ...
- C#传递委托给C或C++库报错__对XXX类型的已垃圾回收委托进行了回调
出现的原因: 因为你传给C或C++的委托是局部的.可能传过去之后就被垃圾回收了,再次调用就会异常. 想办法做成全局的就好 public void Play(string url) { _bassStr ...
- MIT 计算机科学及编程导论 Python 笔记 1
计算机科学及编程导论在 MIT 的课程编号是 6.00.1,是计算机科学及工程学院的经典课程.之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单.易学等原因,近年来已经改用 ...
- iOS开发之计算文字尺寸
/** * 计算文字尺寸 * * @param text 需要计算尺寸的文字 * @param font 文字的字体 * @param maxSize 文字的最大尺寸 */ - ( ...