mirror of
https://github.com/talgo-cloud/bimg.git
synced 2026-03-07 21:48:13 -08:00
fix(#33): bad auto rotatino
This commit is contained in:
parent
ca206cdee1
commit
67221723ca
4 changed files with 47 additions and 55 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
90
resize.go
90
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
|
||||
|
|
|
|||
3
vips.go
3
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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue