Skip to content

Commit 13ad8e3

Browse files
feat(posts): add "Bulk Image Converter"
Post: 2026-08-21-bulk-image-converter.md
1 parent 65cb530 commit 13ad8e3

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
layout: post
3+
title: Bulk Image Converter
4+
date: 2026-08-21 14:34:37
5+
excerpt: How I built a browser-based bulk image converter that converts multiple images at once — no uploads, no server, fully client-side.
6+
categories: image react javascript canvas browser website
7+
---
8+
9+
How I built a [bulk image converter](https://remarkablemark.org/bulk-image-converter/) that converts multiple images in your browser.
10+
11+
## Motivation
12+
13+
Most bulk image converters online require uploading files to a server. That raises privacy concerns, especially for sensitive images. Bandwidth costs add up for large batches and free services often have ads or limit file counts.
14+
15+
**Bulk Image Converter** sidesteps all of that by processing images entirely in the browser using the HTML Canvas API.
16+
17+
## Features
18+
19+
- **Drag-and-drop or click to upload** multiple images at once.
20+
- **Batch conversion** to WebP, JPEG, PNG, or AVIF.
21+
- **Quality control** with a slider for lossy formats (WebP, JPEG, AVIF).
22+
- **ZIP download** of all converted images in one click.
23+
- **Per-file status** tracking (pending, converting, done, error).
24+
25+
## How It Works
26+
27+
1. **Upload images** — drag-and-drop or click to browse.
28+
2. **Select a format** — select from WebP (default), JPEG, PNG, or AVIF.
29+
3. **Adjust quality** — a slider appears for lossy formats (PNG is always lossless).
30+
4. **Convert & download** — all images are converted in parallel and archived into a single ZIP file.
31+
32+
## Technical Decisions
33+
34+
### Canvas API
35+
36+
Each image is loaded into an `HTMLImageElement`, drawn to a `HTMLCanvasElement`, and exported via `canvas.toBlob()` with the target MIME type and quality.
37+
38+
### JSZip
39+
40+
The converted blobs are bundled into a ZIP file using [JSZip](https://stuk.github.io/jszip/). The ZIP is generated in memory and downloaded via a temporary `<a>` element with `URL.createObjectURL()`.
41+
42+
## Try It
43+
44+
You can try the [Bulk Image Converter](https://remarkablemark.org/bulk-image-converter/) or check out the [source code](https://github.com/remarkablemark/bulk-image-converter).

0 commit comments

Comments
 (0)