1 Star 0 Fork 0

Pike/Js Image Converter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Js Image Converter

介绍

在上传用户的图片之前,前端可对图片进行缩放并选择最优的格式转化,然后上传服务器或下载另存。当前支持以下功能。

  • 当前支持生成转换生成png/jpg/webp等格式,支持根据是否有透明色和生成后的文件大小自动决定使用png还是jpg。
  • webp格式是这之中文件大小最小的,但是兼容性不够好,所以自动选择的时候,排除掉了webp。
  • 另外支持指定最大宽度和最大高度进行压缩。 库接口也支持直接设置目标图片的宽度和高度。
背景介绍

开发这个功能是因为:最开始我们也觉得原始图片很重要,所以我们的上传方案是用户上传,原图保存,然后前端请求的时候,在路径上加上参数然后后端生成对应的缓存图片供下载展示,这样就牺牲了服务器的硬盘空间和图片处理的开支(尽管相同的请求参数只需要处理一次)。而后来我们发现其实用户上传的图片质量并不高,一般用手机拍一下就上传了,而现在的手机相机的像素都很高,所以生成的图片会很大,最后实际用来展示的,往往只需要1000-2000像素左右,所以还不如在上传的时候直接压缩掉。

后来我们也为了稳定性和扩展性,决定使用阿里云的OSS服务,需要将这些图片都上传到OSS上。 这个时候,我们自己图片服务器上的空间占用已经接近1T(包含很多缓存图片,为了加速避免重新生成,不会自动清理),最后上传到OSS后,超过了520G.

整个过程大致分成以下几步:

1、最开始用bat+ossutil命令行工具遍历上传,bat负责目录遍历,跳过缓存文件和缓存目录,ossutil工具负责图片上传,近上传原图。

2、随着理解的加深(原图的上传和使用的关系、OSS结合CDN效率和费用方面的理解等),决定用户上传的图片不再上传原图,限制最大宽度和高度,所以决定将原图转化后重新上传。由于这些是以前上传的图片,已被引用,所以不能更改图片扩展名。执行又分成了两个阶段:

1、bat+命令行图片编辑工具+ossutil,不过在寻找命令行图片编辑工具上并不太顺利;

2、改用python的pillow来处理图片,如此一来,发现bat和ossutil都可以用python来替换,相当方便

3、对于以后用户将上传的图片,前端直接转换限制最大宽高,同时因为数据库还未对文件产生引用,所以图片格式可以择优选择,这是尝试编写这个工具和库的原因,主要用到的功能是:限制图片最大宽高、择优选择png/jpg,webp兼容性不够好,所以服务器上不能保存webp格式的,通过cdn下载的时候,可以设置让cdn自动帮转成webp的。

目前还在压缩中,已经上传的空间压缩到了200G左右,所以节省一半的存储空间,自然回源的流量也会同步减少。

Tips of OSS+CDN

  • CDN在回源的时候,设计设置保留参数和过滤参数,现在这么处理以后,回源的时候OSS无需图片处理,直接发原图,把回源参数都过滤掉,提高了命中率,也降低了回源的流量,这是很有好处的
  • OSS其实支持在访问不到资源的时候,设置跳转到其他地址或者从其他地址获取数据(自动保存到OSS并返回给请求者),如果这么做,意味着原来服务器上的服务要一直保留着,无法彻底切换到OSS,不过这个功能在过渡期也是非常好用的
  • 有必要了解一下OSS的特性,那就是强一致性和原子性,即上传成功前资源无法访问,成功后必然可以完整访问(上传成功意味着所有节点都已完成),用户不可能读取到上传了一半的资源。
  • OSS管理的时候看上去虽然想树状的目录结构一样,其实它是k-v型存储的,也就是和redis一样,并没有目录结构,所以并没有目录结构太深导致访问速度变慢的问题。

软件架构

软件架构说明

安装教程

下载即可使用

使用说明

参考example.html

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/
MIT License Copyright (c) 2022 Pike Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

在上传用户的图片之前,前端可对图片进行缩放并选择最优的格式转化,然后上传服务器或下载另存。 当前支持生成转换生成png/jpg/webp等格式,支持根据是否有透明色和生成后的文件大小自动决定使用png还是jpg。 webp格式是这之中文件大小最小的,但是兼容性不够好,所以自动选择的时候,排除掉了webp。 另外支持指定最大宽度和最大高度进行压缩。 库接口也支持直接设置目标图片的宽度和高度。 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/CoderPike/js-image-converter.git
git@gitee.com:CoderPike/js-image-converter.git
CoderPike
js-image-converter
Js Image Converter
master

搜索帮助