DayMark 是一款 macOS 原生照片日期水印工具:把一整个文件夹的照片导入进来,批量加上类似胶片相机 / 复古数码相机的日期戳,然后直接送进家用照片打印机。
它的核心目标很简单:让「给照片加日期水印并打印出来」这件事变得顺手、稳定、可控。数字导出也保留,但 DayMark 首先是为纸质照片而设计的。
原图字节永不修改。DayMark 只读取原图,渲染带水印的新图用于导出或打印。
功能
- 批量导入照片文件或文件夹
- 支持 macOS / ImageIO 可解码的常见图片格式,例如 HEIC、JPEG、PNG、TIFF、GIF、BMP、ICNS 等
- 自动读取 EXIF 拍摄日期
- EXIF 日期缺失时,可选择跳过或使用文件创建日期
- 每张照片可独立设置水印样式
- 支持多选批量编辑,并显示 mixed value 状态
- 可调整字体、字号、颜色、位置、光晕强度和日期格式
- 内置 5 种日期水印字体,包括 7-segment 风格字体
- 内置胶片感颜色预设,并支持自定义颜色槽
- 支持按照片纸比例裁切,例如 6 × 4、7 × 5、A4、A5 等
- 支持裁切焦点、缩放和 90° 旋转微调
- 支持直接打印,也支持导出到文件夹
- 导出时可尽量保持原格式,或统一输出为 JPG / HEIC
- HEIC / JPG 输出质量可调,PNG 保持无损
- 尽量保留原图色彩空间与位深,包括 10-bit HEIC
独特之处
为打印而生
DayMark 不是一个通用图片编辑器。它关心的是一件更具体的事:照片已经拍好了,现在你想把它们带着日期戳打印出来。
因此它内置了常见照片纸比例,预览会按照目标纸张比例显示裁切结果,打印路径也会按纸面处理横竖图、缩放和留白问题。你不需要先导出、再打开别的软件、再手动排版。
每张照片都有自己的水印配置
很多批处理工具只有一套全局水印设置。DayMark 则允许每张照片保留自己的水印样式:某张照片可以放右下角,另一张可以改成左上角;某一组照片可以批量改颜色或字号。
多选编辑时,如果选中的照片参数不一致,界面会显示 mixed 状态;一旦你输入新值,就会把该字段统一应用到所有选中照片。
胶片日期戳,而不是普通文字叠加
DayMark 的默认效果是复古日期戳:7-segment 字体、胶片红、水印外发光、短边比例字号。字号按照片短边比例计算,而不是固定 px,因此不同尺寸照片打印出来时视觉大小更一致。
原图安全
DayMark 不会改写你的原始照片。导出和打印都走独立渲染流程:
- 读取原图
- 解析 EXIF、方向、日期等信息
- 按需要裁切和旋转
- 绘制日期水印
- 输出新图或送入打印流程
系统要求
- macOS 14 Sonoma 或更高版本
- Xcode 16 或更高版本用于本地构建
DayMark 使用 SwiftUI、AppKit、ImageIO、Core Graphics、CoreText、NSPrintOperation 和 UniformTypeIdentifiers 构建,不依赖第三方库。
使用方式
- 打开 DayMark
- 拖入照片或选择一个照片文件夹
- 在左侧列表选择照片
- 在右侧检查器调整日期水印
- 按需要开启裁切并选择照片纸比例
- 点击「打印」或「导出」
常用快捷键:
| 快捷键 | 功能 |
|---|---|
⌘O |
添加文件 |
⇧⌘O |
添加文件夹 |
⌘P |
打印 |
⌘E |
导出 |
⌘, |
设置 |
⌘⌫ |
从列表移除 |
⇧⌘⌫ |
清空列表 |
S / L |
显示或隐藏左侧列表 |
I / E |
显示或隐藏右侧检查器 |
F |
专注模式 |
W |
缩放窗口 |
构建
open DayMark.xcodeproj
在 Xcode 中选择 DayMark scheme,然后运行即可。
也可以用命令行构建:
xcodebuild -project DayMark.xcodeproj -scheme DayMark -configuration Debug build
项目结构
DayMark/
├── DayMarkApp.swift # App 入口、Settings scene、菜单命令
├── ContentView.swift # 主窗口、工具栏、三栏布局、导出 / 打印流程
├── Models/ # PhotoItem、WatermarkConfig、AppSettings 等
├── Views/ # 照片列表、预览、检查器、设置页
├── Services/ # EXIF、导入、渲染、打印画布、字体注册
└── Fonts/ # 内置日期水印字体
设计原则
- 不修改原图
- 不在主线程做重型图像编解码
- 不引入第三方依赖
- 优先服务照片打印,而不是做一个大而全的编辑器
- 预览、导出、打印尽量使用同一套日期与裁切逻辑,避免「看起来这样、导出来那样」
开源许可
当前仓库尚未声明开源许可证。发布前建议补充 LICENSE 文件。