forked from external-repos/squoosh
Use oxipng raw api
This commit is contained in:
@@ -1,11 +1,18 @@
|
||||
#[cfg(feature = "parallel")]
|
||||
pub use wasm_bindgen_rayon::init_thread_pool;
|
||||
|
||||
use oxipng::Interlacing;
|
||||
use oxipng::{BitDepth, ColorType, Interlacing};
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::Clamped;
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn optimise(data: &[u8], level: u8, interlace: bool) -> Vec<u8> {
|
||||
pub fn optimise(
|
||||
data: Clamped<Vec<u8>>,
|
||||
width: u32,
|
||||
height: u32,
|
||||
level: u8,
|
||||
interlace: bool,
|
||||
) -> Vec<u8> {
|
||||
let mut options = oxipng::Options::from_preset(level);
|
||||
options.optimize_alpha = true;
|
||||
options.interlace = Some(if interlace {
|
||||
@@ -14,5 +21,7 @@ pub fn optimise(data: &[u8], level: u8, interlace: bool) -> Vec<u8> {
|
||||
Interlacing::None
|
||||
});
|
||||
|
||||
oxipng::optimize_from_memory(data, &options).unwrap_throw()
|
||||
let raw = oxipng::RawImage::new(width, height, ColorType::RGBA, BitDepth::Eight, data.0)
|
||||
.unwrap_throw();
|
||||
raw.create_optimized_png(&options).unwrap_throw()
|
||||
}
|
||||
|
||||
@@ -18,9 +18,7 @@ export async function encode(
|
||||
imageData: ImageData,
|
||||
options: EncodeOptions,
|
||||
) {
|
||||
const pngBlob = await abortable(signal, canvasEncode(imageData, 'image/png'));
|
||||
const pngBuffer = await abortable(signal, blobToArrayBuffer(pngBlob));
|
||||
return workerBridge.oxipngEncode(signal, pngBuffer, options);
|
||||
return workerBridge.oxipngEncode(signal, imageData, options);
|
||||
}
|
||||
|
||||
type Props = {
|
||||
|
||||
@@ -35,7 +35,7 @@ async function initST() {
|
||||
let wasmReady: ReturnType<typeof initMT | typeof initST>;
|
||||
|
||||
export default async function encode(
|
||||
data: ArrayBuffer,
|
||||
data: ImageData,
|
||||
options: EncodeOptions,
|
||||
): Promise<ArrayBuffer> {
|
||||
if (!wasmReady) {
|
||||
@@ -45,6 +45,11 @@ export default async function encode(
|
||||
}
|
||||
|
||||
const optimise = await wasmReady;
|
||||
return optimise(new Uint8Array(data), options.level, options.interlace)
|
||||
.buffer;
|
||||
return optimise(
|
||||
data.data,
|
||||
data.width,
|
||||
data.height,
|
||||
options.level,
|
||||
options.interlace,
|
||||
).buffer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user