How much file size do extra PNG to ICO dimensions add?

By Leon Warren · Published November 1 2026

Adding the full seven-size set raised these three local ICO outputs from 222–512 bytes with only 16px selected to 5,215–144,967 bytes. The texture sample drove the largest file. These measurements came from the current SVGtopix converter module through @napi-rs/canvas 1.0.13, not a live Chrome export.

The frame count is only part of the file. Each selected size adds a PNG payload, and the payload depends on the resized pixels and encoder. The table compares the same input sample across three size selections.

Measured ICO file sizes

Every source was a generated 128 × 128 PNG. “16 only” selects 16. “Four frames” selects 16, 32, 48 and 256. “Seven frames” selects 16, 24, 32, 48, 64, 128 and 256. Added bytes are the measured output length minus the 16-only output for the same sample.

Local reproduction output sizes in bytes. Exact values belong to these generated files and this Canvas adapter.
SamplePNG input16 onlyFour framesAdded vs 16Seven framesAdded vs 16256px PNG payload in seven-frame file
flat-mark1,2223436,1715,8288,6228,2794,648
checker-mark7252223,6443,4225,2154,9932,603
seeded-texture32,704512104,520104,008144,967144,45597,684

The seven-frame files were not a fixed multiple of the 16-only files. The 256px payload alone measured 4,648 bytes for flat-mark, 2,603 for checker-mark and 97,684 for seeded-texture. These are the decoded directory payload lengths, not estimates from preview images.

The included packer writes a 6-byte ICO header and a 16-byte directory entry per frame, followed by the encoded PNG payloads. For example, the flat-mark four-frame output is 70 directory bytes plus payloads of 321, 425, 707 and 4,648 bytes, totaling 6,171 bytes. The decoder reads those values from the saved files.

One PNG input branches into one, four or seven selected ICO frames; each frame has its own encoded PNG payload.
Each checked frame is a separate encoded image in the ICO container; the illustration shows the file structure, not a size scale.

How to reproduce the byte counts

The experiment generated three 128 × 128 PNGs: a flat three-color mark, a repeated four-color checker pattern and an opaque seeded texture. Each identical source was converted with one selected frame, a four-frame set and all seven frames. The saved ICO files were read back, not measured from the page preview.

The decoder checks the ICO header and directory count, validates each payload range, confirms the PNG signature, and compares each directory size with the embedded PNG dimensions. It then records the payload length, offset and total file length in measurements.json.

Download flat-mark.png · Download checker-mark.png · Download seeded-texture.png · Download all samples, ICO outputs and scripts.

  1. Extract the evidence package and run npm install.
  2. Run node make-samples.mjs, then node run-local.mjs.
  3. Compare the newly written measurements.json and ICO files with the included records.

What the inspected converter pages show

The saved CloudConvert PNG-to-ICO page describes controls for resolution, quality and file size. The FreeConvert page describes presets and single-size choices. The Convertio page lists common ICO sizes. In the captured text of those three direct pages, I found no same-input byte table for these frame selections. This observation is limited to those pages and captures; it is not a claim about every page on those sites or the web. The measurements here do not compare competitor outputs.

CloudConvert PNG to ICO · FreeConvert PNG to ICO · Convertio PNG to ICO

Questions this run answers

Does adding another size add the same number of bytes every time?

No. In these files, the 256px PNG payload ranged from 2,603 to 97,684 bytes across the three source patterns.

Does a larger ICO file mean the preview looks sharper?

This measurement records container bytes and embedded dimensions. It does not measure visual quality or test an installed icon.

Should I select only one size?

This run measures file-size cost only. It does not determine which dimensions your target application needs.

Known boundary

These numbers describe three generated PNGs and a local adapter using the current converter module; exact browser-encoded bytes, Windows frame selection and other image patterns were not tested.