exif-orientation.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*!
  2. {
  3. "name": "EXIF Orientation",
  4. "property": "exiforientation",
  5. "tags": ["image"],
  6. "builderAliases": ["exif_orientation"],
  7. "async": true,
  8. "authors": ["Paul Sayre"],
  9. "notes": [{
  10. "name": "Article by Dave Perrett",
  11. "href": "https://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/"
  12. },{
  13. "name": "Article by Calvin Hass",
  14. "href": "https://www.impulseadventure.com/photo/exif-orientation.html"
  15. }]
  16. }
  17. !*/
  18. /* DOC
  19. Detects support for EXIF Orientation in JPEG images.
  20. iOS looks at the EXIF Orientation flag in JPEGs and rotates the image accordingly. Most desktop browsers just ignore this data.
  21. */
  22. define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
  23. // Bug trackers:
  24. // bugzil.la/298619 (unimplemented)
  25. // crbug.com/56845 (looks incomplete)
  26. // webk.it/19688 (available upstream but its up all ports to turn on individually)
  27. Modernizr.addAsyncTest(function() {
  28. var img = new Image();
  29. img.onerror = function() {
  30. addTest('exiforientation', false, {aliases: ['exif-orientation']});
  31. };
  32. img.onload = function() {
  33. addTest('exiforientation', img.width !== 2, {aliases: ['exif-orientation']});
  34. };
  35. // There may be a way to shrink this more, it's a 1x2 white jpg with the orientation flag set to 6
  36. img.src = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAASUkqAAgAAAABABIBAwABAAAABgASAAAAAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigD/2Q==';
  37. });
  38. });