From f0fb891498413f65134786d9e55cabfc8e0e1616 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Thu, 13 May 2021 14:22:19 +0100 Subject: [PATCH] Updating oxi, adding interlace option (#1014) --- codecs/oxipng/Cargo.toml | 2 +- .../oxipng/pkg-parallel/squoosh_oxipng.d.ts | 5 +++-- codecs/oxipng/pkg-parallel/squoosh_oxipng.js | 5 +++-- .../pkg-parallel/squoosh_oxipng_bg.wasm | Bin 337895 -> 337913 bytes .../pkg-parallel/squoosh_oxipng_bg.wasm.d.ts | 2 +- codecs/oxipng/pkg/squoosh_oxipng.d.ts | 5 +++-- codecs/oxipng/pkg/squoosh_oxipng.js | 5 +++-- codecs/oxipng/pkg/squoosh_oxipng_bg.wasm | Bin 269140 -> 269158 bytes codecs/oxipng/pkg/squoosh_oxipng_bg.wasm.d.ts | 2 +- codecs/oxipng/src/lib.rs | 3 ++- src/features/encoders/oxiPNG/client/index.tsx | 11 +++++++++++ src/features/encoders/oxiPNG/shared/meta.ts | 2 ++ .../encoders/oxiPNG/worker/oxipngEncode.ts | 7 +++++-- 13 files changed, 35 insertions(+), 14 deletions(-) diff --git a/codecs/oxipng/Cargo.toml b/codecs/oxipng/Cargo.toml index b0b9a191..32b6ca1c 100644 --- a/codecs/oxipng/Cargo.toml +++ b/codecs/oxipng/Cargo.toml @@ -12,7 +12,7 @@ wasm-opt = ["-O", "--no-validation"] crate-type = ["cdylib"] [dependencies] -oxipng = { version = "4.0.1", default-features = false, features = ["libdeflater"] } +oxipng = { version = "4.0.3", default-features = false, features = ["libdeflater"] } libdeflater = { version = "0.7.1", features = ["freestanding"] } wasm-bindgen = "0.2.73" log = { version = "0.4.11", features = ["release_max_level_off"] } diff --git a/codecs/oxipng/pkg-parallel/squoosh_oxipng.d.ts b/codecs/oxipng/pkg-parallel/squoosh_oxipng.d.ts index 8ca403de..82b533ec 100644 --- a/codecs/oxipng/pkg-parallel/squoosh_oxipng.d.ts +++ b/codecs/oxipng/pkg-parallel/squoosh_oxipng.d.ts @@ -3,9 +3,10 @@ /** * @param {Uint8Array} data * @param {number} level +* @param {boolean} interlace * @returns {Uint8Array} */ -export function optimise(data: Uint8Array, level: number): Uint8Array; +export function optimise(data: Uint8Array, level: number, interlace: boolean): Uint8Array; /** * @param {number} num_threads * @returns {Promise} @@ -35,7 +36,7 @@ export class wbg_rayon_PoolBuilder { export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; export interface InitOutput { - readonly optimise: (a: number, b: number, c: number, d: number) => void; + readonly optimise: (a: number, b: number, c: number, d: number, e: number) => void; readonly __wbg_wbg_rayon_poolbuilder_free: (a: number) => void; readonly wbg_rayon_poolbuilder_numThreads: (a: number) => number; readonly wbg_rayon_poolbuilder_receiver: (a: number) => number; diff --git a/codecs/oxipng/pkg-parallel/squoosh_oxipng.js b/codecs/oxipng/pkg-parallel/squoosh_oxipng.js index a1689a5f..c3c8163a 100644 --- a/codecs/oxipng/pkg-parallel/squoosh_oxipng.js +++ b/codecs/oxipng/pkg-parallel/squoosh_oxipng.js @@ -56,14 +56,15 @@ function getArrayU8FromWasm0(ptr, len) { /** * @param {Uint8Array} data * @param {number} level +* @param {boolean} interlace * @returns {Uint8Array} */ -export function optimise(data, level) { +export function optimise(data, level, interlace) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); var len0 = WASM_VECTOR_LEN; - wasm.optimise(retptr, ptr0, len0, level); + wasm.optimise(retptr, ptr0, len0, level, interlace); var r0 = getInt32Memory0()[retptr / 4 + 0]; var r1 = getInt32Memory0()[retptr / 4 + 1]; var v1 = getArrayU8FromWasm0(r0, r1).slice(); diff --git a/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm b/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm index 6c0304924b4865043b261c5ab457e3691edc9904..8e6bc852c74c28d44bea66676977b5aeda4409d0 100644 GIT binary patch delta 7174 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 diff --git a/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm.d.ts b/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm.d.ts index 760b49d9..5226f54a 100644 --- a/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm.d.ts +++ b/codecs/oxipng/pkg-parallel/squoosh_oxipng_bg.wasm.d.ts @@ -1,6 +1,6 @@ /* tslint:disable */ /* eslint-disable */ -export function optimise(a: number, b: number, c: number, d: number): void; +export function optimise(a: number, b: number, c: number, d: number, e: number): void; export function __wbg_wbg_rayon_poolbuilder_free(a: number): void; export function wbg_rayon_poolbuilder_numThreads(a: number): number; export function wbg_rayon_poolbuilder_receiver(a: number): number; diff --git a/codecs/oxipng/pkg/squoosh_oxipng.d.ts b/codecs/oxipng/pkg/squoosh_oxipng.d.ts index 759bf922..7158f196 100644 --- a/codecs/oxipng/pkg/squoosh_oxipng.d.ts +++ b/codecs/oxipng/pkg/squoosh_oxipng.d.ts @@ -3,15 +3,16 @@ /** * @param {Uint8Array} data * @param {number} level +* @param {boolean} interlace * @returns {Uint8Array} */ -export function optimise(data: Uint8Array, level: number): Uint8Array; +export function optimise(data: Uint8Array, level: number, interlace: boolean): Uint8Array; export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; export interface InitOutput { readonly memory: WebAssembly.Memory; - readonly optimise: (a: number, b: number, c: number, d: number) => void; + readonly optimise: (a: number, b: number, c: number, d: number, e: number) => void; readonly __wbindgen_add_to_stack_pointer: (a: number) => number; readonly __wbindgen_malloc: (a: number) => number; readonly __wbindgen_free: (a: number, b: number) => void; diff --git a/codecs/oxipng/pkg/squoosh_oxipng.js b/codecs/oxipng/pkg/squoosh_oxipng.js index ee7a699f..03aa0bb3 100644 --- a/codecs/oxipng/pkg/squoosh_oxipng.js +++ b/codecs/oxipng/pkg/squoosh_oxipng.js @@ -40,14 +40,15 @@ function getArrayU8FromWasm0(ptr, len) { /** * @param {Uint8Array} data * @param {number} level +* @param {boolean} interlace * @returns {Uint8Array} */ -export function optimise(data, level) { +export function optimise(data, level, interlace) { try { const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); var ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_malloc); var len0 = WASM_VECTOR_LEN; - wasm.optimise(retptr, ptr0, len0, level); + wasm.optimise(retptr, ptr0, len0, level, interlace); var r0 = getInt32Memory0()[retptr / 4 + 0]; var r1 = getInt32Memory0()[retptr / 4 + 1]; var v1 = getArrayU8FromWasm0(r0, r1).slice(); diff --git a/codecs/oxipng/pkg/squoosh_oxipng_bg.wasm b/codecs/oxipng/pkg/squoosh_oxipng_bg.wasm index 97356d3766d8697e406284601275a2a43141b139..aaabc2b8d93cf6b8ff01dcd520944df2e525c3a0 100644 GIT binary patch delta 6460 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 delta 6525 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 r-G_ Vec { +pub fn optimise(data: &[u8], level: u8, interlace: bool) -> Vec { let mut options = oxipng::Options::from_preset(level); options.alphas.insert(AlphaOptim::Black); options.alphas.insert(AlphaOptim::White); @@ -13,6 +13,7 @@ pub fn optimise(data: &[u8], level: u8) -> Vec { options.alphas.insert(AlphaOptim::Down); options.alphas.insert(AlphaOptim::Left); options.alphas.insert(AlphaOptim::Right); + options.interlace = Some(if interlace { 1 } else { 0 }); options.deflate = oxipng::Deflaters::Libdeflater; oxipng::optimize_from_memory(data, &options).unwrap_throw() diff --git a/src/features/encoders/oxiPNG/client/index.tsx b/src/features/encoders/oxiPNG/client/index.tsx index 155b3b0c..51fc5885 100644 --- a/src/features/encoders/oxiPNG/client/index.tsx +++ b/src/features/encoders/oxiPNG/client/index.tsx @@ -2,6 +2,7 @@ import { canvasEncode, abortable, blobToArrayBuffer, + inputFieldChecked, } from 'client/lazy-app/util'; import { EncodeOptions } from '../shared/meta'; import type WorkerBridge from 'client/lazy-app/worker-bridge'; @@ -9,6 +10,7 @@ import { h, Component } from 'preact'; import { inputFieldValueAsNumber, preventDefault } from 'client/lazy-app/util'; import * as style from 'client/lazy-app/Compress/Options/style.css'; import Range from 'client/lazy-app/Compress/Options/Range'; +import Checkbox from 'client/lazy-app/Compress/Options/Checkbox'; export async function encode( signal: AbortSignal, @@ -34,6 +36,7 @@ export class Options extends Component { const options: EncodeOptions = { level: inputFieldValueAsNumber(form.level), + interlace: inputFieldChecked(form.interlace), }; this.props.onChange(options); }; @@ -41,6 +44,14 @@ export class Options extends Component { render({ options }: Props) { return (
+
{ if (!wasmReady) { - wasmReady = threads().then((hasThreads: boolean) => hasThreads ? initMT() : initST()); + wasmReady = threads().then((hasThreads: boolean) => + hasThreads ? initMT() : initST(), + ); } const optimise = await wasmReady; - return optimise(new Uint8Array(data), options.level).buffer; + return optimise(new Uint8Array(data), options.level, options.interlace) + .buffer; }