Load and save images, using libjpeg, libpng, libjxl, libtiff, and poppler as backends. Formats supported include: jpeg, png, bmp, jpeg-xl, ppm, tiff, pdf.
Where possible, yielding NIFs are used so that it plays nice with BEAM VM's scheduler (WIP).
Please ensure that libjpeg, libpng, libjxl, libtiff, and libpoppler are installed.
defp deps do
[
{:imagex, "~> 0.1.0", github: "woohp/imagex", branch: "master"}
]
end
To load an image file (as an Nx.Tensor)
{:ok, image} = Imagex.open("lena.jpg")
or load from memory
bytes = File.read!("test/lena.jpg")
{:ok, image} = Imagex.decode(bytes)
Decode as a specific format
bytes = File.read!("lena.png")
{:ok, image} = Imagex.decode(bytes, format: :png)
Save an image as a file
image = Nx.tensor(...)
Imagex.save(image, "foo.png") # the format is inferred from the file extension
or save to memory
compressed = Imagex.encode(image, :jpeg)
To work with pdf files
bytes = File.read!("lena.pdf")
{:ok, pdf_document} = Imagex.decode(bytes, format: :pdf)
for i <- 0..pdf_document.num_pages-1 do
{:ok, image} = Imagex.Pdf.render_page(pdf_document, i, dpi: 150)
end
and similarly, work with tiff files
bytes = File.read!("lena.tiff")
{:ok, tiff_document} = Imagex.decode(bytes, format: :tiff)
for i <- 0..tiff_document.num_pages-1 do
{:ok, image} = Imagex.Tiff.render_page(tiff_document, i)
end