diff --git a/fixtures/exif/Landscape_1.jpg b/fixtures/exif/Landscape_1.jpg new file mode 100644 index 0000000..8d513f4 Binary files /dev/null and b/fixtures/exif/Landscape_1.jpg differ diff --git a/fixtures/exif/Landscape_1_out.jpg b/fixtures/exif/Landscape_1_out.jpg new file mode 100644 index 0000000..da6c37f Binary files /dev/null and b/fixtures/exif/Landscape_1_out.jpg differ diff --git a/fixtures/exif/Landscape_2.jpg b/fixtures/exif/Landscape_2.jpg new file mode 100644 index 0000000..427a551 Binary files /dev/null and b/fixtures/exif/Landscape_2.jpg differ diff --git a/fixtures/exif/Landscape_2_out.jpg b/fixtures/exif/Landscape_2_out.jpg new file mode 100644 index 0000000..cbe146e Binary files /dev/null and b/fixtures/exif/Landscape_2_out.jpg differ diff --git a/fixtures/exif/Landscape_3.jpg b/fixtures/exif/Landscape_3.jpg new file mode 100644 index 0000000..d904dc9 Binary files /dev/null and b/fixtures/exif/Landscape_3.jpg differ diff --git a/fixtures/exif/Landscape_3_out.jpg b/fixtures/exif/Landscape_3_out.jpg new file mode 100644 index 0000000..6a72bbb Binary files /dev/null and b/fixtures/exif/Landscape_3_out.jpg differ diff --git a/fixtures/exif/Landscape_4.jpg b/fixtures/exif/Landscape_4.jpg new file mode 100644 index 0000000..f85f4eb Binary files /dev/null and b/fixtures/exif/Landscape_4.jpg differ diff --git a/fixtures/exif/Landscape_4_out.jpg b/fixtures/exif/Landscape_4_out.jpg new file mode 100644 index 0000000..12e6f84 Binary files /dev/null and b/fixtures/exif/Landscape_4_out.jpg differ diff --git a/fixtures/exif/Landscape_5.jpg b/fixtures/exif/Landscape_5.jpg new file mode 100644 index 0000000..1abf17e Binary files /dev/null and b/fixtures/exif/Landscape_5.jpg differ diff --git a/fixtures/exif/Landscape_5_out.jpg b/fixtures/exif/Landscape_5_out.jpg new file mode 100644 index 0000000..5e571c1 Binary files /dev/null and b/fixtures/exif/Landscape_5_out.jpg differ diff --git a/fixtures/exif/Landscape_6.jpg b/fixtures/exif/Landscape_6.jpg new file mode 100644 index 0000000..74d68dd Binary files /dev/null and b/fixtures/exif/Landscape_6.jpg differ diff --git a/fixtures/exif/Landscape_6_out.jpg b/fixtures/exif/Landscape_6_out.jpg new file mode 100644 index 0000000..467bd11 Binary files /dev/null and b/fixtures/exif/Landscape_6_out.jpg differ diff --git a/fixtures/exif/Landscape_7.jpg b/fixtures/exif/Landscape_7.jpg new file mode 100644 index 0000000..ba17a9e Binary files /dev/null and b/fixtures/exif/Landscape_7.jpg differ diff --git a/fixtures/exif/Landscape_7_out.jpg b/fixtures/exif/Landscape_7_out.jpg new file mode 100644 index 0000000..cee60e5 Binary files /dev/null and b/fixtures/exif/Landscape_7_out.jpg differ diff --git a/fixtures/exif/Landscape_8.jpg b/fixtures/exif/Landscape_8.jpg new file mode 100644 index 0000000..4c43c36 Binary files /dev/null and b/fixtures/exif/Landscape_8.jpg differ diff --git a/fixtures/exif/Landscape_8_out.jpg b/fixtures/exif/Landscape_8_out.jpg new file mode 100644 index 0000000..ff106a9 Binary files /dev/null and b/fixtures/exif/Landscape_8_out.jpg differ diff --git a/fixtures/exif/Portrait_1.jpg b/fixtures/exif/Portrait_1.jpg new file mode 100644 index 0000000..ab2d168 Binary files /dev/null and b/fixtures/exif/Portrait_1.jpg differ diff --git a/fixtures/exif/Portrait_1_out.jpg b/fixtures/exif/Portrait_1_out.jpg new file mode 100644 index 0000000..7c39a34 Binary files /dev/null and b/fixtures/exif/Portrait_1_out.jpg differ diff --git a/fixtures/exif/Portrait_2.jpg b/fixtures/exif/Portrait_2.jpg new file mode 100644 index 0000000..b2ccfd1 Binary files /dev/null and b/fixtures/exif/Portrait_2.jpg differ diff --git a/fixtures/exif/Portrait_2_out.jpg b/fixtures/exif/Portrait_2_out.jpg new file mode 100644 index 0000000..e06b994 Binary files /dev/null and b/fixtures/exif/Portrait_2_out.jpg differ diff --git a/fixtures/exif/Portrait_3.jpg b/fixtures/exif/Portrait_3.jpg new file mode 100644 index 0000000..87b0da4 Binary files /dev/null and b/fixtures/exif/Portrait_3.jpg differ diff --git a/fixtures/exif/Portrait_3_out.jpg b/fixtures/exif/Portrait_3_out.jpg new file mode 100644 index 0000000..2277bd1 Binary files /dev/null and b/fixtures/exif/Portrait_3_out.jpg differ diff --git a/fixtures/exif/Portrait_4.jpg b/fixtures/exif/Portrait_4.jpg new file mode 100644 index 0000000..81be6ad Binary files /dev/null and b/fixtures/exif/Portrait_4.jpg differ diff --git a/fixtures/exif/Portrait_4_out.jpg b/fixtures/exif/Portrait_4_out.jpg new file mode 100644 index 0000000..1e398f2 Binary files /dev/null and b/fixtures/exif/Portrait_4_out.jpg differ diff --git a/fixtures/exif/Portrait_5.jpg b/fixtures/exif/Portrait_5.jpg new file mode 100644 index 0000000..3384800 Binary files /dev/null and b/fixtures/exif/Portrait_5.jpg differ diff --git a/fixtures/exif/Portrait_5_out.jpg b/fixtures/exif/Portrait_5_out.jpg new file mode 100644 index 0000000..d5f3241 Binary files /dev/null and b/fixtures/exif/Portrait_5_out.jpg differ diff --git a/fixtures/exif/Portrait_6.jpg b/fixtures/exif/Portrait_6.jpg new file mode 100644 index 0000000..40f5199 Binary files /dev/null and b/fixtures/exif/Portrait_6.jpg differ diff --git a/fixtures/exif/Portrait_6_out.jpg b/fixtures/exif/Portrait_6_out.jpg new file mode 100644 index 0000000..c223077 Binary files /dev/null and b/fixtures/exif/Portrait_6_out.jpg differ diff --git a/fixtures/exif/Portrait_7.jpg b/fixtures/exif/Portrait_7.jpg new file mode 100644 index 0000000..b590bfc Binary files /dev/null and b/fixtures/exif/Portrait_7.jpg differ diff --git a/fixtures/exif/Portrait_7_out.jpg b/fixtures/exif/Portrait_7_out.jpg new file mode 100644 index 0000000..e2f6acf Binary files /dev/null and b/fixtures/exif/Portrait_7_out.jpg differ diff --git a/fixtures/exif/Portrait_8.jpg b/fixtures/exif/Portrait_8.jpg new file mode 100644 index 0000000..e15ebe4 Binary files /dev/null and b/fixtures/exif/Portrait_8.jpg differ diff --git a/fixtures/exif/Portrait_8_out.jpg b/fixtures/exif/Portrait_8_out.jpg new file mode 100644 index 0000000..ebe87f3 Binary files /dev/null and b/fixtures/exif/Portrait_8_out.jpg differ diff --git a/resize.go b/resize.go index 1e2725e..e60f08f 100644 --- a/resize.go +++ b/resize.go @@ -518,7 +518,7 @@ func calculateRotationAndFlip(image *C.VipsImage, angle Angle) (Angle, bool) { break // flip 1 case 7: flip = true - rotate = D90 + rotate = D270 break // flip 6 case 4: flip = true @@ -526,7 +526,7 @@ func calculateRotationAndFlip(image *C.VipsImage, angle Angle) (Angle, bool) { break // flip 3 case 5: flip = true - rotate = D270 + rotate = D90 break // flip 8 } diff --git a/resize_test.go b/resize_test.go index 28e3109..a78f6aa 100644 --- a/resize_test.go +++ b/resize_test.go @@ -3,6 +3,7 @@ package bimg import ( "bytes" "crypto/md5" + "fmt" "image" "image/jpeg" "io/ioutil" @@ -393,6 +394,65 @@ func TestResizePngWithTransparency(t *testing.T) { Write("fixtures/transparent_out.png", newImg) } +func TestRotationAndFlip(t *testing.T) { + files := []struct { + Name string + Angle Angle + Flip bool + }{ + {"Landscape_1", 0, false}, + {"Landscape_2", 0, true}, + {"Landscape_3", D180, false}, + {"Landscape_4", D180, true}, + {"Landscape_5", D90, true}, + {"Landscape_6", D90, false}, + {"Landscape_7", D270, true}, + {"Landscape_8", D270, false}, + {"Portrait_1", 0, false}, + {"Portrait_2", 0, true}, + {"Portrait_3", D180, false}, + {"Portrait_4", D180, true}, + {"Portrait_5", D90, true}, + {"Portrait_6", D90, false}, + {"Portrait_7", D270, true}, + {"Portrait_8", D270, false}, + } + + for _, file := range files { + img, err := os.Open(fmt.Sprintf("fixtures/exif/%s.jpg", file.Name)) + if err != nil { + t.Fatal(err) + } + + buf, err := ioutil.ReadAll(img) + if err != nil { + t.Fatal(err) + } + img.Close() + + image, _, err := loadImage(buf) + if err != nil { + t.Fatal(err) + } + + angle, flip := calculateRotationAndFlip(image, D0) + if angle != file.Angle { + t.Errorf("Rotation for %v expected to be %v. got %v", file.Name, file.Angle, angle) + } + if flip != file.Flip { + t.Errorf("Flip for %v expected to be %v. got %v", file.Name, file.Flip, flip) + } + + // Visual debugging. + newImg, err := Resize(buf, Options{}) + if err != nil { + t.Fatal(err) + } + + Write(fmt.Sprintf("fixtures/exif/%s_out.jpg", file.Name), newImg) + } +} + func TestIfBothSmartCropOptionsAreIdentical(t *testing.T) { if !(VipsMajorVersion >= 8 && VipsMinorVersion > 4) { t.Skipf("Skipping this test, libvips doesn't meet version requirement %s > 8.4", VipsVersion)