From 944fcc216fa6aa6936a701ad5de23c3931a43635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 2 Aug 2024 09:37:00 +0200 Subject: [PATCH] Fix images.AutoOrient regression Broken in v0.130.0. Added a integration test to avoid future breakage. Fixes #12712 --- resources/images/auto_orient.go | 4 ++- resources/images/images_integration_test.go | 36 ++++++++++++++++++++ resources/testdata/exif/orientation6.jpg | Bin 0 -> 982 bytes 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 resources/images/images_integration_test.go create mode 100644 resources/testdata/exif/orientation6.jpg diff --git a/resources/images/auto_orient.go b/resources/images/auto_orient.go index ed86979e1cf..a4a61976d21 100644 --- a/resources/images/auto_orient.go +++ b/resources/images/auto_orient.go @@ -19,6 +19,7 @@ import ( "github.com/disintegration/gift" "github.com/gohugoio/hugo/resources/images/exif" + "github.com/spf13/cast" ) var _ gift.Filter = (*autoOrientFilter)(nil) @@ -49,7 +50,8 @@ func (f autoOrientFilter) Bounds(srcBounds image.Rectangle) image.Rectangle { func (f autoOrientFilter) AutoOrient(exifInfo *exif.ExifInfo) gift.Filter { if exifInfo != nil { - if orientation, ok := exifInfo.Tags["Orientation"].(int); ok { + if v, ok := exifInfo.Tags["Orientation"]; ok { + orientation := cast.ToInt(v) if filter, ok := transformationFilters[orientation]; ok { return filter } diff --git a/resources/images/images_integration_test.go b/resources/images/images_integration_test.go new file mode 100644 index 00000000000..156de62592f --- /dev/null +++ b/resources/images/images_integration_test.go @@ -0,0 +1,36 @@ +// Copyright 2024 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package images_test + +import ( + "testing" + + "github.com/gohugoio/hugo/hugolib" +) + +func TestAutoOrient(t *testing.T) { + files := ` +-- hugo.toml -- +-- assets/rotate270.jpg -- +sourcefilename: ../testdata/exif/orientation6.jpg +-- layouts/index.html -- +{{ $img := resources.Get "rotate270.jpg" }} +W/H original: {{ $img.Width }}/{{ $img.Height }} +{{ $rotated := $img.Filter images.AutoOrient }} +W/H rotated: {{ $rotated.Width }}/{{ $rotated.Height }} +` + + b := hugolib.Test(t, files) + b.AssertFileContent("public/index.html", "W/H original: 80/40\n\nW/H rotated: 40/80") +} diff --git a/resources/testdata/exif/orientation6.jpg b/resources/testdata/exif/orientation6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e2c86415a65d641722ce33a98f61d5bed9da762 GIT binary patch literal 982 zcmbV}Nl+6(6oy|<&txVu31pHF1b*EtW{J2E~qyUkZ>cSAXQcgDySz> zaXSUvxuN2A62SS&VN;2q{nMtLg5)y8qX2zSqWxF%B>CTl{qZrKOMo z00QvD2^19p3r-2Z&1!&ZvM{0>NP5`AphpLsLBSDVT;Y8J(CG&@oZEq`8AUkoB(&

ECwfnwI(_Esx$}J& zE?yeAeC6u3>o;!=-M(}8-u(v;A3c8Z^x4Sh*!Zj0Z{EIp|Ka1r)Ths1zJB}uWBRAb zh0hqmije)mg-sv~%Tks%xd_vYgUT$Iq*X2qntIxsAH zQoZA8QzqIh+24V+{})*VY@TZjY?R>RQ5mw~S6?u8qIai=ZyIFgmhA3UnCXk&!E-uY XIcJTMW>%CvN`_M+mxfDZ8>7Dg!SMnV literal 0 HcmV?d00001