-
Notifications
You must be signed in to change notification settings - Fork 0
/
imreadort.m
79 lines (62 loc) · 1.99 KB
/
imreadort.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function [outpict,varargout] = imreadort(fname)
% OUTPICT = IMREADORT(FILENAME)
% [OUTPICT MAP ALPHA] = IMREADORT(FILENAME)
% Read an image from an image file and reorient it based on
% available EXIF metadata. If no orientation tag exists,
% image will be returned as-is.
%
% While this tool is intended for use with JPG photographs, some
% small effort has been made to allow it to be used as a general
% imread() wrapper for reading most types of images. This obviously
% won't work well for many cases (e.g. multiframe GIF/TIF, etc).
%
% I don't doubt that there are tag configurations which will
% foil this simple tool. Provide me with examples.
%
% FILENAME is the full or relative path to an image file.
%
% See also: imread, imfinfo, gifread, gifwrite
% read the image; don't care what it is
[outpict map alpha] = imread(fname);
S = imfinfo(fname);
% if image has no orientation tag, return image as-is
% if orientation tag is not numeric 1-8, return image as-is
% i have seen old images with 'horizontal' orientation regardless of geometry or
% state of 'rotation' tag. i'm ignoring non-numeric orientation tags until i have
% a less ridiculous description of their intended use.
% using fliplr(), flipud(), and rot90() don't work for multichannel images prior to R2014a
if isfield(S,'Orientation')
switch S.Orientation
case 1
% nothing to do
case 2
outpict = flip(outpict,2);
case 3
outpict = imrotate(outpict,180); % or two flips
case 4
outpict = flip(outpict,1);
case 5
outpict = imrotate(outpict,-90);
outpict = flip(outpict,2);
case 6
outpict = imrotate(outpict,-90);
case 7
outpict = imrotate(outpict,90);
outpict = flip(outpict,2);
case 8
outpict = imrotate(outpict,90);
end
end
if nargout >= 2
varargout{1} = map;
end
if nargout == 3
varargout{2} = alpha;
end
end % END MAIN SCOPE
% image is portrait if:
% if ORT is 1:4 and AR<1
% or ORT is 5:8 and AR>1
% image is landscape if:
% if ORT is 1:4 and AR>1
% or ORT is 5:8 and AR<1