自动压缩博客图片为webp格式

作为自己的个人博客,我非常喜欢搞一些花里胡哨的东西,其中就包括不少精美图片,但是过多的图片会占用大量的网络资源导致博客加载速度变慢。

那怎么办呢?

第一个想到的就是升级我那带宽2M的服务器,不过经费有限只能另寻出路。随即我又想到了压缩图片,既然图片很多那就压缩图片再上传,这样就能节约不少因为大图占用的资源,于是我找了一个压缩网站叫recompressor,能够将大多数图片大小压缩到一半以下.

但是用了一阵以后我发现...好麻烦!每次都要自己手动压缩(ㄒoㄒ)。

这时候我又在想,有没有什么东西能够自动压缩上传的图片呢?经过我的一番查找与实践,就要请出今天的主角了“ webp_server_go”!

webp_server_go

WebP

首先说明一下什么是WebP压缩算法,WebP是一种有损压缩算法,基于VP8视频格式的帧内编码,并以RIFF作为容器格式。因此,它是一个具有八位色彩深度和以1:2的比例进行色度子采样的亮度-色度模型(YCbCr 4:2:0)的基于块的转换方案。不含内容的情况下,RIFF容器要求只需20字节的开销,依然能保存额外的 元数据(metadata)。WebP图像的边长限制为16383像素。

webp_server_go

webp_server_go的原理就是,当我们的博客请求一张图片并将其转发到了到了webp_server_go时候,它就会将图片进行压缩最后返回webp格式的图片,并且压缩后的webp图片会保存下来方便以后复用,避免了多次压缩。

部署webp_server_go

新建一个存放二进制文件和 config.json 文件的目录(可自定义):

mkdir /opt/webps

cd /opt/webps

下载webp_server_go的二进制文件并赋予权限

wget https://github.com/webp-sh/webp_server_go/releases/download/0.1.0/webp-server-linux-amd64 -O webp-server

chmod +x webp-server

创建 config.json配置文件

{
"HOST": "127.0.0.1",
"PORT": "3333",
"QUALITY": "80",
"IMG_PATH": "/root/.halo",
"EXHAUST_PATH": "/opt/exhasut",
"ALLOWED_TYPES": ["jpg","png","jpeg"],
"ENABLE_AVIF": false
}

参数解释:

  1. HOST:一般不修改。
  2. PORT:webp_server_go 的运行端口。
  3. QUALITY:转换质量,默认为 80%。
  4. IMG_PATH:需要转换图片的文件夹,选择.halo的上一级目录
  5. EXHAUST_PATH:webp格式图片输出路径
  6. ALLOWED_TYPES:需要转换的格式
  7. 默认禁用 AVIF 支持,因为将图像转换为 AVIF 会消耗 CPU

然后将webp_server_go纳入系统管理

创建 service 文件:

vim /etc/systemd/system/webps.service

写入:

[Unit]
Description=WebP Server
Documentation=https://github.com/n0vad3v/webp_server_go
After=nginx.target [Service]
Type=simple
StandardError=journal
AmbientCapabilities=CAP_NET_BIND_SERVICE
WorkingDirectory=/opt/webps
ExecStart=/opt/webps/webp-server --config /opt/webps/config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=3s [Install]
WantedBy=multi-user.target

然后执行systemctl命令运行:

systemctl daemon-reload
systemctl enable webps.service
systemctl start webps.service

查看运行状态:

systemctl status webps.service

若成功运行则会输出以下日志:



至此webp_server_go就安装好啦!

接下来还有最后一步!

Nginx反向代理

由于我的博客使用Nginx做了反向代理,因此需要进行一些配置将图片转发到webp_server_go,在server节点添加如下配置:

location ^~ /upload/ {
proxy_pass http://127.0.0.1:3333;
proxy_set_header X-Real-IP $remote_addr;
proxy_hide_header X-Powered-By;
proxy_set_header HOST $http_host;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
}

最后重载Nginx配置,若是宝塔之类则保存就生效了:

nginx -t 

nginx -s reload

让我们来测一测博客优化了多少吧!

未安装webp_server_go之前:



足足花了13.52秒!这是一个无法容忍的时间

我们再看看安装后的网站速度:

瞬间速度暴涨,仅仅只有1.94秒,花费的时间只有之前的零头,而且可以看到图片格式也都变成了webp格式!

这下可以安心花里胡哨了(●ˇ∀ˇ●)

优化博客Ⅰ-压缩图片为webp格式的更多相关文章

  1. WordPress免费清新响应式博客/杂志/图片三合一主题Nana

    WordPress免费清新响应式博客/杂志/图片三合一主题Nana 一.主题安装须知 1.本主题必须安装文章点击统计插件:WP-PostViews,可以直接在后台插件→安装插件中直接搜索安装官方最新版 ...

  2. python 使用pillow将图片转换为webp格式

    1.webp格式 webp格式是谷歌开发的一种旨在加快图片加载速度的格式,将图片转为webp格式后,体积约为原来的2/3,这可以节省大量的服务器带宽,微信公众号文章里的图片就是这种格式的. 2.使用p ...

  3. OO第二单元优化博客

    OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...

  4. OO第一单元优化博客

    OO第一单元优化博客 第一次作业: 合并同类项+提正系数项+优化系数指数0/1=满分 第二次作业: 初始想法 一开始是想以\(sin(x)​\)和\(cos(x)​\)的指数作为坐标,在图上画出来就可 ...

  5. 使用GitHub-Pages创建博客和图片上传问题解决

    title: 使用GitHub Pages创建博客和图片上传问题解决 date: 2017-10-22 20:44:11 tags: IT 技术 toc: true 搭建博客 博客的搭建过程完全参照小 ...

  6. Hexo博客插入图片的方法

    Hexo博客插入图片的方法 hexo图片blog hexo blog 插入图片的方法总结 hexo 的blog 内容是根据 markdown 文件的内容生成的html文件, 生成的文件全部在 /pub ...

  7. centos8上安装ImageMagick6.9.10并压缩图片生成webp缩略图

    一,ImageMagick的作用: ImageMagick 是一个用来创建.编辑.合成图片的软件. 它可以读取.转换.写入多种格式的图片. 功能包括:图片切割.颜色替换.各种效果的应用, 图片的旋转. ...

  8. 第 15 篇:优化博客功能的细节,提升使用体验—— HelloDjango 系列教程

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在之前的系列教程中,我们已经实现了:文章的发布.展示.评论等功能,可能认真的小伙伴已经 ...

  9. [技术博客]海报图片生成——小程序canvas画布

    目录 背景介绍 canvas简介 代码实现 难点讲解 圆角矩形裁剪失败之PS的妙用 编码不要过硬 对过长的文字进行截取 真机首次生成时字体不对 drawImage只能使用本地图片 背景介绍 目标:利用 ...

  10. 使用Typora写博客,图片即时上传,无需第三方图床-EasyBlogImageForTypora

    背景 习惯使用markdown的人应该都知道Typora这个神器,它非常简洁高效.虽然博客园的在线markdown编辑器也不错,但毕竟是网页版,每次写东西需要登录系统-进后台-找到文章-编辑-保存草稿 ...

随机推荐

  1. C++之OpenCV入门到提高003:矩阵的掩膜(Mask)处理

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第三篇文章.今天这篇文章也不难,主要介绍如何使用 Opencv 对图像进行掩膜处理,提高图像的对比度.在这个过程中,我们可以 ...

  2. 重温c语言之,7天开整,就是随便的写写,第一天

    一:转义字符 \t是一个字符,在printf里面,只占一个位置: 其他什么的抽象字符,用一个'\'+抽象字符就可以出现: \ddd这个是8进制的,可以转成10进制的,之后参考ASCLL码表即可 二:枚 ...

  3. Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解

    title: Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解 date: 2024/11/5 updated: 2024/11/5 author: cmdr ...

  4. base64编码图片二进制数据后直接保存在html文件中

    相关内容: 在markdown编辑器中嵌入base64图片 看到一个帖子,那就是base64编码用来http服务中对二进制文件编码,那么可以不可以直接在html文件中使用base64编码后的字符串来表 ...

  5. 3.11 Linux删除空目录(rmdir命令)

    和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为: [root@localhost ~]# rm ...

  6. Rust编程与项目实战-结构体

    <Rust编程与项目实战>(朱文伟,李建英)[摘要 书评 试读]- 京东图书 (jd.com) 在Rust中,结构体(Struct)是一种自定义数据类型,它允许我们将多个相关的值组合在一起 ...

  7. 2023NOIP A层联测31 T4 民主投票

    2023NOIP A层联测31 T4 民主投票 思维好题. 思路 首先可以设 \(s\) 每个人最多获得的票数,一开始所有点都把自己的票投给自己父亲. 如果一个点的票数超过 \(s\) 了,那么这个点 ...

  8. 为什么通常在发送数据埋点请求的时候要用GIF

    为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片? 能够完成整个 HTTP 请求+响应(尽管不需要响应内容) 触发 GET 请求之后不需要获取和处理数据.服务器也不需要发送 ...

  9. 通过jconsole查看tomcat运行情况的配置方法——基于JDK1.5、Linux(Redhat5.5)、Tomcat6

    由于项目的原因,需要使用jconsole对tomcat进行远程监控,结合网上的资料对配置方法进行了总结. 第一步.配置tomcat 打开%TOMCAT_HOME%/bin下的文件catalina.sh ...

  10. java——棋牌类游戏斗地主(singleddz3.0)

    这是本人最近一段时间写的斗地主的java代码,大体框架都实现了,主要缺少,AI的智能算法. 下载地址http://download.csdn.net/detail/novelly/5695445 im ...