Version 2.0 – EXIF rotation in JavaScript
FixMyStreet has had a nice multiple image uploader since version 1.8. This uses
multiple input type=file
fields, progressively enhanced to add
drag’n’drop, image preview, and uploading in the background whilst you fill in
the rest of the form.
In version 1.8.4, we patched the third party library we use, dropzone, to correctly orient photos in the image preview. We did this by including a cut-down version of exif-js to read in the EXIF orientation data, and then make sure we rotated the image as instructed in JavaScript before drawing the thumbnail preview. The rotation was accomplished by moving the image so its centre was over (0,0), rotating the appropriate amount, and then re-translating it back.
For this new version, we had a different bug to fix. If the user had uploaded a picture, submitted the form, and was shown the form again due to a server side error of some sort (some validation not caught by client-side validation, for example, or because you were logging in during the reporting process), the image for the preview was then being loaded from the server (where it had already been uploaded), not the client, and not displaying. We patched the exif-js library., Now, if it is given a URL rather than a data: string, it will go off and fetch the image so that it can read out the orientation data.
If you have any questions, or problems installing the code, please do get in touch, or post on our mailing list.