C++

Mosaic Maker

May 2023
Visual Demo

Microservices

Image Resizing:
The project begins by resizing uploaded images. This operation involves precise handling of image dimensions to ensure that the aspect ratio is maintained while achieving the desired size. The Python Imaging Library (PIL) is used for this task.

Color Matching with KDTree:
The core technical component is the color matching algorithm. It calculates the average color for various regions of the resized image. The KDTree, a data structure, is employed to efficiently locate the closest matching tile based on color similarity. This involves vector calculations to determine the nearest neighbor in the KDTree structure.

Tile Placement:
The projects central function involves pasting tiles onto the resized image, systematically covering its regions. Tiles are selected based on their color proximity to the target region. The placement process is managed through loops, iterating over rows and columns to ensure accurate positioning.

Modularity via HTTP Requests:
A noteworthy technical aspect is the modularity of the project. It communicates with other services through HTTP requests, allowing for potential integration with external image processing tools or future enhancements. This modular design promotes scalability and adaptability.

Middleware Work

make_mosaic Route:
The core functionality of the application is encapsulated in the make_mosaic route. Heres what it does: Image Handling: It receives image data through a POST request, which is typically uploaded by the user. The code extracts the file type from the uploaded image (e.g., JPEG, PNG). File Management: It generates a unique file name for the uploaded image and saves it locally. This saved image serves as the base for creating the mosaic. Microservice Integration: The route defines a list of URLs, each pointing to a different microservice. These microservices are presumably responsible for generating specific parts of the mosaic. Parallel Processing: Inside a loop, the code sends POST requests to each microservice, passing the base image file as part of the request. This loop allows for parallel processing, where multiple microservices work concurrently to create the mosaic. Response Aggregation: The responses from each microservice are collected in the images list. Each response likely contains a portion of the mosaic. JSON Response: Finally, the route responds with a JSON object containing the mosaic images returned by the microservices.