auto_orient.go - hugo - [fork] hugo port for 9front
(HTM) git clone https://git.drkhsh.at/hugo.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
auto_orient.go (1672B)
---
1 // Copyright 2024 The Hugo Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13
14 package images
15
16 import (
17 "image"
18 "image/draw"
19
20 "github.com/disintegration/gift"
21 "github.com/gohugoio/hugo/resources/images/exif"
22 "github.com/spf13/cast"
23 )
24
25 var _ gift.Filter = (*autoOrientFilter)(nil)
26
27 var transformationFilters = map[int]gift.Filter{
28 2: gift.FlipHorizontal(),
29 3: gift.Rotate180(),
30 4: gift.FlipVertical(),
31 5: gift.Transpose(),
32 6: gift.Rotate270(),
33 7: gift.Transverse(),
34 8: gift.Rotate90(),
35 }
36
37 type autoOrientFilter struct{}
38
39 type ImageFilterFromOrientationProvider interface {
40 AutoOrient(exifInfo *exif.ExifInfo) gift.Filter
41 }
42
43 func (f autoOrientFilter) Draw(dst draw.Image, src image.Image, options *gift.Options) {
44 panic("not supported")
45 }
46
47 func (f autoOrientFilter) Bounds(srcBounds image.Rectangle) image.Rectangle {
48 panic("not supported")
49 }
50
51 func (f autoOrientFilter) AutoOrient(exifInfo *exif.ExifInfo) gift.Filter {
52 if exifInfo != nil {
53 if v, ok := exifInfo.Tags["Orientation"]; ok {
54 orientation := cast.ToInt(v)
55 if filter, ok := transformationFilters[orientation]; ok {
56 return filter
57 }
58 }
59 }
60
61 return nil
62 }