mirror of
https://github.com/talgo-cloud/bimg.git
synced 2026-03-15 10:25:55 -07: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.png", 400, 300},
|
||||||
{"test.webp", 550, 368},
|
{"test.webp", 550, 368},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
size, err := Size(readFile(file.name))
|
size, err := Size(readFile(file.name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -42,10 +42,10 @@ func (i Interpolator) String() string {
|
||||||
type Angle int
|
type Angle int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
D0 Angle = C.VIPS_ANGLE_D0
|
D0 Angle = 0
|
||||||
D90 Angle = C.VIPS_ANGLE_D90
|
D90 Angle = 90
|
||||||
D180 Angle = C.VIPS_ANGLE_D180
|
D180 Angle = 180
|
||||||
D270 Angle = C.VIPS_ANGLE_D270
|
D270 Angle = 270
|
||||||
)
|
)
|
||||||
|
|
||||||
type Direction int
|
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
|
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
|
// Transform image if necessary
|
||||||
shouldTransform := o.Width != inWidth || o.Height != inHeight || o.AreaWidth > 0 || o.AreaHeight > 0
|
shouldTransform := o.Width != inWidth || o.Height != inHeight || o.AreaWidth > 0 || o.AreaHeight > 0
|
||||||
if shouldTransform {
|
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
|
// Add watermark if necessary
|
||||||
image, err = watermakImage(image, o.Watermark)
|
image, err = watermakImage(image, o.Watermark)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -167,7 +167,7 @@ func extractImage(image *C.struct__VipsImage, o Options) (*C.struct__VipsImage,
|
||||||
return image, err
|
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 err error
|
||||||
var direction Direction = -1
|
var direction Direction = -1
|
||||||
|
|
||||||
|
|
@ -341,41 +341,35 @@ func calculateRotationAndFlip(image *C.struct__VipsImage, angle Angle) (Angle, b
|
||||||
rotate := D0
|
rotate := D0
|
||||||
flip := false
|
flip := false
|
||||||
|
|
||||||
if angle == -1 {
|
if angle > 0 {
|
||||||
switch vipsExifOrientation(image) {
|
return rotate, flip
|
||||||
case 6:
|
}
|
||||||
rotate = D90
|
|
||||||
break
|
switch vipsExifOrientation(image) {
|
||||||
case 3:
|
case 6:
|
||||||
rotate = D180
|
rotate = D90
|
||||||
break
|
break
|
||||||
case 8:
|
case 3:
|
||||||
rotate = D270
|
rotate = D180
|
||||||
break
|
break
|
||||||
case 2:
|
case 8:
|
||||||
flip = true
|
rotate = D270
|
||||||
break // flip 1
|
break
|
||||||
case 7:
|
case 2:
|
||||||
flip = true
|
flip = true
|
||||||
rotate = D90
|
break // flip 1
|
||||||
break // flip 6
|
case 7:
|
||||||
case 4:
|
flip = true
|
||||||
flip = true
|
rotate = D90
|
||||||
rotate = D180
|
break // flip 6
|
||||||
break // flip 3
|
case 4:
|
||||||
case 5:
|
flip = true
|
||||||
flip = true
|
rotate = D180
|
||||||
rotate = D270
|
break // flip 3
|
||||||
break // flip 8
|
case 5:
|
||||||
}
|
flip = true
|
||||||
} else {
|
rotate = D270
|
||||||
if angle == 90 {
|
break // flip 8
|
||||||
rotate = D90
|
|
||||||
} else if angle == 180 {
|
|
||||||
rotate = D180
|
|
||||||
} else if angle == 270 {
|
|
||||||
rotate = D270
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rotate, flip
|
return rotate, flip
|
||||||
|
|
|
||||||
3
vips.go
3
vips.go
|
|
@ -3,7 +3,6 @@ package bimg
|
||||||
/*
|
/*
|
||||||
#cgo pkg-config: vips
|
#cgo pkg-config: vips
|
||||||
#include "vips.h"
|
#include "vips.h"
|
||||||
#include "stdlib.h"
|
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
|
|
@ -97,7 +96,7 @@ func Shutdown() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output to stdout vips collected data. Useful for debugging
|
// Output to stdout vips collected data. Useful for debugging
|
||||||
func VipsDebug() {
|
func VipsDebugInfo() {
|
||||||
C.im__print_all()
|
C.im__print_all()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue