Let `Pixmap::from_png` use `Read` directly

This prevents having to always first copy the image data to memory.
diff --git a/sparse_strips/vello_api/src/pixmap.rs b/sparse_strips/vello_api/src/pixmap.rs
index 6927fd7..245e45d 100644
--- a/sparse_strips/vello_api/src/pixmap.rs
+++ b/sparse_strips/vello_api/src/pixmap.rs
@@ -6,6 +6,9 @@
 use alloc::vec;
 use alloc::vec::Vec;
 
+#[cfg(feature = "png")]
+extern crate std;
+
 /// A pixmap backed by u8.
 #[derive(Debug, Clone)]
 pub struct Pixmap {
@@ -47,7 +50,7 @@
 
     /// Create a pixmap from a PNG file.
     #[cfg(feature = "png")]
-    pub fn from_png(data: &[u8]) -> Result<Self, png::DecodingError> {
+    pub fn from_png(data: impl std::io::Read) -> Result<Self, png::DecodingError> {
         let mut decoder = png::Decoder::new(data);
         decoder.set_transformations(
             png::Transformations::normalize_to_color8() | png::Transformations::ALPHA,
diff --git a/sparse_strips/vello_sparse_tests/tests/image.rs b/sparse_strips/vello_sparse_tests/tests/image.rs
index 56f8a65..c55ba72 100644
--- a/sparse_strips/vello_sparse_tests/tests/image.rs
+++ b/sparse_strips/vello_sparse_tests/tests/image.rs
@@ -15,7 +15,7 @@
 
 pub(crate) fn load_image(name: &str) -> Arc<Pixmap> {
     let path = Path::new(env!("CARGO_MANIFEST_DIR")).join(format!("tests/assets/{name}.png"));
-    Arc::new(Pixmap::from_png(&std::fs::read(path).unwrap()).unwrap())
+    Arc::new(Pixmap::from_png(std::fs::File::open(path).unwrap()).unwrap())
 }
 
 fn rgb_img_10x10() -> Arc<Pixmap> {