RORK LABJP
MAX — Rork Max generates native Swift for every Apple platform, from iPhone to Vision ProNATIVE — It reaches native capabilities like AR/LiDAR, Metal 3D, Dynamic Island, Live Activities, and HealthKitPUBLISH — Publish to the App Store in two clicks; Rork Max is $200/monthEXPO — Standard Rork builds iOS and Android together via React Native (Expo) and is free to startPROMPT — Describe your app idea in plain English and Rork generates deployable, store-ready codePRICE — Standard Rork's paid plans start at $25/month: build with it first, then consider Max for native featuresMAX — Rork Max generates native Swift for every Apple platform, from iPhone to Vision ProNATIVE — It reaches native capabilities like AR/LiDAR, Metal 3D, Dynamic Island, Live Activities, and HealthKitPUBLISH — Publish to the App Store in two clicks; Rork Max is $200/monthEXPO — Standard Rork builds iOS and Android together via React Native (Expo) and is free to startPROMPT — Describe your app idea in plain English and Rork generates deployable, store-ready codePRICE — Standard Rork's paid plans start at $25/month: build with it first, then consider Max for native features
Articles/Dev Tools
Dev Tools/2026-06-21Advanced

Your Rork App's Photos Look Sideways Only After Upload — Normalizing EXIF Orientation and Stripping Location Metadata

A photo that looks upright in your app rotates 90 degrees once it hits your server. The cause is the EXIF Orientation tag. Here's how to bake the rotation into pixels and strip location metadata with expo-image-manipulator before uploading.

Rork434Expo90Image UploadEXIFPrivacy4

Premium Article

A user uploads a photo. On their own phone it looks perfectly upright, but the version stored on your server — or shown to another user — is rotated 90 degrees. As an indie developer running image-heavy apps, I have hit this more than once. The first time, a user told me "the photo I uploaded shows up sideways on my friend's screen," and I spent half a day chasing it. The short version: the pixels were never rotated. The rotation lived in a separate place, the EXIF Orientation tag, and the two sides of the pipeline disagreed about whether to read it.

The same structure shows up in apps you build with Rork. React Native's <Image> respects the Orientation tag and renders correctly, but the server you upload to, the image library that resizes it, or a third-party preview often ignore the tag entirely. Today we'll build the piece that prevents all of this: bake the rotation into the pixels and drop the EXIF — including location — before the file is uploaded.

It Looks Right in the App but Tilts Only After Transfer

Start by isolating the symptom. Three observations almost always confirm an Orientation issue:

  1. The same file looks upright inside your app's <Image>
  2. Uploaded to a server and opened in a browser or another library, it is rotated
  3. Portrait shots break far more often than landscape ones

When all three line up, it is the Orientation tag. An iPhone camera, even when held vertically, stores the raw landscape pixels from the sensor and writes "rotate this 90 degrees clockwise when displaying" into the Orientation tag. <Image> reads the tag and shows it correctly; a server that ignores the tag shows the raw, sideways pixels. That is the whole disagreement.

The Cause Is EXIF Orientation — the Pixels Never Moved

The Orientation tag is an integer from 1 to 8 describing a rotation-and-flip combination. In practice you'll meet four of them.

ValueMeaningTypical source
1No rotation (upright)Landscape capture, already normalized
3Rotated 180 degreesPhone held upside down
6Upright after 90 degrees clockwisePortrait capture (most common)
8Upright after 90 degrees counter-clockwisePortrait, opposite way

Value 6 dominates, and every case I was reported was a 6. The key point: when the value isn't 1, the pixels and the display instruction are out of sync. Since your upload target ignores the tag, the most portable fix is to physically rotate the pixels on your side and reset the tag to 1.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You can finally diagnose why a photo looks upright on your device but rotates 90 degrees on your server or a friend's screen, reading it straight from the EXIF Orientation value (1-8)
You'll get a working expo-image-picker + expo-image-manipulator implementation that bakes rotation into pixels and removes EXIF before upload
You'll be able to stop leaking the GPS location embedded in user photos before the file ever leaves the device
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-05-21
Rork iOS App Rejected with ITMS-90683 on TestFlight — How to Fix Missing Purpose Strings via app.json
If your Rork-built iOS app passes upload but gets an email titled ITMS-90683: Missing Purpose String in Info.plist, this guide walks through the real cause and the permanent fix via app.json, based on 12 years of shipping personal iOS apps with the same problem appearing across new SDK updates.
Dev Tools2026-06-21
Your Notification Opens the App but Lands on Home — Routing Rork Apps by Launch State
How to make a notification tap reliably reach its target screen. We cover the three launch states — killed, background, foreground — and a pending-route design that never drops a tap that arrives before navigation is ready.
Dev Tools2026-06-20
Why Your Rork List Starts Duplicating and Dropping Rows as It Grows — Cursor Pagination and Resilient Refetch State
The naive offset pagination Rork scaffolds for you quietly breaks the moment your list changes underneath the user. Here is how to move to a cursor contract, fold every fetch state into one usePaginatedList hook, and recover failed page loads with exponential backoff — implementation first.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →