Tools · Color · Color picker from image · Guides · Why You Can't Eyeball a Hex Code from a Screenshot
Why You Can't Eyeball a Hex Code from a Screenshot
Look at a brand's blue in a screenshot, guess "#2563EB," check it against the real pixel, and it's very often not that. Not because the eye is bad at colour - because two things are working against a visual guess at the same time, one about how human vision works and one about how a screenshot got compressed in the first place.
The eye reports colour relative to what's around it
Human colour perception is comparative, not absolute - the same physical colour looks lighter next to something darker and darker next to something lighter, a well-documented effect called simultaneous contrast. A logo's blue sampled visually against a dark app background and the identical blue sampled against a light marketing page can produce two different guessed hex values from the same eye, even though the underlying pixel never changed. This isn't a matter of practice or a good eye for colour - it's how contrast perception works for everyone, which is exactly why "just look at it" doesn't reliably produce the same answer twice.
A screenshot's own compression adds a second, separate error
Most screenshots that get shared as JPEGs go through lossy compression, which is specifically harder on sharp colour transitions than on smooth ones - a hard edge between two flat colours (a logo's outline, a button's border) is exactly where compression artifacts show up most, sometimes shifting a few pixels near that edge away from either colour's true value. Sampling from right on or near an edge in a compressed screenshot risks reading one of those shifted, blended pixel values rather than the flat colour a few pixels further in - a second, independent source of error stacked on top of the first, and one that has nothing to do with the eye at all.
What reading the actual pixel data sidesteps
Color picker from image doesn't ask anyone to judge a colour by looking at it - it draws the uploaded image onto a canvas and reads the literal RGB value at the exact pixel under the cursor via the browser's own getImageData, the same numbers the file actually stores, with no perceptual guessing involved at any point. Clicking a genuinely flat area of a logo (not right on its edge, where compression is most likely to have shifted something) returns the real value stored there - not an estimate, not a "close enough," the actual number.
The tool also includes a live magnifier that zooms the pixels right under the cursor before a click commits anything - useful specifically for confirming the cursor sits on a flat area of colour rather than an edge, since a zoomed-in, obviously blended or speckled patch is a visible sign to nudge the cursor rather than click where it is.
One honest limit worth knowing before relying on this for pixel-perfect work
Every image is redrawn to fit the picker's display area - at most 900px wide and 620px tall, and scaled to the width of the space it sits in - and picks are read from that redrawn copy, not from the original-resolution file: a deliberate, disclosed trade so the whole image fits comfortably on screen. Downscaling can shift a colour by a few RGB units at hard pixel boundaries in the original, the same resampling effect any image resize introduces. For matching a large, mostly-flat colour area (a background, a solid logo fill), this makes no practical difference; for pulling an exact value from a very small or fine-detail region, it's worth knowing the number came from the displayed, not the original-resolution, pixel grid.
What "exact" means here, precisely
The value returned is the literal RGB integer the file stores for that pixel, read straight from the decoded image data - not a value re-interpreted through any colour-management or profile conversion. Most images encountered on the web already sit in the same standard colour space browsers assume by default, so for the overwhelming majority of screenshots and photos this distinction never matters in practice. It's worth knowing as a boundary case rather than a real everyday concern: an image carrying an unusual embedded colour profile can, in principle, store numbers that a fully colour-managed application would render slightly differently than a plain browser decode does. That's a genuinely rare situation for ordinary screenshots and product photos, and a different, much smaller kind of imprecision than the two failure modes actually worth worrying about here - a visual guess, and a compressed edge.
Color picker from image reads the real pixel value, entirely in your browser - the photo is never uploaded anywhere.