An open API service indexing awesome lists of open source software.

https://github.com/giovanni-iannaccone/eikon

Lightweight image processing library, built entirely from scratch to offer fast, and customizable image manipulation capabilities 🖼️
https://github.com/giovanni-iannaccone/eikon

art bmp c-plus-plus cli cpp cpp-library css-colors from-scratch image-processing library png ppm

Last synced: 5 days ago
JSON representation

Lightweight image processing library, built entirely from scratch to offer fast, and customizable image manipulation capabilities 🖼️

Awesome Lists containing this project

README

          


Logo

![License](https://img.shields.io/github/license/giovanni-iannaccone/eikon)
[![Number of GitHub issues that are open](https://img.shields.io/github/issues/giovanni-iannaccone/eikon)](https://github.com/giovanni-iannaccone/eikon/issues)
![Number of GitHub closed issues](https://img.shields.io/github/issues-closed/giovanni-iannaccone/eikon)
![Number of GitHub pull requests that are open](https://img.shields.io/github/issues-pr-raw/giovanni-iannaccone/eikon)
![GitHub commit activity](https://img.shields.io/github/commit-activity/m/giovanni-iannaccone/eikon)
![Number of GitHub contributors](https://img.shields.io/github/contributors/giovanni-iannaccone/eikon)
[![Number of GitHub stars](https://img.shields.io/github/stars/giovanni-iannaccone/eikon)](https://github.com/giovanni-iannaccone/eikon/stargazers)

# 🖼️ eikon - Image Processing Library

eikon is a lightweight and efficient C++ library designed for those who want to handle image files without wading through a swamp of convoluted frameworks. It lets you load, tweak, and create images effortlessly, with built-in tools for adding geometric shapes. And for command-line lovers, there's a nifty utility that makes image manipulation refreshingly straightforward.


"Make art with code, eikon takes care of the boring stuff"

## ✨ Features
- **Read images**: Load image files effortlessly into your application
- **Supported formats**: BMP PPM PNG
- **Modify Images**: Perform image editing operations with ease
- **Insert Geometric Shapes**: Add lines, rectangles, circles, and more directly into your images
- **Command-Line Utility**: Use the library directly from the command line for quick tasks
- **Dependency-light**: Everything is implemented from scratch or is from the standard library

## 👨‍💻 Installation

1. Clone the repository:
```bash
git clone https://github.com/giovanni-iannaccone/eikon
cd eikon
```

2. Install the library on your system:
```bash
sudo make install
```
Follow the installation guide for detailed instructions on how to install a custom library on your linux system.

>[!TIP]
>Refer to the latest release to have a stable and fully-working version of eikon

## 🎨 Usage
- Library Integration

Include the library in your C++ project:
```c++
#include
```

- Use predefined shapes

The library provides a collection of predefined shapes for use in your project:
```c++
EikonCanvas* canvas = new EikonCanvas(pixels, HEIGHT, WIDTH);

Rectangle rec {150, 200, 100, 200, 0xFFA1FF15};
canvas->draw(rec);
```

- Define your own shapes:

By using the dependency injection pattern, you can define custom shapes:
```c++

class MyShape: public Drawable {

public:
void draw(uint32_t **pixels, size_t height, size_t width) override {
// code
}
}

MyShape myshape = MyShape();
canvas->draw(myshape);
```

Refer to `./src/shapes.cpp` for the implementation details of the default shapes.

- Linking process:

If you use eikon in your project, remember to add `-leikon` to g++'s flags.

## 🧃 Command Line Utility
1. Compile the CLI tool with make:
```bash
make cli
```

2. Interact directly with images using the eikon CLI tool:
```bash
./bin/eikon_cli ./outputs/eikon_cli.ppm
```
```bash
._______.___ .____/\ ._______ .______
: .____/: __|: / \: .___ \ : \
| : _/\ | : ||. ___/| : | || |
| / \| || \ | : || | |
|_.: __/| || \ \_. ___/ |___| |
:/ |___||___\ / :/ |___|
\/ :

File dimensions are 800x800
Type help to show the menu
eikon@ppm:./outputs/eikon_cli.ppm$
```

3. If you want to use it from anywhere in your system, move the compiled binary to `/usr/bin`:
```bash
sudo mv ./bin/eikon_cli /usr/bin
```

## 👀 Who can find this helpful ?
Everybody who...
- is willing to learn a new way to create art
- has tried lots of libraries but couldn’t find one that’s easy to use
- likes building things from scratch
- is working on a big project like an image viewer or image editor

## 🔭 Learn
Read documentation to learn more about eikon implementation and how to properly use it in your C++ project.

- BMP specs
- PNG specs
- PPM specs

## 🧩 Contributing
We welcome contributing. See CONTRIBUTING.md file for details.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project, you agree to abide by its terms.

### Thanks to every contributor

eikon Contributors

## ⚖️ License
This project is licensed under the GPL-3.0 License. See the LICENSE file for details.

## ⚔️ Contact
- For any inquiries or support, please contact iannacconegiovanni444@gmail.com .
- Visit my site for more informations about me and my work https://giovanni-iannaccone.github.io