LinkedIn profile photo 8 MB, 400-7680 px, plus 1584x396 banner

LinkedIn takes a PNG or JPG profile photo up to 8 MB and 400x400 to 7680x4320 px; the background is 1584x396. How to reach 4:1 from a Sume 3:1 image.

4 min readSume
All posts

LinkedIn's help page gives one size cap and one type rule for personal profile images: a maximum file size of 8MB, PNG or JPG only, and no GIFs. The profile photo must be between 400x400 and 7680x4320 pixels, and the background photo is recommended at 1584x396. LinkedIn also says the photo must reflect your likeness, though an illustration or caricature of yourself is allowed.

The numbers

The page says it was last updated two years ago when read today, so check the live page before a large batch.

LinkedIn personal profile image specs (read 2026-10-04)
ItemSpec
Maximum file size8MB
Profile photo size400x400 to 7680x4320 pixels
Background photo1584x396 recommended
File typesPNG or JPG; GIF not supported
LikenessPhoto must reflect your likeness; artistic renderings of yourself are allowed

Square photo and wide background from Sume

The profile photo is easy. A 1024x1024 request fits Sume's GPT custom-size rules and sits inside LinkedIn's range. LinkedIn's 7680-pixel ceiling is above Sume's 3840-pixel longest edge, so the upper limit never binds.

The background is harder. 1584x396 is 4:1, but GPT custom sizes allow at most 3:1, and 396 is not a multiple of 16 (396 divided by 16 is 24.75). So request 1536x512, which is exactly 3:1, then crop and scale locally.

From 3:1 to 4:1

The crop from 1536x512 to a 4:1 frame keeps the full width and trims the height to 384 pixels. Scaling 1536x384 up to 1584x396 multiplies both edges by exactly 1.03125 (1584 divided by 1536, and 396 divided by 384). ImageOps.fit in Pillow does both steps in one call.

import asyncio, os
from PIL import Image, ImageOps

async def main():
    img = Image.open("banner-1536x512.png").convert("RGB")
    out = ImageOps.fit(img, (1584, 396), Image.LANCZOS)  # crops to 4:1, then scales
    out.save("linkedin-background.jpg", "JPEG", quality=92, optimize=True)
    size = os.path.getsize("linkedin-background.jpg")
    print(out.size, size, "ok" if size <= 8_000_000 else "too big")

asyncio.run(main())

Likeness and the size reading

LinkedIn's rule is about likeness, not about the tool. If you generate a portrait, use your own photo as a reference (the docs say openai/gpt-image-2.5 takes up to 16 image references) and judge by eye whether the result looks like you.

The 8MB is not defined on the page. The script checks 8,000,000 bytes, which is the stricter reading of 8MB.

Checklist

  • Profile: PNG or JPG, at least 400x400.
  • Background: 1584x396, built from a 1536x512 request.
  • File under 8,000,000 bytes.
  • Keep the original generation and its job record.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume