Logo

0x5a.live

for different kinds of informations and explorations.

GitHub - tchoutri/Eikon: Eikōn is an Elixir library providing a read-only interface for image files.

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

Visit SiteGitHub - tchoutri/Eikon: Eikōn is an Elixir library providing a read-only interface for image files.

GitHub - tchoutri/Eikon: Eikōn is an Elixir library providing a read-only interface for image files.

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

Powered by 0x5a.live 💗

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

Elixir Resources

are all listed below.

Resources

listed to get explored on!!

Made with ❤️

to provide different kinds of informations and resources.