能将图片转为WebP格式的WebP Server Go

2024-05-05 07:04
文章标签 go 图片 格式 server 转为 webp

本文主要是介绍能将图片转为WebP格式的WebP Server Go,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

本文完成于 2023 年 11 月

之前老苏介绍过 webp2jpg-online,可以将 webp 格式的图片,转为 jpg 等,今天介绍的 WebP Server Go 是将 jpg 等转为 webp 格式

文章传送门:多功能图片转换器webp2jpg-online

什么是 WebP ?

WebP 它是由 Google 开发的一种现代图像格式,旨在提供更高的图像压缩效率和更小的文件大小,同时保持良好的图像质量。

PNG 相比,WebP 无损图像的尺寸小 26%。在同等 SSIM 质量指数下,WebP 有损图像比同类 JPEG 图像小 25-34%。【数据来自官网 https://webp.sh/#/2 】

什么是 WebP Server Go ?

WebP Server Go 是一款开箱即用的 WebP 服务器。 该项目是用 Go 写的 WebP 服务,无需二次开发就能实现将 JPGPNGBMPSVG 等格式的图片,转化成 WebP 格式的服务,能够有效地减小图片体积、节省带宽、提升图片加载速度。

目前支持的图像格式:JPEGPNGBMPGIFSVGHEICNEF

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 webp-server-go ,选择第一个 webpsh/webp-server-go,版本选择 latest

本文写作时, latest 版本对应为 0.10.2

docker 文件夹中,创建一个新文件夹 webp-server,并在其中建三个子文件夹 data

文件夹装载路径说明
docker/webp-server/pics/opt/pics图片目录
docker/webp-server/exhaust/opt/exhaust图片缓存目录
docker/webp-server/metadata/opt/metadata图片元数据缓存目录

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
33333333

默认没有对外暴露端口

需要点 + 号自行添加

环境

可变
MALLOC_ARENA_MAX设为 1

更多的环境变量请参考官方的文档:https://docs.webp.sh/usage/configuration/

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 webp-server 和 子目录
mkdir -p /volume1/docker/webp-server/{exhaust,metadata,pics}# 进入 webp-server 目录
cd /volume1/docker/webp-server# 运行容器
docker run -d \--restart always \--name webp-server \-p 3333:3333 \-v $(pwd)/pics:/opt/pics \-v $(pwd)/exhaust:/opt/exhaust \-v $(pwd)/metadata:/opt/metadata \-e MALLOC_ARENA_MAX='1' \webpsh/webp-server-go

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'services:webp:image: webpsh/webp-server-go# image: ghcr.io/webp-sh/webp_server_gocontainer_name: webp-serverrestart: alwaysports:-  3333:3333volumes:- ./pics:/opt/pics- ./exhaust:/opt/exhaust- ./metadata:/opt/metadataenvironment:- MALLOC_ARENA_MAX=1

然后执行下面的命令

# 新建文件夹 webp-server 和 子目录
mkdir -p /volume1/docker/webp-server/{exhaust,metadata,pics}# 进入 webp-server 目录
cd /volume1/docker/webp-server# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d

运行

如果在浏览器中直接输入 http://群晖IP:3333 会显示错误 File extension not allowed! /

正确的使用方式是:

  1. 上传文件到 pics 目录

  1. 打开链接时,带上图片名称,例如:http://群晖IP:3333/00.png

  1. 另存图片,默认扩展名已经是 webp,虽然 URL 没变,但实际上已经是 image/webp格式

  2. 文件大小比对,差异还是很明显的

这个文件在缓存目录中是能找到的

高级玩法

启用环境变量 ENABLE_EXTRA_PARAMS,将其设置为 true

现在就可以在 URL 中通过添加 widthheight 来控制图片的大小了,例如 http://群晖IP:3333/00.png?width=300&height=300

参考文档

webp-sh/webp_server_go: Go version of WebP Server. A tool that will serve your JPG/PNG/BMP/SVGs as WebP/AVIF format with compression, on-the-fly.
地址:https://github.com/webp-sh/webp_server_go

Introduction | WebP Server Documentation
地址:https://docs.webp.sh/

WebP Server
地址:https://webp.sh

这篇关于能将图片转为WebP格式的WebP Server Go的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961069

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中