From fdefa5dd278fcc911cb74524388ec7960d9cd1f6 Mon Sep 17 00:00:00 2001 From: yisibl Date: Mon, 25 Oct 2021 16:41:43 +0800 Subject: [PATCH] fix: webp(80) and jpeg(92) use different quality --- src/lib.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0a8ab841..36a894d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -45,7 +45,13 @@ const MIME_PNG: &str = "image/png"; const MIME_JPEG: &str = "image/jpeg"; const MIME_AVIF: &str = "image/avif"; -const DEFAULT_IMAGE_QUALITY: u8 = 80; +// Consistent with the default value of JPEG quality in Blink +// https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/image-encoders/image_encoder.cc;l=85;drc=81c6f843fdfd8ef660d733289a7a32abe68e247a +const DEFAULT_JPEG_QUALITY: u8 = 92; + +// Consistent with the default value of WebP quality in Blink +// https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/image-encoders/image_encoder.cc;l=100;drc=81c6f843fdfd8ef660d733289a7a32abe68e247a +const DEFAULT_WEBP_QUALITY: u8 = 80; #[module_exports] fn init(mut exports: JsObject, env: Env) -> Result<()> { @@ -164,8 +170,10 @@ fn encode(ctx: CallContext) -> Result { let format_str = format.as_str()?; let quality = if format_str != "avif" { ctx.get::(1)?.get_uint32()? as u8 + } else if format_str == "webp" { + DEFAULT_WEBP_QUALITY } else { - DEFAULT_IMAGE_QUALITY + DEFAULT_JPEG_QUALITY }; let this = ctx.this_unchecked::(); let ctx_js = this.get_named_property::("ctx")?; @@ -197,8 +205,10 @@ fn encode_sync(ctx: CallContext) -> Result { let format_str = format.as_str()?; let quality = if format_str != "avif" { ctx.get::(1)?.get_uint32()? as u8 + } else if format_str == "webp" { + DEFAULT_WEBP_QUALITY } else { - DEFAULT_IMAGE_QUALITY + DEFAULT_JPEG_QUALITY }; let this = ctx.this_unchecked::(); let ctx_js = this.get_named_property::("ctx")?; @@ -271,7 +281,7 @@ fn to_buffer(ctx: CallContext) -> Result { let mime_js = ctx.get::(0)?.into_utf8()?; let mime = mime_js.as_str()?; let quality = if ctx.length < 2 { - DEFAULT_IMAGE_QUALITY + DEFAULT_JPEG_QUALITY } else { ctx.get::(1)?.get_uint32()? as u8 }; @@ -324,7 +334,7 @@ fn to_data_url(ctx: CallContext) -> Result { let mime = mime_js.as_str()?; let quality = if ctx.length < 2 { // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL - DEFAULT_IMAGE_QUALITY + DEFAULT_JPEG_QUALITY } else { ctx.get::(1)?.get_uint32()? as u8 }; @@ -347,7 +357,7 @@ fn to_data_url_async(ctx: CallContext) -> Result { let mime = mime_js.as_str()?; let quality = if ctx.length < 2 { // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL - DEFAULT_IMAGE_QUALITY + DEFAULT_JPEG_QUALITY } else { ctx.get::(1)?.get_uint32()? as u8 };