Skip to content
/ Eikon Public

Eikōn is an Elixir library providing a read-only interface for image files.

License

Notifications You must be signed in to change notification settings

tchoutri/Eikon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eikōn Elixir License Hex Version

Eikōn is an image file parser. Feed it a PNG, JPG, and it will return informations about it.

Table of Contents

  1. Installation
  2. Usage
  3. Examples

Installation

def deps do
    [{:eikon, "~> 0.0.2"}]
end

Usage

Each file format is supported through a parser, for instance Eikon.PNG.Parser which contains the functions to work with it.
For the moment, the following formats are supported :

  • PNG
  • GIF (Although content/1 could be improved)
  • JPEG

The Parser Behaviour

Every parser implements the Parser behaviour, which contains standard functions:

  • General Parsing

    • parse/1
    • parse!/1
  • Magic number checking

    • magic?/1
  • Metadata extraction

    • infos/1
  • Returning the content of the image (without the metadata)

    • content/1
    • content!/1

Examples

Parsing a binary

Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.2.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> alias Eikon.PNG.Parser
nil
iex(2)⋅❯ File.read!("priv/mandelbrot.png") |> Parser.parse
{:ok,
 %Eikon.PNG{bit_depth: 8,
  chunks: {:ok,
   <<0, 0, 0, 3, 115, 66, 73, 84, 8, 8, 8, 219, 225, 79, 224, 0, 0, 32, 0, 73, 68, 65, 84, 120, 94, 237, 217, 235, 113, 228, 56, 150, 6, 208, 204, 117, 137, 52, 65, 46, 148, 13, 116, 161, 77, 40, ...>>},
  color_type: 2, compression: 0, filter: 0, height: 747, interlace: 0,
  width: 1365}}

Only return the metadata

iex(3)⋅❯ File.read!("priv/mandelbrot.png") |> Parser.infos
%Eikon.PNG{bit_depth: 8, chunks: nil, color_type: 2, compression: 0, filter: 0, height: 747, interlace: 0, width: 1365}

Extract some particular metadata

iex(4)⋅❯ image = (File.read!("priv/mandelbrot.png") |> Parser.infos)
%Eikon.PNG{bit_depth: 8, chunks: nil, color_type: 2, compression: 0, filter: 0,
 height: 747, interlace: 0, width: 1365}
iex(5)⋅❯ image.width
1365

Works also with GIFs

iex(6)⋅❯ alias Eikon.GIF.Parser
nil
iex(7)⋅❯ File.read!("priv/hammer_time.gif") |> Parser.infos
%Eikon.GIF{height: 540, images: nil, version: "89a", width: 960}

When you just want to know if it's a valid file.

iex(8)⋅❯ File.read!("priv/hammer_time.gif") |> Parser.magic?
true

About

Eikōn is an Elixir library providing a read-only interface for image files.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages