Skip to content

Commit

Permalink
Merge pull request davidbyttow#32 from davidbyttow/d/imagetype
Browse files Browse the repository at this point in the history
Return final image type from Apply
  • Loading branch information
davidbyttow committed Feb 23, 2018
2 parents b2ed538 + 07dea33 commit 15bad1e
Show file tree
Hide file tree
Showing 17 changed files with 31 additions and 24 deletions.
Binary file modified assets/fixtures/canyon.TestRotate.golden.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/colors.TestResizeCrop.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/shapes.TestBottomRightCrop.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/shapes.TestCenterCrop.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/shapes.TestEmbed.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/shapes.TestRelativeResizeShapes.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/shapes.TestResizeShapes.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/fixtures/tomatoes.TestOffsetCropBounds.golden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion cmd/bench/soak/soak.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func soak() {
h += rand.Intn(variance)
}
buf := loadFile(*imageFlag)
_, err := vips.NewTransform().
_, _, err := vips.NewTransform().
LoadBuffer(buf).
Resize(w, h).
OutputBytes().
Expand Down
2 changes: 1 addition & 1 deletion cmd/examples/embed/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func main() {
}

func embed(inputFile, outputFile string) error {
_, err := vips.NewTransform().
_, _, err := vips.NewTransform().
LoadFile(inputFile).
Resize(1200, 1200).
Embed(vips.ExtendBlack).
Expand Down
2 changes: 1 addition & 1 deletion cmd/examples/invert/invert.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func main() {
}

func invert(inputFile, outputFile string) error {
_, err := vips.NewTransform().
_, _, err := vips.NewTransform().
LoadFile(inputFile).
Invert().
OutputFile(outputFile).
Expand Down
2 changes: 1 addition & 1 deletion cmd/examples/resize/resize.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func main() {
}

func resize(inputFile, outputFile string) error {
_, err := vips.NewTransform().
_, _, err := vips.NewTransform().
LoadFile(inputFile).
Scale(0.2).
OutputFile(outputFile).
Expand Down
18 changes: 10 additions & 8 deletions pkg/vips/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,11 @@ func vipsLoadFromBuffer(buf []byte) (*C.VipsImage, ImageType, error) {
return image, imageType, nil
}

func vipsExportBuffer(image *C.VipsImage, params *ExportParams) ([]byte, error) {
func vipsExportBuffer(image *C.VipsImage, params *ExportParams) ([]byte, ImageType, error) {
tmpImage, err := vipsPrepareForExport(image, params)

if err != nil {
return nil, err
return nil, ImageTypeUnknown, err
}

// If these are equal, then we don't want to deref the original image as
Expand All @@ -145,21 +145,22 @@ func vipsExportBuffer(image *C.VipsImage, params *ExportParams) ([]byte, error)
quality := C.int(params.Quality)
lossless := C.int(boolToInt(params.Lossless))
stripMetadata := C.int(boolToInt(params.StripMetadata))
format := params.Format

if params.Format != ImageTypeUnknown && !IsTypeSupported(params.Format) {
return nil, fmt.Errorf("cannot save to %#v", ImageTypes[params.Format])
if format != ImageTypeUnknown && !IsTypeSupported(format) {
return nil, ImageTypeUnknown, fmt.Errorf("cannot save to %#v", ImageTypes[format])
}

if params.BackgroundColor != nil {
tmpImage, err = vipsFlattenBackground(tmpImage, *params.BackgroundColor)
if err != nil {
return nil, err
return nil, ImageTypeUnknown, err
}
}

var ptr unsafe.Pointer

switch params.Format {
switch format {
case ImageTypeWEBP:
incOpCounter("save_webp_buffer")
cErr = C.save_webp_buffer(tmpImage, &ptr, &cLen, stripMetadata, quality, lossless)
Expand All @@ -171,16 +172,17 @@ func vipsExportBuffer(image *C.VipsImage, params *ExportParams) ([]byte, error)
cErr = C.save_tiff_buffer(tmpImage, &ptr, &cLen)
default:
incOpCounter("save_jpeg_buffer")
format = ImageTypeJPEG
cErr = C.save_jpeg_buffer(tmpImage, &ptr, &cLen, stripMetadata, quality, interlaced)
}

if int(cErr) != 0 {
return nil, handleVipsError()
return nil, ImageTypeUnknown, handleVipsError()
}

buf := C.GoBytes(ptr, C.int(cLen))
C.g_free(C.gpointer(ptr))
return buf, nil
return buf, format, nil
}

func isTypeSupported(imageType ImageType) bool {
Expand Down
4 changes: 2 additions & 2 deletions pkg/vips/leak_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ func TestCleanup(t *testing.T) {
go func(i int, tr transform) {
defer wg.Done()

buf, err := vips.NewTransform().
LoadFile("fixtures/canyon.jpg").
buf, _, err := vips.NewTransform().
LoadFile("../../assets/fixtures/canyon.jpg").
ResizeStrategy(tr.Resize).
Resize(tr.Width, tr.Height).
Flip(tr.Flip).
Expand Down
2 changes: 1 addition & 1 deletion pkg/vips/regression_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ func goldenTest(t *testing.T, file string, fn func(t *vips.Transform)) {
}
tx := vips.NewTransform().LoadFile(file)
fn(tx)
buf, err := tx.Apply()
buf, _, err := tx.Apply()
require.NoError(t, err)
assertGoldenMatch(t, file, buf)
}
Expand Down
20 changes: 12 additions & 8 deletions pkg/vips/transform.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import "C"

import (
"bytes"
"errors"
"io"
"io/ioutil"
"math"
Expand Down Expand Up @@ -292,7 +293,7 @@ func (t *Transform) BackgroundColor(color Color) *Transform {

// Apply loads the image, applies the transform, and exports it according
// to the parameters specified
func (t *Transform) Apply() ([]byte, error) {
func (t *Transform) Apply() ([]byte, ImageType, error) {
defer ShutdownThread()
defer func() {
t.source = nil
Expand All @@ -301,13 +302,16 @@ func (t *Transform) Apply() ([]byte, error) {

input, imageType, err := t.importImage()
if err != nil {
return nil, err
return nil, ImageTypeUnknown, err
}
if input == nil {
return nil, ImageTypeUnknown, errors.New("vips: image not found")
}

transformed, err := t.transform(input, imageType)

if err != nil {
return nil, err
return nil, ImageTypeUnknown, err
}

return t.exportImage(transformed, imageType)
Expand All @@ -328,26 +332,26 @@ func (t *Transform) importImage() (*C.VipsImage, ImageType, error) {
return vipsLoadFromBuffer(t.source)
}

func (t *Transform) exportImage(image *C.VipsImage, imageType ImageType) ([]byte, error) {
func (t *Transform) exportImage(image *C.VipsImage, imageType ImageType) ([]byte, ImageType, error) {
if t.export.Format == ImageTypeUnknown {
t.export.Format = imageType
}

defer C.g_object_unref(C.gpointer(image))

buf, err := vipsExportBuffer(image, t.export)
buf, format, err := vipsExportBuffer(image, t.export)
if err != nil {
return nil, err
return nil, ImageTypeUnknown, err
}

if t.export.Writer != nil {
_, err = t.export.Writer.Write(buf)
if err != nil {
return buf, err
return buf, format, err
}
}

return buf, err
return buf, format, err
}

type Blackboard struct {
Expand Down
3 changes: 2 additions & 1 deletion pkg/vips/transform_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ import (
)

func TestTransform(t *testing.T) {
buf, err := vips.NewTransform().
buf, format, err := vips.NewTransform().
LoadFile("../../assets/fixtures/canyon.jpg").
Scale(0.25).
Apply()

require.NoError(t, err)
require.True(t, len(buf) > 0)
assert.Equal(t, format, vips.ImageTypeJPEG)

image, err := vips.NewImageFromBuffer(buf)
require.NoError(t, err)
Expand Down

0 comments on commit 15bad1e

Please sign in to comment.