2 个不稳定版本
0.1.0 | 2023年6月7日 |
---|---|
0.0.0 | 2020年2月10日 |
#487 in 图像
345KB
325 行
u_u
将图表图片转换为 SVG
这是什么?
这是一个工具,允许将 JPEG 照片(例如图表照片)转换为 SVG 图片,如上图所示。
如何使用它?
use u_u::jpeg_to_svg;
const JPEG_BYTES: &[u8] = include_bytes!("./u_u.jpg");
fn main() {
let svg_bytes = jpeg_to_svg(JPEG_BYTES).unwrap();
std::fs::write("./output_example.svg", svg_bytes).unwrap();
}
它是如何工作的?
该算法将每个 RGB 像素解释为 3D 向量。
第一步是计算背景颜色,它是图像中所有像素的平均颜色 -- 这意味着照片的背景(如白板上的白色或黑板上的黑色)必须超过照片的 50%,否则将失败(如果知道背景颜色,可以传递一个可选的参数以防止在这些情况下失败)。
然后,对图像进行两次遍历来过滤背景
- 第一次遍历尝试识别前景部分,并根据阈值值删除背景部分。这产生了一个新的图像。
- 第二次遍历尝试识别背景部分,并根据阈值值删除前景部分。这产生了一个新的图像。
- 第 1 和 2 遍历产生的图像被合并。所有第二次遍历的像素(背景)从前景中删除。与前景颜色相似但与背景颜色不同的非第二次遍历像素如果尚未在前景中,则添加到前景中 -- 这减少了第一次遍历中的错误。这清洁了前景中任何在第一次遍历中没有删除的背景。
- 具有低邻居计数的像素(即周围有许多透明像素的像素)被删除。这进一步从图片中移除噪声。
- 使用 vtracer 将生成的 RBG 字节转换为 SVG。
依赖关系
~9.5MB
~143K SLoC