skia_safe/encode_/
webp_encoder.rs1use crate::{interop::RustWStream, prelude::*, Pixmap};
2use skia_bindings::SkWebpEncoder_Compression;
3use std::io;
4
5pub type Compression = SkWebpEncoder_Compression;
6variant_name!(Compression::Lossy);
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct Options {
10 pub compression: Compression,
11 pub quality: f32,
12 }
15
16impl Default for Options {
17 fn default() -> Self {
18 Self {
19 compression: Compression::Lossy,
20 quality: 100.0,
21 }
22 }
23}
24
25pub fn encode<W: io::Write>(pixmap: &Pixmap, writer: &mut W, options: &Options) -> bool {
26 let mut stream = RustWStream::new(writer);
27 unsafe {
28 skia_bindings::C_SkWebpEncoder_Encode(
29 stream.stream_mut(),
30 pixmap.native(),
31 options.compression,
32 options.quality,
33 )
34 }
35}
36
37pub fn encode_image<'a>(
38 context: impl Into<Option<&'a mut crate::gpu::DirectContext>>,
39 img: &crate::Image,
40 options: &Options,
41) -> Option<crate::Data> {
42 crate::Data::from_ptr(unsafe {
43 skia_bindings::C_SkWebpEncoder_EncodeImage(
44 context.into().native_ptr_or_null_mut(),
45 img.native(),
46 options.compression,
47 options.quality,
48 )
49 })
50}
51
52