# JarkViewer-RUST **Repository Path**: vicoproplus/JarkViewer-RUST ## Basic Information - **Project Name**: JarkViewer-RUST - **Description**: 用rust重构的跨平台看图软件 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: tauri - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-03 - **Last Updated**: 2026-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

JarkViewer

JarkViewer 看图

GitHub release Download Sourceforge License Platform DeepWiki DeepWiki

中文 | English

**JarkViewer** 是一款简约且飞快的看图软件,支持从 JPEG 到 AVIF、HEIC 和 JPEG XL 等最新格式的超多图像格式!即使是 iOS 和 Android 的实况照片也能流畅浏览。 ![Preview](preview.png) ## ✨ 操作方式 1. **⏭ 切换图片**:窗口左右边缘 `单击/滚轮` / `左/右` 方向键 2. **🔍 放大缩小**:窗口中间滚轮 / `上/下`方向键 3. **🔄 旋转图片**:窗口左上角或右上角 `单击/滚轮` / `Q/E` 键 4. **🖱️ 平移图片**:鼠标拖动 / `W/A/S/D` 键 5. **ℹ️ 图像信息**:点击滚轮 / `TAB / I` 键 6. **🖥️ 切换全屏**:双击窗口 / `F` 键 / `F11` 键 7. **📋 复制图像**:`Ctrl + C` 8. **🖨 打印图像**:窗口左下角 `单击` / `Ctrl + P` 9. **🎞️ 逐帧浏览**:窗口顶部控制栏 / `J:上帧` `K:暂停/继续` `L:下帧` 10. **⌨️ 空格按键**:若当前是静态图则切换下一张,若是动图则暂停/播放 11. **✂️ 分解动图**:`Ctrl + S` 将动图每一帧另存为单独的静态图像文件 --- ## 🖨 打印/编辑 进入打印功能可以简单调整图像的 `对比度`、`亮度`、`是否反色` 等等,然后再决定 **另存为** 其他图像文件或 **继续打印**。 还可以选择颜色模式:`彩色`、`黑白`、`黑白文档`、`黑白抖动`。 1. **黑白文档**: 均衡全图亮度,突出字迹,避免局部阴影的观感影响,适合打印拍摄的文字纸张图像。 2. **黑白抖动**: 使用纯黑像素的分布密度模拟像素灰度值。此模式适合针式打印机和热敏打印机,也能打印出较好的图像效果。 ![printerPreview](printerPreview.png) ## 🗃️ 特性 1. 🍀 全静态链接编译,原生绿色单文件 2. ✅ 自动记忆上次窗口位置/尺寸 3. ♟️ 图片透明区域使用国际象棋棋盘背景 4. 📖 支持读取开源AI生成图像的提示词信息【StableDiffusion WebUI、ComfyUI输出的图像一般都会内嵌提示词参数或工作流JSON,⚠ 若图像经过各大网络平台传播重新编码,该信息可能会被移除】 ## 📂 格式支持 - **静态**:`apng avif avifs blp bmp dib exr gif hdr heic heif ico icon jfif jp2 jpe jpeg jpg jxl jxr livp pbm pfm pgm pic png pnm ppm psd pxm qoi ras sr svg tga tif tiff webp` - **动态**:`gif webp png apng jxl avif` - **实况**:`livp(IOS LivePhoto) jpg/heic/heif(Android MicroVideo/MotionPhoto)` *⚠️ 暂不支持播放声音* - **RAW**:`3fr ari arw bay cap cr2 cr3 crw dcr dcs dng drf eip erf fff gpr iiq k25 kdc mdc mef mos mrw nef nrw orf pef ptx r3d raf raw rw2 rwl rwz sr2 srf srw x3f` ## 👋 快速上手 > ⚠️ 注意:若启动时提示缺失 `VCOMP140.DLL` 等,请下载并安装 VC++运行库: [vc_redist.x64.exe](https://aka.ms/vs/18/release/vc_redist.x64.exe) 。自 `v1.35` 起,**不再依赖** `VC++运行库`,且可在 `PE` 环境直接运行。如果仍遇到相关错误,请确保下载了正确版本的程序。 ## 🖥️ 系统兼容 ✅ 支持 `64位` `Windows 10 ~ 11` 系统。(项目使用 `MSVC v145` 生成工具只保证兼容 `Win 10+`) ⚠️ 目前实测可以在 `64位` `Win 8/8.1` 稳定运行,但不保证未来版本也能继续兼容。 ❌ 不兼容 `32位` `Win 7` 及以下系统。 --- ## 🛠️ 对于开发者 下载仓库源码时,只需下载最新提交,历史提交存在较多占空间的冗余文件。 ```sh git clone git@github.com:jark006/JarkViewer.git --depth=50 ``` **⭐ 建议访问本项目的 [DeepWiki](https://deepwiki.com/jark006/JarkViewer) 或 [Zread](https://zread.ai/jark006/JarkViewer) 页面,有更详细的说明和开发相关的内容,可快速理解各个模块的实现逻辑。** > ⚠️ **架构说明(2026-08-05 起)**:主程序入口已从 C++/Win32/Direct3D 迁移到 **Rust + wgpu**。C++ 主程序(`src/main.cpp`、`D3D11App` 等)已退役归档。当前 Rust 端 `rust/jarkviewer` 使用 winit 创建窗口、wgpu 渲染、纯 Rust 解码矩阵;视频 / LivePhoto 通过默认的 `video` 特性(ffmpeg-next 链接 `JarkViewer/libffmpeg` 静态库)解码,BLP 等长尾格式通过 `cpp-ffi` 特性以 C++ 桥接垫片形态保留。 > > 🧩 **另有一套实验性 Tauri + Vue 四区域 GUI**(`src-tauri` + `src-front`):后端复用同一个 Rust 解码核心(`rust/jarkviewer` crate),前端用 Vue 3 渲染四区域(顶栏 / 侧边目录树 / 画布 / 缩略图条 / 状态栏),通过 Tauri 2 IPC 调用后端命令。该 GUI 的规划见 `docs/superpowers/specs/2026-08-06-tauri-vue-four-region-gui-design.md`。两条构建链路并存:`buildRelease.ps1` 产出单文件 Rust 版,`buildTauri.ps1` 产出 Tauri 外壳版。 ### 构建(Rust 主程序) 需要安装 [Rust 工具链](https://www.rust-lang.org/tools/install)(stable,x64)。视频特性(默认开启)依赖 `JarkViewer/libffmpeg` 预置的 FFmpeg 静态库与 `libclang.dll`(bindgen 用),`buildRelease.ps1` 会自动探测并注入环境。 ```sh # Release x64 构建(默认开启 video 特性:FFmpeg 视频/LivePhoto 解码) cd rust/jarkviewer cargo build --release # 产物:rust/jarkviewer/target/release/jarkviewer.exe # (可选)启用其他纯 Rust 解码特性 cargo build --release --features avif # AVIF(底层 aom,需 C 工具链 + nasm) cargo build --release --features jxl # JPEG XL cargo build --release --features exr # OpenEXR cargo build --release --features heif # HEIC/HEIF(heif-rs,需预置 libheif + libclang) # (可选)启用 C++ 长尾格式桥接(仅 BLP,需 MSVC cl,自包含不依赖 OpenCV) cargo build --release --features cpp-ffi ``` 发布脚本 `buildRelease.ps1`(仓库根)会自动执行 `cargo build --release`、跑 `cargo check`/`cargo test`、运行损坏图冒烟验证,并将产物与 FFmpeg 运行时 DLL 复制到 `x64/Release/JarkViewer.exe`。 ### 构建(Tauri + Vue 四区域 GUI) 需要安装 [bun](https://bun.sh)(或 npm)、[Rust 工具链](https://www.rust-lang.org/tools/install)、MSVC 工具链与 WebView2 运行时(Tauri 2 要求)。 ```sh # 一键构建前端(含 bun run test)+ Tauri 打包(msi / nsis) ./buildTauri.ps1 # 产物:src-tauri/target/release/bundle/ # 开发模式(HMR 热更新:自动编译 Rust 后端 + 启动 Vite 前端 dev server) cd src-tauri && cargo tauri dev # 前端在 http://localhost:5173/ ,后端 Tauri 窗口随 Rust 代码改动自动重编译 ``` > ⚠️ 开发模式请用 `cargo tauri dev`(Tauri CLI 通过 cargo 插件 `cargo-tauri` 提供,而非 `bun x tauri`)。`src-tauri` 目录下没有 `package.json`,`bun x tauri` 会因找不到可执行包而报错。 > > 若只需单独启动前端进行调试,可在 `src-front` 下执行 `bun run dev`(此时 `cargo tauri dev` 会因 5173 端口已被占用而跳过前端步骤,仅编译运行后端)。 前端位于 `src-front`(Vue 3 + TypeScript + Vite)。`tauri.conf.json` 的 `beforeDevCommand` / `beforeBuildCommand` 分别指向 `src-tauri/dev.bat` 与 `src-tauri/build.bat`(内部调用 `bun run dev` / `bun run build`),因此 `cargo tauri dev` / `cargo tauri build` 会自动触发前端启动与构建。常用命令(在 `src-front` 下执行):`bun run dev`(前端开发)、`bun run build`(类型检查 + 构建)、`bun run test`(Vitest 矩阵等价单测)、`bun run typecheck`(仅类型检查)。 ### 解码能力构成 - **纯 Rust 解码**:JPEG XL、WebP、PNG/APNG、GIF、JPEG、BMP、TGA、ICO、EXR、HDR、PPM/PGM/PBM/PFM、QOI、SVG、PSD、DDS、JPEG2000、OpenEXR、TIFF、RAW(rawloader)等。 - **默认开启(video)**:视频帧 / LivePhoto 经 `ffmpeg-next`(feature=video,默认开启)链接 `JarkViewer/libffmpeg` 解码。 - **可选桥接(cpp-ffi)**:仅 BLP 由 C++ 垫片(自包含,不依赖 OpenCV)经 FFI 桥接。 - **可选原生(avif)**:AVIF 经 `avif-decode`(底层 aom,需 C 工具链 + nasm)。 - **可选原生(heif)**:HEIC/HEIF 可通过 `heif-rs` 直接解码,无需 C++ 垫片。 ### 缩略图外壳扩展 `JarkThumbnailProvider/` 仍是独立的 C++ COM 工程(Windows 资源管理器缩略图),使用其自带的 `JarkThumbnailProvider.vcxproj` 构建,与主程序 Rust 构建解耦。 --- ## 📜 License 本项目采用 GPL-3.0 许可证开放源代码。了解更多内容,请查看 [LICENSE 文件](https://github.com/jark006/JarkViewer/blob/main/LICENSE)。