mirror of
https://github.com/lovell/sharp.git
synced 2025-07-10 19:10:14 +02:00
Use shrink-on-load for WebP input
This commit is contained in:
parent
f8eab49962
commit
ee21d2991c
@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
### v0.15 - "*outfit*"
|
||||||
|
|
||||||
|
* Take advantage of libvips 8.3 features.
|
||||||
|
Use shrink-on-load for WebP input.
|
||||||
|
[#369](https://github.com/lovell/sharp/issues/369)
|
||||||
|
|
||||||
### v0.14 - "*needle*"
|
### v0.14 - "*needle*"
|
||||||
|
|
||||||
Requires libvips v8.2.3
|
Requires libvips v8.2.3
|
||||||
|
@ -303,7 +303,8 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
// but not when applying gamma correction or pre-resize extract
|
// but not when applying gamma correction or pre-resize extract
|
||||||
int shrink_on_load = 1;
|
int shrink_on_load = 1;
|
||||||
if (
|
if (
|
||||||
xshrink == yshrink && inputImageType == ImageType::JPEG && xshrink >= 2 &&
|
xshrink == yshrink && xshrink >= 2 &&
|
||||||
|
(inputImageType == ImageType::JPEG || inputImageType == ImageType::WEBP) &&
|
||||||
baton->gamma == 0 && baton->topOffsetPre == -1
|
baton->gamma == 0 && baton->topOffsetPre == -1
|
||||||
) {
|
) {
|
||||||
if (xshrink >= 8) {
|
if (xshrink >= 8) {
|
||||||
@ -329,15 +330,25 @@ class PipelineWorker : public AsyncWorker {
|
|||||||
xresidual = CalculateResidual(xshrink, xfactor);
|
xresidual = CalculateResidual(xshrink, xfactor);
|
||||||
yresidual = CalculateResidual(yshrink, yfactor);
|
yresidual = CalculateResidual(yshrink, yfactor);
|
||||||
// Reload input using shrink-on-load
|
// Reload input using shrink-on-load
|
||||||
|
VOption *option = VImage::option()->set("shrink", shrink_on_load);
|
||||||
if (baton->bufferInLength > 1) {
|
if (baton->bufferInLength > 1) {
|
||||||
VipsBlob *blob = vips_blob_new(nullptr, baton->bufferIn, baton->bufferInLength);
|
VipsBlob *blob = vips_blob_new(nullptr, baton->bufferIn, baton->bufferInLength);
|
||||||
image = VImage::jpegload_buffer(blob, VImage::option()->set("shrink", shrink_on_load));
|
if (inputImageType == ImageType::JPEG) {
|
||||||
|
// Reload JPEG buffer
|
||||||
|
image = VImage::jpegload_buffer(blob, option);
|
||||||
|
} else {
|
||||||
|
// Reload WebP buffer
|
||||||
|
image = VImage::webpload_buffer(blob, option);
|
||||||
|
}
|
||||||
vips_area_unref(reinterpret_cast<VipsArea*>(blob));
|
vips_area_unref(reinterpret_cast<VipsArea*>(blob));
|
||||||
} else {
|
} else {
|
||||||
image = VImage::jpegload(
|
if (inputImageType == ImageType::JPEG) {
|
||||||
const_cast<char*>((baton->fileIn).data()),
|
// Reload JPEG file
|
||||||
VImage::option()->set("shrink", shrink_on_load)
|
image = VImage::jpegload(const_cast<char*>((baton->fileIn).data()), option);
|
||||||
);
|
} else {
|
||||||
|
// Reload WebP file
|
||||||
|
image = VImage::webpload(const_cast<char*>((baton->fileIn).data()), option);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user