Half a Pixel Is Why Your Carousel Looks Soft
Split a wide photo across four carousel slides and the arithmetic is the first thing that happens: width divided by four. On a 1170-pixel photo that is 292.5 pixels a slide, and half a pixel is not something a canvas can cut.
What it does instead is the interesting part, and it is worse than a crooked seam.
What a browser does with half a pixel
Asked for a 292.5-pixel slice, a canvas does not round to 292 and move on. It resamples — it rebuilds every pixel in the tile as a weighted average of the pixels around it, because the pixel grid it is being asked to produce no longer lines up with the one it was given.
That is easy to measure. Build a source of alternating one-pixel black and white stripes, cut one slice on a whole pixel and one at 292.5, and read the pixels back:
| Slice | Pixels that came back | Edge contrast |
|---|---|---|
| Whole pixel | 0, 255, 0, 255 | 255 — exact |
| 292.5 | 111, 143, 111, 143 | 32 |
Black and white came back as two greys eleven per cent apart. Two hundred and fifty-five steps of edge contrast became thirty-two — eighty-seven per cent of it, gone.
And it does not stop at the seam. The whole tile is rebuilt, so every fine detail inside it softens by the same amount. On stripes that is obvious. On a photograph you will not see anything so tidy; you will see a carousel that looks slightly blurrier than the picture you started with, with nothing on screen to tell you why.
The fix is arithmetic, not a sharpening filter
Nothing here needs to be corrected after the fact. The tile only has to land on whole pixels, and it can, if the width is made divisible before anything is cut.
Take the largest whole-pixel width that divides exactly by the number of slides, centre it, and cut there. Every slice then starts and ends on an integer, so nothing is resampled — and every slide comes out the same size, which a carousel needs anyway, because all of its slides share one aspect ratio.
The cost is a few pixels of width. Measured across five common phone widths:
| Photo width | Slides | Naive slice | Whole-pixel slice | Pixels dropped |
|---|---|---|---|---|
| 1170 | 4 | 292.5 | 292 | 2 |
| 1080 | 3 | 360 | 360 | 0 |
| 4032 | 3 | 1344 | 1344 | 0 |
| 3024 | 5 | 604.8 | 604 | 4 |
| 1290 | 7 | 184.29 | 184 | 2 |
At most four pixels, and none at all on the two widths that already divide exactly. That is the entire trade: up to four pixels of width, against every pixel in every tile being rebuilt from its neighbours.
The general rule is that the loss is at most one less than the number of slides. Ten slides can cost you nine pixels of a photo several thousand wide.
The other thing that decides how much survives
Every slide in a carousel shares one aspect ratio. That single constraint decides how wide a strip you can use, because the strip is the slide ratio multiplied by the number of slides:
- Square 1:1 across three slides needs a 3:1 strip.
- Portrait 4:5 across three slides needs 2.4:1 — taller slides, so a narrower strip fills them.
- Landscape 1.91:1 across three slides needs 5.73:1, which almost no photograph is.
A 16:9 photo is 1.78:1. Against a 2.4:1 target it is not too narrow — it is too short, so the sides get cropped to make the proportion work. Against 3:1 it gets cropped harder. This is why portrait slides keep more of an ordinary photo than square ones do, which is the opposite of what most people guess.
What this means when you post
- Resize the photo to a width that divides by your slide count if you care about every pixel — 1080 across three, 1200 across four, 1500 across five.
- If you do not, a good splitter should trim a couple of pixels rather than cut a fractional slice. The difference is invisible in width and very visible in sharpness.
- Pick portrait 4:5 when you want to keep the most of the photo, square when the feed is mixed, and landscape only for genuine panoramas.
- Pixel-exact seams are what a splitter controls. What it cannot control is the app: some feeds put a small gap or a rounded corner between slides, so a hard edge running across a seam can still read as a join no matter how exact the cut was.
Try it
Our carousel splitter does the arithmetic above: it trims to a divisible width, cuts on whole pixels, and tells you exactly how many pixels it dropped and what each slide came out as. Everything happens in your browser — the photo is never uploaded.
If the photo is not the right width yet, the image resizer will get it there first, and the safe zone checker shows what the app itself will cover once you post.
FAQ
Why does half a pixel matter if I cannot see one?
Because the browser does not discard it — it rebuilds the whole tile around it. The measured cost on a hard edge was 255 steps of contrast down to 32, and that softening applies to every pixel in the slide, not to the seam alone.
Can I just sharpen the slides afterwards?
Sharpening puts contrast back at edges it can find; it cannot recover detail that was averaged away, and it adds halos of its own. Cutting on whole pixels costs a few pixels of width and needs no correction at all.
What width should I resize to before splitting?
Any multiple of the slide count. 1080 divides by three, four, five, six, eight and nine. 1200 divides by three, four, five, six, eight and ten. If you already know the count, the simplest rule is to round the width down to the nearest multiple.
Does this apply outside Instagram?
It applies anywhere a picture is cut into equal pieces, because it is a property of the canvas and not of the app. Carousels are where people notice it, because the slides sit next to each other and invite comparison.
Will the seams be genuinely invisible?
The pixels will line up exactly. Whether the join reads as invisible also depends on the feed, which may add a gap or a rounded corner between slides, and on the picture: detail across the seam hides it, flat colour and straight lines do not.