Skip to content

Commit 43e3938

Browse files
committed
feat(image): implement rawPixels and rawPixelsSync
1 parent dfcd5d0 commit 43e3938

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

packages/binding/src/transformer.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub enum EncodeOptions {
2626
Pnm,
2727
Tga,
2828
Farbfeld,
29+
RawPixels,
2930
}
3031

3132
#[napi]
@@ -545,6 +546,9 @@ impl Task for EncodeTask {
545546
EncodeOptions::Pnm => ImageFormat::Pnm,
546547
EncodeOptions::Tga => ImageFormat::Tga,
547548
EncodeOptions::Farbfeld => ImageFormat::Farbfeld,
549+
EncodeOptions::RawPixels => {
550+
return Ok(EncodeOutput::Buffer(dynamic_image.as_bytes().to_vec()));
551+
}
548552
};
549553
let mut output: Cursor<Vec<u8>> = Cursor::new(Vec::with_capacity(
550554
(dynamic_image.width() * dynamic_image.height() * 4) as usize,
@@ -767,6 +771,26 @@ impl Transformer {
767771
self
768772
}
769773

774+
#[napi]
775+
/// Return this image's pixels as a native endian byte slice.
776+
pub fn raw_pixels(&self, signal: Option<AbortSignal>) -> AsyncTask<EncodeTask> {
777+
AsyncTask::with_optional_signal(
778+
EncodeTask {
779+
image: self.dynamic_image.clone(),
780+
options: EncodeOptions::RawPixels,
781+
image_transform_args: self.image_transform_args,
782+
},
783+
signal,
784+
)
785+
}
786+
787+
#[napi]
788+
/// Return this image's pixels as a native endian byte slice.
789+
pub fn raw_pixels_sync(&self) -> Result<Buffer> {
790+
let meta = self.dynamic_image.get(false)?;
791+
Ok(meta.image.as_bytes().to_vec().into())
792+
}
793+
770794
#[napi]
771795
/// The quality factor `quality_factor` ranges from 0 to 100 and controls the loss and quality during compression.
772796
/// The value 0 corresponds to low quality and small output sizes, whereas 100 is the highest quality and largest output size.

0 commit comments

Comments
 (0)