diff --git a/metadata_test.go b/metadata_test.go index 9698b65..c21bf46 100644 --- a/metadata_test.go +++ b/metadata_test.go @@ -17,7 +17,6 @@ func TestSize(t *testing.T) { {"test.png", 400, 300}, {"test.webp", 550, 368}, } - for _, file := range files { size, err := Size(readFile(file.name)) if err != nil { diff --git a/options.go b/options.go index 7b2c2fb..4495a55 100644 --- a/options.go +++ b/options.go @@ -42,10 +42,10 @@ func (i Interpolator) String() string { type Angle int const ( - D0 Angle = C.VIPS_ANGLE_D0 - D90 Angle = C.VIPS_ANGLE_D90 - D180 Angle = C.VIPS_ANGLE_D180 - D270 Angle = C.VIPS_ANGLE_D270 + D0 Angle = 0 + D90 Angle = 90 + D180 Angle = 180 + D270 Angle = 270 ) type Direction int diff --git a/resize.go b/resize.go index c348a57..b10e01e 100644 --- a/resize.go +++ b/resize.go @@ -78,6 +78,18 @@ func Resize(buf []byte, o Options) ([]byte, error) { residual = float64(shrink) / factor } + // Zoom image if necessary + image, err = zoomImage(image, o.Zoom) + if err != nil { + return nil, err + } + + // Rotate / flip image if necessary + image, err = rotateAndFlipImage(image, o) + if err != nil { + return nil, err + } + // Transform image if necessary shouldTransform := o.Width != inWidth || o.Height != inHeight || o.AreaWidth > 0 || o.AreaHeight > 0 if shouldTransform { @@ -106,18 +118,6 @@ func Resize(buf []byte, o Options) ([]byte, error) { } } - // Zoom image if necessary - image, err = zoomImage(image, o.Zoom) - if err != nil { - return nil, err - } - - // Rotate / flip image if necessary - image, err = rotateImage(image, o) - if err != nil { - return nil, err - } - // Add watermark if necessary image, err = watermakImage(image, o.Watermark) if err != nil { @@ -167,7 +167,7 @@ func extractImage(image *C.struct__VipsImage, o Options) (*C.struct__VipsImage, return image, err } -func rotateImage(image *C.struct__VipsImage, o Options) (*C.struct__VipsImage, error) { +func rotateAndFlipImage(image *C.struct__VipsImage, o Options) (*C.struct__VipsImage, error) { var err error var direction Direction = -1 @@ -341,41 +341,35 @@ func calculateRotationAndFlip(image *C.struct__VipsImage, angle Angle) (Angle, b rotate := D0 flip := false - if angle == -1 { - switch vipsExifOrientation(image) { - case 6: - rotate = D90 - break - case 3: - rotate = D180 - break - case 8: - rotate = D270 - break - case 2: - flip = true - break // flip 1 - case 7: - flip = true - rotate = D90 - break // flip 6 - case 4: - flip = true - rotate = D180 - break // flip 3 - case 5: - flip = true - rotate = D270 - break // flip 8 - } - } else { - if angle == 90 { - rotate = D90 - } else if angle == 180 { - rotate = D180 - } else if angle == 270 { - rotate = D270 - } + if angle > 0 { + return rotate, flip + } + + switch vipsExifOrientation(image) { + case 6: + rotate = D90 + break + case 3: + rotate = D180 + break + case 8: + rotate = D270 + break + case 2: + flip = true + break // flip 1 + case 7: + flip = true + rotate = D90 + break // flip 6 + case 4: + flip = true + rotate = D180 + break // flip 3 + case 5: + flip = true + rotate = D270 + break // flip 8 } return rotate, flip diff --git a/vips.go b/vips.go index e675be8..06ce8c3 100644 --- a/vips.go +++ b/vips.go @@ -3,7 +3,6 @@ package bimg /* #cgo pkg-config: vips #include "vips.h" -#include "stdlib.h" */ import "C" @@ -97,7 +96,7 @@ func Shutdown() { } // Output to stdout vips collected data. Useful for debugging -func VipsDebug() { +func VipsDebugInfo() { C.im__print_all() }