Originally written as an explainiation for my Precalculus teacher as to why student's work render incorrectly in Google Classroom.
Exchangeable image file format (officially Exif, according to JEIDA/JEITA/CIPA specifications) is a standard which allows for metadata to be stored in an image or audio file.
This is important, as it can store information about the image besides the image itself. Common applications include things such as date taken, shutter speed, camera type, or location, however any aribtrary key and value may be stored.
A few keys are required, such as the use of the Discrete Cosine Transformation (DCT) on image/jpeg
files, various algorithms and codecs used for processing RIFF files such as audio/wav
A photo taken on a modern device, such as an iPhone or similar, can contain dozens if not hundreds of these tags, however those found in most images are things such as bit depth, colour palette, compression algorithms, interlacement, filters, profiles, etc.
Most modern phones, although they can do tons, have shockingly low power use and small amounts of memory (ram, not disk space, although both are typically on one NAND) compared to a computer. For example, the iPads used at my school, the 1st generation iPad Mini, have a mere 512 MB of memory, while its predecessor contained a mere 256 MB. The typical computer now adays has 8, or 16 GB of RAM. This is over 32x the size of the original iPad's memory Also, mobile devices typically contain inferior CPUs as well, such as the original iPad Mini's A5 processor, clocking in at 0.8-1.0 GHz while a Intel i3 Skylake processor clocks in at 3.9 GHz. This means that a fairly low-end desktop processor is able to run nearly 4 billion computations per second. The storing of things such as rotation, etc, into the EXIF can allow for less memory use on each picture taken.
On your standard DLSR or other camera, all your pictures are taken landscape. If you wanted to take one portrait, you would simply rotate your camera when you took it, and when you wanted to view it. If you wanted to use it image processing software, you would simply rotate it upon import to your computer.
Nowadays, the same phenomenon occurs. When you rotate your phone or tablet to take a picture, you are rotating the lens as well.
In order to compensate for this, a 3-axis gyroscope is used. This sensor takes a small mass made of silicon is placed in an isolated chamber (think around 3 mm or so), in which a micro electro mechanical system (MEMS) is implemented.
I won't go into how these work in detail, however they are able to measure the acceleration and linear motion of this silicon blob and therefore determine the angular and linear orientation of the device.
The use of these sensors IC on logic board is used to determine how your device is rotated, thus rotating the GUI and such. When you take a picture, this value is stored under the orientation
key in the image's EXIF data.
There are 8 possible values for the orientation key, as shown below:
Value | Row #0 | Column #0 |
---|---|---|
1 | Top | Left Side |
2* | Top | Right Side |
3 | Bottom | Right Side |
4* | Bottom | Left Side |
5* | Left | Top |
6 | Right | Top |
7* | Right | Bottom |
8 | Left | Bottom |
* denotes an uncommon orientation, as the image would be flipped
A value of 1 is assumed, as it requires no rotation since the first row is the top and first column is the left side.
A value of 6, for example, requires a clockwise rotation of π/2 or 90º.
The graphic found on impulseadventure.com
shows this concept well:
A few ones I know of:
- Windows
- Windows Photo Viewer
- Google Classroom
For Google Classroom, simply downloading and opening elsewhere will not work. GC strips all EXIF data prior to upload. However, you can report an issue to Google Classroom asking for this issue to be resolved.
This can be done using ImageMagick:
mogrify input.jpg -auto-orient output.jpg
The use of mogrify
instead of convert
will allow overwriting of the input file.
- Photos (macOS and iOS)
- Most web browsers
- GNU Image Manipulation Program (GIMP)