Camera is not Lens is not the gallery’s recompress.
Last updated: 7 September 2026
Three apps, three pipelines, one PNG. People mix them and then ask the generator to fix the QR. This page is that mix.
It is not a page about canvas.toBlob lying about AVIF. Mark does not emit AVIF. It is not the iPhone Files page — iPhone. It is not the WhatsApp bubble page — WhatsApp — though a gallery recompress often feeds that bubble. The generator stays on the homepage.
Where Chrome actually wrote the PNG
Chrome on a phone downloads a PNG into Files or Downloads depending on the OEM. Samsung, Xiaomi, Pixel, cheap A-series — the folder name moves. Pictures and DCIM are the camera stack. If you pick from the camera stack, you pick a JPEG the camera app wrote, or a screenshot, or a gallery recode. If you pick from Downloads, you pick the blob Chrome saved from Mark. Nearby Share, Bluetooth, Telegram, Messages, WhatsApp: they send whichever URI you pointed at. Pointing at Recents is how a sharp PNG becomes a 1600-pixel JPEG with chroma smear on the finder patterns.
OEM Camera is the scanner you do not pick for your visitors
Pixel Camera is good at dense modules and modest gloss. A 2019 Samsung camera with a smeared lens and HDR forced on is not. Xiaomi’s camera UI may open the URL in an in-app browser or refuse WIFI: payloads. You do not fix that by re-encoding at ECC Q instead of M if the scan is of a recompressed gallery JPEG. You fix the object, then you design for the weaker camera: higher contrast, larger quiet zone, shorter payload, larger print or a 1024 PNG shown full screen. WiFi string: WiFi. Event badges: events.
Google Lens is a second pipeline, not the default shutter
Lens can read a code from a still in the gallery, from a live view, from a screenshot. Lens succeeding and Camera failing (or the reverse) is not a Mark bug. Visitors will use whichever app their OEM put on the shutter button. Design for Camera. Treat Lens as a bonus. If your event crowd is “everyone with a cheap Android”, a 256-pixel PNG on a glossy badge is how you fail them.
Gallery recompress is the silent fourth pipeline
“Share image” in many galleries exports a JPEG sized for chat. “Save image” from a browser preview may also recode. “Edit” then save always recodes. A QR does not want a gallery editor. Move the file in Files. Attach as a document. Do not “enhance” a matrix.
MIUI, ColorOS and some Samsung Galleries offer “optimize for sending” or “smart convert to JPEG”. Those toggles exist to save mobile data. They destroy module edges. Turn them off for this file, or bypass the gallery and attach from Files. Fast Share / Nearby Share will still send a JPEG if the URI you picked is a gallery recode. The chooser lies by showing the same thumbnail for both objects.
WebViews are not Chrome
Banks, marketplaces, some messengers embed an old Chromium and sometimes a custom scanner. Their scanner is not Chrome’s camera permission and not Lens. If a shop form asks you to upload a QR PNG, upload PNG from Files, not a screenshot of this tab. Fighting a WebView is not debugging Mark.
Add to Home Screen is still this website
The icon looks like an app. It does not gain a system scanner. It does not gain a new encoder. Treat it as a bookmark. After a cache drop it still needs HTTPS for the first load. We do not ship a service worker that caches your payloads.
Work profile, Knox, Always-on Display
Work profile and managed Android hide Downloads behind a second Files tree. Save to a location the other app can read. Mark does not know about MDM, Knox or a work profile. If the shop app cannot see the PNG, copy it to the personal Downloads, or send it as a document from the profile that owns the file.
Always-on display and an Android lock-screen widget are not a master. A photograph of a phone on a table includes glare, a rounded-corner crop and a scale that is not 1024 pixels. Keep the PNG in Files. The iPhone page covers Lock Screen as a scene in more depth; do not copy that essay here. On Android the matching mistake is a screenshot of the shade or of Always-on Display.
What Mark does on this origin
Seven payload types, colours, quiet zone, optional logo with ECC H, PNG and SVG (SVG off while a logo is on), all in the tab. No upload of the WiFi password. No account. After the scripts have loaded, encoding does not need a network call. Low-RAM phones die on huge logos, not on a 1024 QR. A 2 MB logo is rejected. A long vCard hits capacity and you get a sentence, not a white screen. That is encode. This page is delivery after encode succeeded. Fields: how to. Scan failures of the matrix itself: troubleshooting.
The ceiling
Mark cannot update the OEM Camera. Mark cannot disable a gallery’s “optimize for sending”. Mark cannot make Nearby Share prefer Downloads over DCIM. Mark cannot install Lens on a phone whose vendor hid it. A 720p phone scanning a dense vCard at 256 pixels is physics. Shorten the payload or print larger. Re-encoding the same long vCard will not invent modules the cheap sensor can resolve. Success is: a PNG you opened from Files or Downloads on this phone, scanned with the same class of Camera you expect visitors to use, then handed on as that file.
Steps
- Open Mark in Chrome or Firefox, not inside a messenger WebView. Encode. Dark on light. Size 512 or 1024. Margin 4 or 8. Short payload.
- Download PNG. Confirm the file in Files or Downloads, not in Pictures. Open it. Scan it with the system Camera, not only with Lens.
- If Camera fails on the file, stop. That is contrast, logo, capacity, or a broken PNG — troubleshooting, not a share-sheet problem.
- If Camera succeeds, share the file from Files. Document attach in messengers. Nearby Share the file URI, not a screenshot. Chat recode: WhatsApp.
- Test with a second Android if the first is a Pixel and the crowd is not. Borrow a cheap phone. Gloss and sun will be worse than your desk. Paper: print.
What looks like a bug and is not
- Camera fails, Lens reads a screenshot of the generator. You tested Lens on live pixels and Camera on a gallery JPEG. Align the object.
- Nearby Share sent a 200 KB JPEG. You shared from Gallery. Share from Files.
- Samsung Internet downloaded into a folder you never open. Look in My Files → Downloads. The generator cannot rename OEM folders.
- A banking app’s WebView cannot scan. Use the system Camera on the printed code, or upload the PNG where they asked for an image.
- Add to Home Screen still asks for network on first load after a cache drop. It is a website.
- Yellow on white warned you and you downloaded anyway. That warning is contrast, not Android. Troubleshooting.
Honesty limits
We do not copy Google Camera help or Lens help. We do not promise every OEM will read ECC H with a logo from a 256 PNG at arm’s length. We do not patch WebViews. We do not decode HEIC logos. We do not run a short link that would “be easier to scan” — a short link is a server and a dependency. If you need scan counts, that is a different product. If you need a private static mark, stay here, save the PNG as a file, and treat Camera, Lens and Gallery as three different next hops.
iPhone Files versus Photos is not this page — iPhone. WhatsApp photo send is not this page — WhatsApp. Print stock is not this page — print. Each is a URL on this origin because Google’s unique-content rule is not satisfied by swapping the word Android for the word iPhone in the same essay.