All Projects → kmhofmann → Selene

kmhofmann / Selene

Licence: mit
A C++17 image representation, processing and I/O library.

Programming Languages

cpp
1120 projects
cplusplus
227 projects
cpp11
221 projects
cpp17
186 projects
cpp14
131 projects

Projects that are alternatives of or similar to Selene

Sharp
High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.
Stars: ✭ 21,131 (+7843.98%)
Mutual labels:  tiff, image-processing, image, png, jpeg
Libvips
A fast image processing library with low memory needs.
Stars: ✭ 6,094 (+2190.98%)
Mutual labels:  tiff, image-processing, png, jpeg
Essential Image Optimization
Essential Image Optimization - an eBook
Stars: ✭ 1,950 (+633.08%)
Mutual labels:  image-processing, images, png, jpeg
Pixterm
Draw images in your ANSI terminal with true color
Stars: ✭ 782 (+193.98%)
Mutual labels:  tiff, image, png, jpeg
Photosauce
MagicScaler high-performance, high-quality image processing pipeline for .NET
Stars: ✭ 291 (+9.4%)
Mutual labels:  tiff, image-processing, png, jpeg
Imgproxy
Fast and secure standalone server for resizing and converting remote images
Stars: ✭ 5,688 (+2038.35%)
Mutual labels:  image-processing, image, png, jpeg
Crunch
Crunch is a tool for lossy PNG image file optimization. It combines selective bit depth, color type, and color palette reduction with zopfli DEFLATE compression algorithm encoding using the pngquant and zopflipng PNG optimization tools. This approach leads to a significant file size gain relative to lossless approaches at the expense of a relatively modest decrease in image quality (see example images below).
Stars: ✭ 3,074 (+1055.64%)
Mutual labels:  image-processing, image, images, png
Govips
A lightning fast image processing and resizing library for Go
Stars: ✭ 442 (+66.17%)
Mutual labels:  tiff, image-processing, png, jpeg
Lilliput
Resize images and animated GIFs in Go
Stars: ✭ 1,690 (+535.34%)
Mutual labels:  image, images, png, jpeg
Imaginary
Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing
Stars: ✭ 4,107 (+1443.98%)
Mutual labels:  image-processing, image, png, jpeg
Flyimg
Dockerized PHP7 application runs as a Microservice to resize and crop images on the fly. Get optimised images with MozJPEG, WebP or PNG using ImageMagick. Includes face detection, cropping, face blurring, image rotation and many other options. Abstract storage based on FlySystem in order to store images on any provider (local, AWS S3...).
Stars: ✭ 762 (+186.47%)
Mutual labels:  image-processing, image, png, jpeg
Png To Ico
convert png to ico format
Stars: ✭ 88 (-66.92%)
Mutual labels:  image-processing, image, png
Skrop
Image transformation service using libvips, based on Skipper.
Stars: ✭ 71 (-73.31%)
Mutual labels:  image-processing, image, jpeg
img
A python library to display images in the terminal
Stars: ✭ 55 (-79.32%)
Mutual labels:  png, jpeg, images
Imagemin Module
Automatically optimize (compress) all images used in Nuxt.js
Stars: ✭ 37 (-86.09%)
Mutual labels:  image-processing, image, images
Djv
Professional media review software for VFX, animation, and film production
Stars: ✭ 282 (+6.02%)
Mutual labels:  tiff, png, jpeg
Exifr
EXIF Reader
Stars: ✭ 450 (+69.17%)
Mutual labels:  tiff, image, jpeg
Imageprocessor
📷 A fluent wrapper around System.Drawing for the processing of image files.
Stars: ✭ 2,452 (+821.8%)
Mutual labels:  tiff, png, jpeg
Metadata Extractor
Extracts Exif, IPTC, XMP, ICC and other metadata from image, video and audio files
Stars: ✭ 1,972 (+641.35%)
Mutual labels:  tiff, png, jpeg
HEIF
Mac OS X: Convert any image to HEIF/HEIC format
Stars: ✭ 58 (-78.2%)
Mutual labels:  png, jpeg, tiff

Selene

Build Status

Selene is a C++17 image representation, processing, and I/O library, focusing on ease of use and a clean, modern, type-safe API.

  • Overview: Brief summary of the current feature set.
  • Rationale: Why implement a new library for image representation, processing, and I/O?

Building & usage:

  • Building the library: How to build from source.
  • Dependencies: Description of optional dependencies.
  • Installation: Installation using package managers (vcpkg/Conan).
  • Usage: Using the built and/or installed library as a dependency in other projects.

Documentation & status:

Summary

  • Strongly typed image and multi-channel pixel representations, and functions for image data access.
  • Easy-to-use APIs to read and write images in JPEG, PNG, and TIFF formats (leveraging libjpeg, libpng, and libtiff).
  • Basic image processing algorithms such as color conversions, pixel-wise operations, convolutions, rotation, etc.
  • Lightweight and easy to build using CMake on Linux, MacOS, Windows.

Example

A first impression of the API:

// Decode JPEG image data from disk
DynImage img_data = read_image(FileReader("example.jpg"));
assert(img_data.nr_channels() == 3 && img_data.nr_bytes_per_channel() == 1);

// Convert to strongly typed RGB image
Image<PixelRGB_8u> img_rgb = to_image<PixelRGB_8u>(std::move(img_data));
assert(img_rgb.width() > 400_px && img_rgb.height() > 350_px);

// Create non-owning view on part of the image
MutableImageView<PixelRGB_8u> img_part = view(img_rgb, {100_idx, 100_idx, 300_px, 250_px});

// Darken this part
for_each_pixel(img_part, [](auto& px){ px /= 4; });

// Flip this part horizontally
flip_horizontally_in_place(img_part);

// Apply a convolution to this part (1-D Gaussian kernel in x-direction, sigma=5.0, range: 3 std. deviations)
Kernel<double> kernel = gaussian_kernel(5.0, 3.0);
const auto img_part_copy = convolution_x<BorderAccessMode::Unchecked>(img_part, kernel);

// And copy the result back to the original image (i.e. to the view).
clone(img_part_copy, img_part);

// Convert whole image to RGBA, adding semi-transparent alpha channel
const Image<PixelRGBA_8u> img_rgba =
  convert_image<PixelFormat::RGBA>(img_rgb, std::uint8_t{192});

// Encode in-memory to PNG
std::vector<std::uint8_t> encoded_png_data;
write_image(to_dyn_image_view(img_rgba), ImageFormat::PNG,
          VectorWriter(encoded_png_data));

// Write encoded binary data to disk (or do something else with it...)
write_data_contents("example_out.png", encoded_png_data);

Package managed

Building from source "at head" using CMake is the recommended way to use Selene (see Building the library). But the library is also available as a

Selene's own dependencies can be installed using

besides OS level package managers or from source.

Feedback encouraged

Please send me a message if you're using Selene. I would love to know what you think of it, and what your use cases are! Contributions are also very encouraged; see here for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].