前言

https://github.com/libvips/libvips

libvips:低内存需求的快速图像处理库。它可以完成大约 300 种操作,包括算术、直方图、卷积、形态运算、频域滤波、色彩、重采样、统计等。它还支持各种图片格式,包括 JPEG、JPEG2000、JPEG-XL、TIFF、PNG、WebP、HEIC、AVIF、FITS、Matlab、OpenEXR、PDF、SVG、HDR、PPM / PGM / PFM、CSV、GIF、Analyze、NIfTI、DeepZoom、OpenSlide。

https://github.com/libvips/build-win64-mxe

build-win64-mxe:基于 MXE 环境,libvips 及其所有依赖项用于四种 windows 架构的交叉编译脚本。

* 受专利限制影响,HEVC 相关依赖项不包含在预构建的二进制文件中。本文将介绍如何自行编译包含 HEVC 相关依赖的 win 架构 libvips 二进制文件。

环境部署

* 编译 libvips 所需的依赖项众多,如果你有一台配置 4C8G 以上、空闲磁盘空间 15GB 以上运行 Linux 发布版的 vps,则可以跳过此步骤。

参考资料:https://docs.microsoft.com/zh-cn/windows/wsl/

WSL 可以在 Windows 平台上原样运行 Linux 环境子系统,且不会产生传统虚拟机或双启动设置开销。

使用简化命令安装 WSL

打开 PowerShell(或 Windows 命令提示符)并输入:

wsl --install

运行此简化安装命令,需要使用最新版本 Windows(内部版本 20262+)。

检查 Windows 版本及内部版本号:选择 Windows 徽标键 + R,然后键入winver,选择“确定”。
如果你正在运行旧版 Windows 可以参考此文档手动安装 wsl:https://docs.microsoft.com/zh-cn/windows/wsl/install-manual

运行 --install 命令将执行以下操作:

  • 启用可选的 WSL 和虚拟机平台组件
  • 下载并安装最新 Linux 内核
  • 将 WSL 2 设置为默认值
  • 下载并安装 Ubuntu Linux 发行版

在此安装过程中,你将需要重启计算机。

安装完成后,需要配置 Linux 发行版的用户名和密码。用户名不要使用大写字母,且它们与 Windows 用户名无关。

安装 Windows Terminal

Windows Terminal 支持多选项卡、拥有更完善的 Unicode 和 UTF-8 字符显示。其在 Windows 11 中应用名可能显示为终端。

每当安装新的 WSL Linux 发行版时,都会在 Windows Terminal 中为其创建一个新实例,配合使用时非常方便!

在 Microsoft Store 中搜索 Windows Terminal 即可快速安装。

组件部署

Docker 安装

编译过程需要运行符合 OCI 标准的容器,此处以 Docker 安装为例。您也可以选择安装 Podman。

  1. 卸载旧版本 Docker,全新安装的 Ubuntu 可以跳过此步骤
    sudo apt-get remove docker docker-engine docker.io containerd runc
  2. 允许 apt 通过 HTTPS 使用仓库
    sudo apt-get update
    sudo apt-get install \
     ca-certificates \
     curl \
     gnupg \
     lsb-release
  3. 添加 Docker 官方 GPG 密钥
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  4. 设置 Docker 仓库
    echo \
     "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. 安装最新版本的 Docker
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  6. 运行 hello-world 映像(image)验证 Docker 引擎安装
    sudo docker run hello-world

    注意:wsl 需要通过此命令手动启动 docker 服务

    service docker start

    其他 Linux 发行版请参考此文档安装 Docker:https://docs.docker.com/engine/install/centos/

配置代理

编译过程需要多次访问 Github 仓库等海外链接,如果你的网络在中国大陆可能遇到访问不畅的问题,可以通过配置代理解决。

  • 配置 Ubuntu 代理
export http_proxy=http://192.168.16.16:7890
export https_proxy=http://192.168.16.16:7890
  • 配置 Docker 容器代理

在 Docker 17.07 以上版本可以进行以下配置:

sudo mkdir ~/.docker
sudo vim ~/.docker/config.json
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.16.16:7890",
     "httpsProxy": "http://192.168.16.16:7890"
   }
 }
}

Docker 代理服务器设置文档:https://docs.docker.com/network/proxy/

拉取编译脚本仓库

  1. 建议切换到 root 用户,防止运行脚本时权限不足。使用命令 sudo -i,输入当前用户密码即可切换。随时可以使用命令 logout 退出 root 用户。

  2. 创建编译目录

    sudo mkdir /home/user && sudo cd /home/user

    此处你也可以选择其他目录

  3. 拉取最新 build-win64-mxe 仓库

    sudo wget https://github.com/libvips/build-win64-mxe/archive/refs/heads/master.zip
    sudo apt-get install unzip
    sudo unzip master.zip
  4. 进入编译目录

    cd build-win64-mxe-master

    在 Windows 文件资源管理器中打开 WSL 当前目录:使用非 root 用户输入命令 explorer.exe .
    注意不要遗漏命令末尾的句点。

编译

  1. 查看帮助

    在编译目录下,输入 bash ./build.sh -h,即可查看帮助选项。

  2. 编译示例:最新发布版、全部(all)依赖项、附带 HEVC 依赖、x64 架构、动态链接库

    bash ./build.sh --with-hevc all x86_64 shared
  3. 编译过程大概需要 2-4 小时,完成后可以在 .../build-win64-mxe-master/build 目录下找到打包好的 zip 文件。名称一般为 vips-dev-w64-all-a.b.c-hevc-shared.zip

  • 附录:build.sh 帮助信息
Usage: build.sh [OPTIONS] [DEPS] [ARCH] [TYPE] \\ 使用方法
Build Windows binaries for libvips in a container
\\ 在容器中为 libvips 构建 Windows 二进制可执行文件

OPTIONS: 选项
        --help                  显示帮助信息后退出
        -c, --commit <COMMIT>   用于构建 libvips 的提交(commit)
        -r, --ref <REF>         用于构建 libvips 的分支(branch)或标签(tag)
        --nightly               使用最新 libvips 代码构建(-r master 的别名)
        --with-hevc             构建带有 HEVC 相关依赖的文件
        --with-debug            构建带有调试(Debug)符号的文件
        --without-llvm          构建时使用 GCC 取代 llvm
        --without-mozjpeg       构建依赖时使用 libjpeg-turbo 取代 MozJPEG
        --without-zlib-ng       构建依赖时使用 (vanilla-)zlib 取代 zlib-ng

DEPS: 依赖
        The group of dependencies to build libvips with,
            defaults to 'web'
        Possible values are:
        \\ 构建 libvips 使用的依赖集,默认为 web,可选项有:
            - web
            - all

ARCH: 架构
        The Windows architecture to target,
            defaults to 'x86_64'
        Possible values are:
        \\ 构建目标的 Windows 架构,默认为 x86_64,可选项有:
            - x86_64
            - i686
            - aarch64 (disables --without-llvm)
            - armv7 (disables --without-llvm)

TYPE: 类型
        Specifies the type of binary to be created,
            defaults to 'shared'
        Possible values are:
        \\ 指定二进制文件的链接库类型,默认为 shared,可选项有:
            - shared
            - static
最后修改:2022 年 07 月 01 日 10 : 46 PM