Merge pull request #368 from exaring/fix-shrinking-on-small-webp-images

Fix for blurry images from WEBP input and small output dimensions
master
Tom 4 years ago committed by GitHub
commit b29a573563
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -449,11 +449,15 @@ func shrinkImage(image *C.VipsImage, o Options, residual float64, shrink int) (*
} }
func shrinkOnLoad(buf []byte, input *C.VipsImage, imageType ImageType, factor float64, shrink int) (*C.VipsImage, float64, error) { func shrinkOnLoad(buf []byte, input *C.VipsImage, imageType ImageType, factor float64, shrink int) (*C.VipsImage, float64, error) {
var image *C.VipsImage var (
var err error image *C.VipsImage
err error
)
if shrink < 2 {
return nil, 0, fmt.Errorf("only available for shrink >=2")
}
// Reload input using shrink-on-load
if imageType == JPEG && shrink >= 2 {
shrinkOnLoad := 1 shrinkOnLoad := 1
// Recalculate integral shrink and double residual // Recalculate integral shrink and double residual
switch { switch {
@ -468,10 +472,13 @@ func shrinkOnLoad(buf []byte, input *C.VipsImage, imageType ImageType, factor fl
shrinkOnLoad = 2 shrinkOnLoad = 2
} }
// Reload input using shrink-on-load
switch imageType {
case JPEG:
image, err = vipsShrinkJpeg(buf, input, shrinkOnLoad) image, err = vipsShrinkJpeg(buf, input, shrinkOnLoad)
} else if imageType == WEBP { case WEBP:
image, err = vipsShrinkWebp(buf, input, shrink) image, err = vipsShrinkWebp(buf, input, shrinkOnLoad)
} else { default:
return nil, 0, fmt.Errorf("%v doesn't support shrink on load", ImageTypeName(imageType)) return nil, 0, fmt.Errorf("%v doesn't support shrink on load", ImageTypeName(imageType))
} }

Loading…
Cancel
Save