Files
guizang-social-card-skill/scripts/add-livephoto-maker-note.swift
T
郭浩 f492caeb8b v0.15: Live Photo 生产规则 — 平台限制、拼图版式、长视频处理、发布提醒、可见文案规则
新增 Live Photo 正式能力:单视频、二宫格、三宫格、四宫格、三连拼图、
长视频低成本诊断。增加 references/live-photo-production.md 生产规范、
scripts/ 工具链(contact sheet / .pvt 打包 / Apple metadata)、
validator R8 visual bounds + R9 title gap、文档约束测试。

由 Codex 完成主体实现。
2026-07-01 16:11:34 +08:00

45 lines
1.5 KiB
Swift

import Foundation
import ImageIO
guard CommandLine.arguments.count == 4 else {
fputs("Usage: swift add-livephoto-maker-note.swift <input.jpg> <output.jpg> <asset-id>\n", stderr)
exit(2)
}
let inputURL = URL(fileURLWithPath: CommandLine.arguments[1])
let outputURL = URL(fileURLWithPath: CommandLine.arguments[2])
let assetIdentifier = CommandLine.arguments[3]
guard let source = CGImageSourceCreateWithURL(inputURL as CFURL, nil) else {
fputs("Could not open input image\n", stderr)
exit(1)
}
guard let imageType = CGImageSourceGetType(source) else {
fputs("Could not determine image type\n", stderr)
exit(1)
}
let imageCount = CGImageSourceGetCount(source)
guard let destination = CGImageDestinationCreateWithURL(outputURL as CFURL, imageType, imageCount, nil) else {
fputs("Could not create output image\n", stderr)
exit(1)
}
for index in 0..<imageCount {
var properties = (CGImageSourceCopyPropertiesAtIndex(source, index, nil) as? [String: Any]) ?? [:]
var makerApple = (properties[kCGImagePropertyMakerAppleDictionary as String] as? [String: Any]) ?? [:]
makerApple["17"] = assetIdentifier
properties[kCGImagePropertyMakerAppleDictionary as String] = makerApple
CGImageDestinationAddImageFromSource(destination, source, index, properties as CFDictionary)
}
guard CGImageDestinationFinalize(destination) else {
fputs("Could not finalize output image\n", stderr)
exit(1)
}
print("Wrote Apple MakerNote asset identifier: \(assetIdentifier)")