JuliaImages / ExifViewer.jl

Metadata reader in Julia, wrapper over LibExif
https://juliaimages.org/ExifViewer.jl/dev/
MIT License
28 stars 1 forks source link
exif hacktoberfest julia metadata

ExifViewer.jl is a Julia wrapper of the C library libexif that provides EXIF support. EXIF is short for Exchangeable Image File, a format that is a standard for storing interchange information in digital photography image files using JPEG compression.

Docs-dev Slack License: MIT Downloads

Installation


If you have not yet installed Julia, please follow the instructions for your operating system.

Stable Version

# Enter ']' from the REPL to enter Pkg mode.
pkg> add ExifViewer

Dev Version

using Pkg
# Enter ']' from the REPL to enter Pkg mode.
pkg> add https://github.com/JuliaImages/ExifViewer.jl.git

Usage

ExifViewer.jl provides method to read EXIF tags from images using read_tags methods which can take input in form of Filepath, IO, and bytes sequence(Vector{UInt8})

read_tags reads EXIF tags from the input source data and it returns an empty dictionary if the source data doesn't contain EXIF tags. There are couple of keyword arguments that are used by read_tags which have been described below:

Keyword Arguments

List of all available tags to search is available here: https://libexif.github.io/internals/exif-tag_8h.html

Examples

julia> using TestImages, ExifViewer
julia> filepath = testimage("earth_apollo17.jpg", download_only=true)
julia> io = open(filepath, "r")
julia> read_tags(io; read_all=false, tags=["EXIF_TAG_FLASH_PIX_VERSION", "EXIF_TAG_ORIENTATION"])
Dict{String, String} with 2 entries:
  "EXIF_TAG_FLASH_PIX_VERSION" => "FlashPix Version 1.0"
  "EXIF_TAG_ORIENTATION"       => "Top-left"

julia> read_tags(filepath; read_all=false, tags=["EXIF_TAG_FLASH_PIX_VERSION", "EXIF_TAG_ORIENTATION"])
Dict{String, String} with 2 entries:
    "EXIF_TAG_FLASH_PIX_VERSION" => "FlashPix Version 1.0"
    "EXIF_TAG_ORIENTATION"       => "Top-left"

julia> data = read(filepath)
julia> read_tags(data, read_all=false, tags=["EXIF_TAG_FLASH_PIX_VERSION", "EXIF_TAG_ORIENTATION"])
Dict{String, String} with 2 entries:
      "EXIF_TAG_FLASH_PIX_VERSION" => "FlashPix Version 1.0"
      "EXIF_TAG_ORIENTATION"       => "Top-left"

Method to write exif data to files is also provided using write_tags and it writes EXIF tags to a filepath(currently support for jpeg and jpg available).

Keyword Arguments

Examples

julia> using ExifViewer, TestImages
julia> img = testimage("mandrill")

julia> tags = Dict{String, String}(
    "EXIF_TAG_MAKE"=>"Canon",
    "EXIF_TAG_ORIENTATION"=>"Top-left",
    "EXIF_TAG_X_RESOLUTION"=>"300",
    "EXIF_TAG_Y_RESOLUTION"=>"300",
)
julia> write_tags("test.jpg"; img, tags)

julia> read_tags("test.jpg")
Dict{String, String} with 10 entries:
  "EXIF_TAG_COLOR_SPACE"              => "Uncalibrated"
  "EXIF_TAG_COMPONENTS_CONFIGURATION" => "Y Cb Cr -"
  "EXIF_TAG_FLASH_PIX_VERSION"        => "FlashPix Version 1.0"
  "EXIF_TAG_Y_RESOLUTION"             => "300"
  "EXIF_TAG_ORIENTATION"              => "Top-left"
  "EXIF_TAG_EXIF_VERSION"             => "Exif Version 2.1"
  "EXIF_TAG_RESOLUTION_UNIT"          => "Inch"
  "EXIF_TAG_MAKE"                     => "Canon"
  "EXIF_TAG_YCBCR_POSITIONING"        => "Centered"
  "EXIF_TAG_X_RESOLUTION"             => "300"

Note: Some tags are present by default like EXIF version, FLASHPIX version etc as can be seen in example above.

Contributions and Issues:

If you have questions about ExifViewer.jl, feel free to get in touch via Slack or open an issue :hearts: