Stiva de editari XMP
Photo2Mac e nedistructiv: fiecare ajustare e un element din
EditStack, randat live de Core Image. La Save, scrie
pixelii randati si incorporeaza EditStack-ul ca
metadata XMP in fisier. Redeschizi acelasi fisier in Photo2Mac
si stiva revine ca s-o editezi mai departe; alte aplicatii vad doar
pixelii randati.
Mai jos e formatul pe disc, ca sa-l poti citi sau produce din alte
tool-uri.
Namespace
- URI:
http://ns.photo2mac.cremenescu.ro/1.0/
- Prefix:
p2m
- Property:
p2m:editStack (un string UTF-8 cu JSON)
Aceeasi proprietate e scrisa in JPEG (APP1), PNG (iTXt
XML:com.adobe.xmp), HEIC (meta box) si TIFF (tag 700)
prin ImageIO de la Apple.
JSON-ul EditStack
{
"rotateDegrees": 0, // sens orar, pas 0.01°
"flipHorizontal": false,
"flipVertical": false,
"crop": null, // sau { x, y, width, height } normalizate 0..1
"adjustments": {
"brightness": 0.0, // -1 .. 1 -> CI -0.5 .. 0.5
"contrast": 0.0, // -1 .. 1 -> CI 0.5 .. 1.5
"saturation": 0.0, // -1 .. 1 -> CI 0.0 .. 2.0
"exposure": 0.0 // -3 .. 3 EV (CIExposureAdjust)
}
}
Ordinea de randare e fixa:
flipH → flipV → rotate → crop → adjustments —
geometria intai (ca crop sa lucreze pe cadrul rotit pe
care il vezi), ajustarile de pixel la final.
Se mai scrie: tag-uri standard
Ca sa vada orice reader XMP — Inspector-ul din Preview,
Metapho, Adobe Bridge, exiftool, mdls, Get Info
din Finder — ce s-a intamplat cu fisierul, langa
p2m:editStack se scriu si:
xmp:CreatorTool — ex. Photo2Mac 0.1.0
tiff:ImageDescription — rezumat in engleza al stivei
dc:description — acelasi rezumat
Toate trei sunt mereu in engleza, indiferent de
limba UI-ului Photo2Mac — metadata din fisier e citita de tool-uri
si oameni de pretutindeni, deci ramane locale-independent.
Exemplu: rotire + crop
Indreptare 2.5° in sens antiorar, apoi crop la 90%×80%
central:
{
"rotateDegrees": -2.5,
"flipHorizontal": false,
"flipVertical": false,
"crop": { "x": 0.05, "y": 0.10, "width": 0.90, "height": 0.80 },
"adjustments": {
"brightness": 0, "contrast": 0, "saturation": 0, "exposure": 0
}
}
tiff:ImageDescription corespunzator:
Photo2Mac 0.1.0 — rotate -2.50°, crop 90%×80% at (5%, 10%)
Inspectare din linia de comanda
Cu exiftool:
# Toate campurile XMP, inclusiv p2m
exiftool -XMP:all -G photo.jpg
# Doar JSON-ul cu stiva de editari
exiftool -XMP-p2m:editStack -b photo.jpg | jq
# Rezumat human-readable
exiftool -ImageDescription -CreatorTool photo.jpg
Referinta completa, inclusiv politica de stabilitate
(1.0/ din URI = versiunea de schema): docs/XMP.md din repo.
Intrebari frecvente
Photo2Mac este gratuit?
Da. Photo2Mac este gratuit si open source sub licenta
GPL-2.0-or-later. Nu exista tier platit, fara abonament, fara telemetrie. Sursa si .dmg sunt ambele pe GitHub.
Ce inseamna «nedistructiv» aici?
Pixelii originali ai fisierului tau nu sunt atinsi pana cand nu apesi Save. Fiecare ajustare — crop, rotate, flip, luminozitate, contrast, saturatie, expunere — traieste pe un EditStack randat live de Core Image. Cand salvezi, Photo2Mac scrie pixelii randati si embedeaza EditStack ca metadata XMP, deci redeschiderea aceluiasi fisier restaureaza stack-ul si iti permite sa continui editarea.
Ce formate citeste si scrie Photo2Mac?
JPEG, PNG, HEIC si TIFF. Suportul RAW e pe roadmap. Metadata XMP e embedata in toate cele patru formate de output via ImageIO.
Functioneaza pe Mac-uri Apple Silicon?
Da. Fisierul .dmg e build-uit pentru Apple Silicon (arm64) si necesita macOS 14 Sonoma sau mai nou. Codebase-ul e universal si poate fi compilat si pe Intel din sursa.
De ce arata macOS un avertisment Gatekeeper la prima deschidere?
Pentru ca bundle-ul e ad-hoc signed — inca nu exista Apple Developer ID platit. Sterge flag-ul de carantina o singura data cu:
xattr -dr com.apple.quarantine /Applications/Photo2Mac.app
Apoi deschide aplicatia normal. Notarization-ul (care elimina avertismentul permanent) e planificat odata ce proiectul are un Developer ID.
Photo2Mac are nevoie de Homebrew sau alte dependinte?
Nu. Fisierul .dmg e self-contained (~1.7 MB) si depinde doar de framework-urile sistem Apple (Core Image, ImageIO, AppKit, SwiftUI). Trage in Applications si ruleaza.