Contents

designedbyclowns/ImageMetadata

A swift library and macOS command line tool for reading metadata from images.

ImageMetadata swift library

This library uses Apple's ImageIO framework to access metadata directly from an image. As such it is limited to the image formats and metadata tags, supported by that framework.

Note: It only supports the reading of tag values.

Installation

Add the package as a dependency in your Package.swift file

let package = Package(
    name: "Foo",
    // name, platforms, products, etc.
    dependencies: [
        .package(url: "https://github.com/designedbyclowns/ImageMetadata", .upToNextMinor(from: "0.1.0")),
    ],
    targets: [
        .target(name: "Foo", dependencies: [
            .product(name: "ImageMetadata", package: "ImageMetadata"),
        ]),
    ]
)

Usage:

import ImageIO

let imageFile = try ImageFile(path: "WindowAtLeGras.jpg")
let metadata = try ImageMetadata(url: imageFile.url)
print(metadata?.description)

Build and view the documentation for more details.

imgmd – command line tool

The imgmd command line tool outputs metadata for the provided file(s) as JSON. It utilizes the ImageTool swift library and is primarily intended to help with debugging.

Installation

Clone the repo then:

make install

Or using swift:

swift build -c release
cp .build/release/imgmd /usr/local/bin/imgmd

Usage

imgmd --help
OVERVIEW: Outputs metadata from the supplied image files as JSON.

All metadata is output by default. Use the options to limit what metadata is
displayed.

USAGE: imgmd [--basic] [--exif] [--no-exif] [--gps] [--no-gps] [--iptc] [--no-iptc] [--tiff] [--no-tiff] [--debug] [<files> ...]

ARGUMENTS:
  <files>                 Image files.

OPTIONS:
  -b, --basic             Basic. Don't include other metadata.
  -e, --exif/--no-exif    Include EXIF metadata. (default: --exif)
  -g, --gps/--no-gps      Include GPS metadata. (default: --gps)
  -i, --iptc/--no-iptc    Include IPTC metadata. (default: --iptc)
  -t, --tiff/--no-tiff    Include TIFF metadata. (default: --tiff)
  -d, --debug             Show the raw metadata.
  -h, --help              Show help information.

Program ended with exit code: 0

Example:

imgmd ./Resources/WindowAtLeGras.jpg

Results

{
  "bitDepth" : 8,
  "colorModel" : "RGB",
  "colorProfile" : "GIMP built-in sRGB",
  "contentType" : "public.jpeg",
  "dpiHeight" : 540,
  "exif" : {
    "colorSpace" : "sRGB",
    "componentsConfiguration" : [
      1,
      2,
      3,
      0
    ],
    "dateTimeDigitized" : "2025-02-13T15:00:49Z",
    "dateTimeOriginal" : "1826-06-01T19:52:58Z",
    "flashPixVersion" : "1.0",
    "offsetTime" : "-08:00",
    "offsetTimeDigitized" : "-08:00",
    "offsetTimeOriginal" : "+02:00",
    "pixelXDimension" : 4530,
    "pixelYDimension" : 3810,
    "sceneCaptureType" : "standard",
    "subsecTime" : "002",
    "subsecTimeDigitized" : "002",
    "subsecTimeOriginal" : "002",
    "version" : "2.2.1"
  },
  "fileSize" : "2.1 MB (2,240,988 bytes)",
  "filename" : "WindowAtLeGras.jpg",
  "gps" : {
    "dateTime" : "2025-02-13T15:02:45Z",
    "horizontalPositioningError" : 1,
    "latitude" : 46.72519666666667,
    "latitudeReference" : "N",
    "longitude" : 4.860291666666667,
    "longitudeReference" : "E"
  },
  "hasAlpha" : false,
  "iptc" : {
    "byline" : [
      "Joseph Nicéphore Niépce"
    ],
    "captionAbstract" : "The earliest surviving camera photograph.",
    "city" : "Saint-Loup-de-Varennes",
    "copyrightNotice" : "Public Domain",
    "country" : "France",
    "countryCode" : "FR",
    "digitalCreationDate" : "2025-02-13T15:00:49Z",
    "headline" : "View from the Window at Le Gras",
    "keywords" : [
      "History",
      "Photograhy",
      "Bitumen",
      "Camera Obscura",
      "Heliography"
    ],
    "objectName" : "View from the Window at Le Gras",
    "provinceState" : "Bourgogne-Franche-Comté"
  },
  "isFloat" : false,
  "isIndexed" : false,
  "orientation" : "up",
  "pixelHeight" : 3810,
  "pixelWidth" : 4530,
  "tiff" : {
    "artist" : "Joseph Nicéphore Niépce",
    "copyright" : "Public Domain",
    "dateTime" : "2025-02-13T15:34:57Z",
    "imageDescription" : "The earliest surviving camera photograph.",
    "orientation" : 1,
    "photometricInterpretation" : 2,
    "resolutionUnit" : 2,
    "software" : "Adobe Photoshop 26.3 (Macintosh)",
    "xResolution" : 540,
    "yResolution" : 540
  }
}

Documentation

Documentation can be viewed in Xcode by selecting the package target and choosing Product > Build Documentation.

Contributing

Pull requests are both welcome and encouraged!

So are bug reports, feedback and suggestions.

Just don't be a jerk.

Package Metadata

Repository: designedbyclowns/ImageMetadata

Stars: 2

Forks: 0

Open issues: 0

Default branch: main

Primary language: swift

License: Unlicense

Topics: exif, gps, image, iptc, metadata, tiff

README: README.md