好久没发贴了,最近捣鼓了个基于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,仅仅为好久没联系的你们
昨日,认识五年的朋友搬来与我一起住了,说不上来,没有激动,仅仅是突然感觉生活又多了一点生机.兴致上来,晚上立马联系了已经近四个月没有联系的好友,才知道他们的生活也因这几个月发生了翻天覆地的变化.究竟什 ...
随机推荐
- View 的measure 和onMeasure
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang SC"; color: #454545 } p.p2 ...
- Android之XListView下拉刷新,更新网络美女图
一.简介: 下拉刷新是一种特定的手动刷新交互,和其他的同类操作不同的地方在于它采用了更加直觉的下拉操作,所以它的交互足够清晰明显. 下拉刷新主要用在类似ListView这样的控件,设计下拉刷新有三 ...
- 如何在container中编译dotnet的eShopOnContainers
准备的软件 问题 Image下载问题 以下就是为啥要有最后一个软件(我是使用版): SQLSever for Linux 内存需求 需要编译Image 成功搞定 参考 Welcome to t ...
- IOS百度地图之--->第一篇《环境配置与基本使用》
Ios 百度地图SDK简易使用说明:http://developer.baidu.com/map/index.php?title=iossdk 先道歉:对于原来上传的Demo我很抱歉,什么都没有,也没 ...
- 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模
1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...
- ASP.NET MVC制作404跳转(非302和200)
前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...
- AP模块发票过账标记为否检查方法
根据发票编号,查找发票 : 发票过账标记,始终为否,创建会计科目提示如下:
- Google永远不可能回到国内,只能是回忆
今天早上在微博上无意看 [谷歌翻译App在大陆地区恢复无障碍使用]这篇文章,不知不觉就点进去看一下,内心还是比较兴奋,为什么兴奋说不清楚.或许我们是真的喜欢Google的产品. 回想2010年Goog ...
- 函数调用过程&生成器解释
摘自马哥解答,感谢. 函数调用过程: 假设程序是单进程,单执行流,在某一时刻,能运行的程序流只能有一个.但函数调用会打开新的执行上下文,因此,为了确保main函数可以恢复现场,在main函数调用其它函 ...
- React+ES6+Webpack环境配置
转自http://www.cnblogs.com/chenziyu-blog/p/5675086.html 参考http://www.tuicool.com/articles/BrAVv2y Reac ...