30 个版本
2.0.0-preview8 | 2023年9月26日 |
---|---|
2.0.0-preview5 | 2023年4月3日 |
2.0.0-preview4 | 2023年1月6日 |
2.0.0-preview3 | 2022年12月23日 |
1.4.10-rc50 | 2020年7月5日 |
126 in 图像
4,151 星 & 67 关注者
1KB
以惊人的速度优化图像
imageflow_tool
是一个命令行工具,用于实验、运行批处理作业、JSON作业或在需要进程隔离时使用。比 ImageMagick 快 17 倍。还能以更高的质量生成更小的文件。libimageflow
适用于从您的编程语言直接(进程内)使用。请参阅我们的 Node 绑定、Go 绑定、Scala 绑定、Elixir 绑定 或 .NET 绑定。如果我们还没有为您的高级语言提供绑定,请考虑花费一天时间添加它们。Imageflow 有一个简单的与 C 兼容的 ABI,只需实现绑定所需的 4 个方法。- Imageflow.Server 是一个跨平台的软件,能够在图像传输过程中(例如:
/bucket/img.jpg?w=200
)直接从 HTML 中使用。源图像可以存储在 Blob 存储中、另一个服务器上或文件系统中。它是一个可用于生产的服务器,具有出色的混合磁盘缓存、支持 Azure 和 Amazon Blob 存储,并且可以轻松定制。您可以通过 Docker、虚拟机或任何云主机轻松部署它。它还与 ImageResizer API 兼容,这对于过去十年中集成到超过一千个不同的 CMS 和应用程序中的 ImageResizer 来说是很有用的。
打开问题 以分享想法、反馈或提出问题。我们相信以反馈为导向的设计,并使现实世界的使用流程更加顺畅是制作出优秀产品的最快方式。
libimageflow 和 imageflow_tool 作为 自包含的二进制文件 可用于 Windows、Ubuntu 和 Mac。我们还提供 Docker 镜像 用于 Linux(需要 glibc 和 OpenSSL)。
我们感谢在 Kickstarter 上支持我们的赞助商 和 许多 ImageResizer 的支持者 使这个项目成为现实。如果您需要 AGPLv3 许可证用于商业用途,请访问 Imageresizing.net。
从 imageflow_tool 开始(推荐)
imageflow_tool examples --generate
- 创建一个包含 JSON 作业和调用脚本的 examples 目录。
您可以使用与 ImageResizer 4 查询字符串 兼容的命令字符串。
imageflow_tool v1/查询字符串--输入来源.JPG--输出缩略图.JPG--命令"宽度=50&高度=50&模式=裁剪&格式=jpg"
或者提交一个 JSON 作业文件。JSON 作业可以有多个输入和输出,并且可以表示任何类型的操作图。
以下是从示例作业文件生成图像多个大小的示例
imageflow_tool v1/build --json examples/export_4_sizes/export_4_sizes.json
--in waterhouse.jpg
--out 1 waterhouse_w1600.jpg
2 waterhouse_w1200.jpg
3 waterhouse_w800.jpg
4 waterhouse_w400.jpg
--response operation_result.json
默认情况下,imageflow_tool 将 JSON 响应打印到 stdout。您可以使用 --response
将其写入磁盘。
--debug-package
将创建一个 .zip 文件,用于重现具有 v1/build
和 v1/querystring
的有问题的行为。请提交错误报告;我们尽力让它变得简单。
使用 Imageflow.Server 进行动态图像处理
注意:由于底层 Web 框架(iron)已被弃用且不再安全,因此已删除 imageflow_server。在过去几年中,我们建议迁移到可用于生产的 Imageflow.Server 产品,它还提供 Docker 部署(但我们建议您自己的 Dockerfile 以允许配置)
现在您可以从 HTML 中编辑图像...并且使用 srcset 而无忧。
<img src="http://localhost:39876/demo_images/u3.jpg?w=300" />
<img src="" srcset=" http://localhost:39876/demo_images/u3.jpg?w=300 300w
http://localhost:39876/demo_images/u3.jpg?w=800 800w
http://localhost:39876/demo_images/u3.jpg?w=1600 1600w" />
超越演示
您可能希望将各种图像源位置挂载到前缀。`--mount
` 命令解析冒号(`:
`)分隔的参数列表。第一个是您将在 URL 中使用的前缀(例如 `http://localhost:39876/prefix/
`。第二个是引擎名称。其余参数将发送到引擎。
示例
`
"--mount
`"`/img/:ir4_local:C:\inetpub\wwwroot\images- `
--mount "/proxyimg/:ir4_http:https:://myotherserver.com/imagefolder/"
`(注意冒号的转义) `
"--mount
`"`/cachedstaticproxy/:permacache_proxy:https:://othersite.com`
--mount
`"/githubproxy/:permacache_proxy_guess_content_types:https://raw.github.com/because/it/doesnt/support/content/types"`
--mount
`"/static/":static:./assets"
使用您语言的libimageflow
- 可以在https://github.com/imazen/imageflow-dotnet找到.NET Standard绑定
- Node绑定可在https://github.com/imazen/imageflow-node找到
- Ruby - 基本绑定可在bindings/ruby/找到
- C和C++接口是稳定的 - 使用bindings/headers/imageflow_default.h或每个版本提供的许多其他约定之一。
- Rust - Imageflow是用Rust编写的,因此您可以使用
imageflow_core
crate。 - 其他语言 - 使用您语言的外部函数接口(FFI)绑定生成工具,并给它最喜欢的头文件。
您可能会发现imageflow_tool
对于您的需求来说已经足够快了。
本项目内的Crates
- imageflow_abi - libimageflow/imageflow.dll的稳定API。libimageflow的头文件位于
bindings/headers
- imageflow_tool - 命令行工具
- imageflow_server - HTTP服务器
- c_components - 包含C源代码的rust crate
- c_components/tests - C组件的测试
- imageflow_types - 大多数crate使用的共享类型,具有JSON序列化
- imageflow_helpers - 常用辅助函数和工具
- imageflow_riapi - RIAPI和ImageResizer4兼容性解析/布局
- imageflow_core - 主要库和执行引擎
已知缺陷和缺少功能(截至2020年5月)
缺陷
- imageflow_server尚未公开JSON API。
- 尚未进行模糊测试或第三方审计。
缺少的功能
- 模糊处理。
延迟的功能
- 作业成本预测(延迟 - 社区没有兴趣)
在没有Docker的情况下从源码构建
您需要更多的东西来编译Imageflow,因为它有几个C依赖项。
- 安装平台特定的先决条件(请找到下面的正确部分)。
- 克隆并进入此存储库,例如:
git clone git@github.com:imazen/imageflow.git && cd imageflow
)
如果您在任一平台上使用bash
,则应该能够使用build.sh
./build.sh clean
- 清理./build.sh test
- 运行所有测试./build.sh debug
- 生成慢速调试二进制文件./build.sh release
- 生成发布二进制文件./build.sh install
- 将发布二进制文件安装到/usr/local
(必须先运行`./build.sh release`)./build.sh uninstall
- 卸载发布二进制文件
build.sh
将二进制文件放置在 ./artifacts/ 目录
中。
如果您使用的是 Windows 系统,请在由 win_enter_env.bat
创建的窗口中运行 build 命令。
您还可以直接使用 cargo
进行构建,尽管这样会将二进制文件放置在 ./target/release
中。* 使用 cargo test --all
在调试(慢速)模式下测试 Imageflow * 使用 cargo build --package imageflow_abi --release
编译 libimageflow/imageflow.dll
* 使用 cargo build --package imageflow_tool --release
编译 imageflow_tool(.exe)
* 使用 cargo build --all --release
在发布模式下编译所有内容 * 使用 cargo doc --no-deps --all --release
生成文档。
使用 Docker 从源代码构建
注意,我们不再使用 Docker 容器进行 CI,因此此方法已过时。
- 安装 Docker
- 在 bash 会话中运行(Docker + Windows WSL、macOS 或 Linux)
-
git clone git@github.com:imazen/imageflow.git cd imageflow ./build_via_docker.sh debug
这将创建特定于使用的 Docker 图像的缓存,位于 ~/.docker_imageflow_caches
中。实例将是临时的;唯一的状态将存储在缓存中。
官方 Dockerfile(官方 Dockerfile)也是获取更详细的设置步骤的好地方,因为我们没有列出设置
- Valgrind(常见版本会破坏 openssl;您可能需要从源代码构建)
- 代码覆盖率
- 绑定。
Linux 前提条件
(在 Ubuntu 20.04 和 22.04 上进行测试。)
#Install Rust by running
`curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable`
#Ensure build tools are installed (git, curl, wget, gcc, g++, nasm, pkg-config, openssl, ca-certificates)
`sudo apt-get install git wget curl build-essential pkg-config libssl-dev libpng-dev nasm `
Mac OS 前提条件
- 如果您还没有安装,请安装 XCode 命令行工具
- 如果您还没有安装,请安装 Homebrew
- 安装 nasm、pkg-config 和 wget
brew install nasm pkg-config wget
- 安装 Rust
Windows WSL (Ubuntu) 前提条件
- 从 Windows 商店安装 Ubuntu
- 运行 Ubuntu 22.04 并创建您的用户名/密码
sudo apt-get update
更新可用的软件包。- 通过运行以下命令安装 Rust:
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable
- 确保已安装构建工具(git、curl、wget、gcc、g++、nasm、pkg-config、openssl、ca-certificates)
sudo apt-get install git wget curl build-essential pkg-config libssl-dev libpng-dev nasm
- (可选)若要使用图形文本编辑器,请将imageflow下载到“Windows”目录,然后在Ubuntu中将其映射到位置。例如,如果您将imageflow克隆到Documents/imageflow,则运行:
ln -s /mnt/c/Users/[YourWindowsUserName]/Documents/imageflow ~/win_imageflow
- 关闭并重新打开Ubuntu
Windows 10 先决条件
- 安装Visual Studio 2017 Build Tools(单独或作为VS组件)
- 安装Git 64位。
- 以管理员身份运行NASM 64位安装程序 - 它不会提示。
- 如果您想使用64位Imageflow,请安装Rust 64位;如果您不需要64位,请安装Rust 32位。将工具链
stable
作为默认,并确认将其添加到PATH
。 - 打开命令行并切换到该存储库的根目录
- 编辑
ci/wintools/SETUP_PATH.bat
以确保rust/cargo、nasm、git和Git/mingw64/bin都包含在%PATH%
中。 - 运行
win_enter_env.bat
以启动一个子shell(如果您想进行32位构建,请编辑它) - 所有构建命令都应该在子shell中运行。运行
cmd.exe /c "ci\wintools\win_verify_tools.bat"
以检查工具是否存在。
如何学习网络图像处理?
首先,阅读高性能图像以了解背景。
关于这个主题的优秀教科书并不多。以下是我在个人书架上的一些书籍。在这之间(以及维基百科)我能够整理出大约60%所需的知识;其余的都是通过阅读许多流行的图像处理库的源代码获得的。
我会从头到尾阅读数字图像处理原理:核心算法,然后是数字图像扭曲。维基百科也是一个有用的参考,尽管相关页面没有链接或分类在一起 - 使用特定的搜索词,如"双线性插值"和"Lab颜色空间"。
我找到了OpenCV、LibGD、FreeImage、Libvips、Pixman、Cairo、ImageMagick、stb_image、Skia和FrameWave的源代码,这些源代码对于理解现实世界的实现和考虑非常有用。大多数教科书假设无限平面,忽略了偏移量错误、浮点数限制、色彩空间精度和有限区域内的操作对称性。我无法推荐任何教科书作为准确的参考,只能作为概念性起点。 我在创建图像库时做了关于需要注意的问题的一些笔记。
此外,请记住,计算机视觉与图像创建非常不同。在计算机视觉中,重采样精度几乎无关紧要,例如。但在图像创建中,你将图像提供给摄影师,他们的视觉感知能力比普通开发者强得多。产生的图像将与CSS和其他图像并排放置,最不重要的位的不准确度非常明显。你在与Lightroom竞争;与产生视觉完美结果的离线工具竞争。如果摄影师觉得这正在破坏他们的作品,他们将丢弃最终用户软件。