Comments (4)
I took a look at the build timings for this crate, and one thing that stood out was that about 3/4 of total compilation time was consumed by only a few features:
webp
- which is fixed by image-rs/image-webp#67 (and will be included in the nextimage-webp
release)avif
- which actually already only enables AVIF encoding (decoding is behind an additional flag because it needs a C dependency)rayon
- not encode/decode specific, just enables some helper methods that use rayonexr
- external crate with combined encoding/decoding functionality (and no features to separate them)
from image.
This split likely wouldn't decrease the number of dependencies by very much. The reason is that generally we use the same crate for both encoding and decoding. And even within those crates, a lot of the dependencies will be shared. Compression libraries generally provide both compression and decompression code paths, checksums are the same whether you're writing or validating, etc.
I totally understand where you're coming from in wanting to keep distinct dependencies to an absolute minimum. Given the extremely broad scope of the crate, that's something we unfortunately cannot fully cater towards. We do try to limit to reputable crates and a fair number of dependent crates are actually part of the same image-rs org (and thus don't add anyone new to trust). But that's only one factor to consider. We also care about functionality, performance, robustness, etc.
from image.
Indeed, just removing avif
and rayon
gave me roughly 20s faster --release
compile times, and reduced my dependencies in Cargo.lock
by more than 400 lines.
from image.
The main advantage this would bring is a decrease in dependencies, and sub-sequentially compilation times
For me the advantage stops at "decrease in dependencies"
I am looking to create a software that I deploy on my public facing (very valuable to me) production server. I want as few dependencies as I can get.
I came here browsing crates that can help me (scaling Jpeg/PNG and or stitching Jpeg/PNG) and a very important criterion is the quantity of dependencies.
OT It is a weakness in the Rust ecosystem that it is generally so liberal with pulling in arbitrary crates. It is a nightmare from my perspective as I do not want to expand the attack surface on my server more than I absolutely have to.
Love your work - I fully understand if my requirements do not mesh with yours.
from image.
Related Issues (20)
- DynamicImage.view().to_image() results in Rgba8 buffer even when source isn't HOT 2
- Moving `imageops` and similar functionality to the `imageprocs` crate HOT 8
- JpegEncoder is very slow! HOT 2
- Add missing map2/apply2 functions to `Pixel` trait HOT 4
- PBM encoder is incorrect for ASCII, aka PnmSubtype::Bitmap(SampleEncoding::Ascii) HOT 1
- Version 0.26.x HOT 4
- Opening and saving an sRGB image yields different colors HOT 5
- PNG (and probably AVIF) encoding with compression too slow HOT 6
- Format error decoding Jpeg: invalid JPEG format: JPGn(7) marker found where not allowed HOT 5
- Add serde support for image::ImageFormat HOT 2
- JPEG decoding inconsistent with other (non-Rust libraries) HOT 1
- Invert Alpha method HOT 5
- Switch to the `rgb` crate `v0.9` pixel types and trait. HOT 1
- Format error decoding Png: Invalid PNG signature. When reading png with embedded color profile HOT 4
- Building with default features on macOS requires rustc v1.79 or newer. HOT 6
- Creating a new `PixelImage` type. HOT 6
- Animated WebP's cannot actually be loaded
- Animated PNG is decoded incorrectly
- Bug-Triage: Should image codec bug reports be moved to their upstream repos?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from image.