Transparent WebP badge
- Input
- 860 byte WebP, 420×260, lossless RGBA with transparent canvas around a badge graphic.
- Output
- 7,685 byte ICO containing one 256×158 RGBA image. Transparency stayed, but the ICO was not a favicon ladder.
WebP to ICO can package a decoded WebP asset as an icon, but current output is a single max-256 bitmap entry.
From real runs
| Element | Result | What happens |
|---|---|---|
| Icon entry size | Changed | The 420×260 WebP wrote a 7,685 byte ICO containing one 256×158 RGBA entry. |
| Alpha channel | Kept | The icon entry opened as RGBA, keeping transparent and semi-transparent WebP pixels. |
| Multiple favicon sizes | Lost | No 16×16, 32×32, or 48×48 entries were present in the ICO produced by the API. |
| WebP compression artifacts | Kept | Any lossy WebP artifacts are decoded into the bitmap and remain part of the icon image. |
| Aspect ratio | Kept | The 420×260 source stayed wide after thumbnailing, which can be unsuitable for square icon slots. |
| Animation | Lost | Animated WebP input would contribute its first frame only, because ICO does not store WebP animation timing here. |
The 420×260 WebP wrote a 7,685 byte ICO containing one 256×158 RGBA entry.
The icon entry opened as RGBA, keeping transparent and semi-transparent WebP pixels.
No 16×16, 32×32, or 48×48 entries were present in the ICO produced by the API.
Any lossy WebP artifacts are decoded into the bitmap and remain part of the icon image.
The 420×260 source stayed wide after thumbnailing, which can be unsuitable for square icon slots.
Animated WebP input would contribute its first frame only, because ICO does not store WebP animation timing here.
We converted our WebP sample (23 KB) with Image engine on 2026-10-20. It took 54 ms and produced a 17 KB ICO file, 25% smaller than the input. The engine raised 1 warning, listed below.
Input · sample.webp · 23 KB
1200 × 800 px, extended VP8X
Output · sample.ico · 17 KB
256 × 171 px, 1 size: 256×171
Pillow 11
from PIL import Image, ImageOps
im = Image.open("asset.webp").convert("RGBA")
im = ImageOps.fit(im, (256, 256))
im.save("favicon.ico", sizes=[(256, 256), (48, 48), (32, 32), (16, 16)])This crops square and writes multiple sizes, which differs from the single-entry API result we measured.
The HTTP API and the MCP server run the exact engine this page uses (Image engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=webp&to=ico.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.webp" -F "from=webp" -F "to=ico" \
-F 'options={"dpi":96}' \
--output output.ico| Key | Applies to | Type | Default |
|---|---|---|---|
| dpi | Reading WebP | number | 96 |
| width | Writing ICO | number | 0 |
| height | Writing ICO | number | 0 |
| fit | Writing ICO | contain · cover · fill | contain |
| quality | Writing ICO | number | 90 |
| background | Writing ICO | string | #ffffff |
| stripMetadata | Writing ICO | boolean | true |
Yes for the tested file. The ICO entry opened as RGBA and retained transparent canvas pixels.
The tested conversion wrote one 256×158 entry. It did not include the smaller favicon sizes browsers often request.
No. This image path uses a still frame and ICO output does not carry WebP frame timing.