5 个版本

0.2.0 2021 年 1 月 7 日
0.1.3 2020 年 11 月 9 日
0.1.2 2020 年 10 月 30 日
0.1.1 2020 年 10 月 30 日
0.1.0 2020 年 8 月 30 日

#546 in 图像


2 个crate中使用(通过picasso-core

自定义许可证

5MB
2.5K SLoC

purrmitive

purrmitive 作为库使用

purrmitive = "*"

或者安装 purr 作为二进制文件

cargo install --bin purr --features="cli" purrmitive

或者

cargo run --release --features=cli --bin=purr -- -i ./assets/input.png -o output.gif -n 100

大多数 primitive 标志都受支持,在大多数情况下应该可以作为直接替换。

USAGE:
    purr [FLAGS] [OPTIONS] -i <input> -n <number> -o <output>

FLAGS:
    -h, --help       Prints help information
    -v               the level of verbosity, v/vv/vvv
    -V, --version    Prints version information

OPTIONS:
    -a <alpha>             alpha value
    -b <background>        starting background color (hex)
    -i <input>             input image
    -m <mode>              mode: 0=combo 1=triangle 2=rect 3=ellipse 4=circle 5=rotatedrect 6=beziers 7=rotatedellipse
                           8=polygon(default 1)
    -n <number>            number of shapes
    -o <output>            output image
    -r <resize>            input size
    -s <size>              output size
    -j <thread>            numebr of threads

输出格式

支持 png、jpg、svg 和 gif。您还可以在输出文件名中包含 {},例如,-o "/tmp/out/out{}.png" 将将每个帧保存到该目录中为 /tmp/out/outX.png X 在 [1, n] 范围内

示例

使用

-i ./assets/input.png -o output.gif -n 150

原始 输入图像 输出图像 处理
三角形
椭圆形

自己尝试更多。

差异

输出差异

实现了所有 primitive 支持的图形,所有图形的输出(除了贝塞尔曲线)基本上是相同的。

原始 primitive 版本的贝塞尔曲线支持调整线条粗细,这在 purr 中是不可能的。但结果仍然不错。

使用差异

purr 的关键选项和参数与 primitive 相同,在大多数情况下您只需用 purr 替换 primitive。

以上未列出的其他参数尚未实现(这些参数将在未来得到支持)

性能差异

在我电脑上,所有类型的图形拟合都比 primitive 快。更多具体数据请参见下一节。

一个可能的原因是在我的实现中,通过修改 diff 函数跳过了“下一步”缓冲区。与复制当前缓冲区、更新它然后读取它相比,这成本更低。

关于性能

此程序是 CPU 密集型,它将所有渲染都在内存中进行。

Purr 比原始实现更快。

使用以下基准测试:-n 100 -m {0-8},请查看以下结果。

hyperfine --parameter-scan m 0 8 -D 1 './target/release/purr -i ./assets/input.png -o assets/purr.{m}.png -n 100 -m {m}' '~/go/bin/primitive -i ./assets/input.png -o assets/primitive.{m}.png -n 100 -m {m}' --export-json benchmark.json

命令 模式 平均值 [s] 最小值 [s] 最大值 [s] 结果
purr 组合 10.256 ± 0.385 9.202 10.467
原始 组合 15.068 ± 0.213 14.785 15.405
purr 三角形 6.927 ± 0.201 6.510 7.136
原始 三角形 10.577 ± 0.266 10.109 10.879
purr 矩形 6.224 ± 0.087 6.132 6.380
原始 矩形 7.505 ± 0.105 7.388 7.765
purr 椭圆形 12.516 ± 0.098 12.354 12.674
原始 椭圆形 14.643 ± 0.279 14.189 15.193
purr 圆形 15.054 ± 0.236 14.739 15.452
原始 圆形 17.375 ± 0.187 17.156 17.760
purr 旋转矩形 8.045 ± 0.081 7.938 8.220
原始 旋转矩形 9.181 ± 0.154 8.922 9.496
purr 贝塞尔曲线 3.050 ± 0.127 2.815 3.223
原始 贝塞尔曲线 11.951 ± 0.173 11.563 12.114
purr 旋转椭圆 12.282 ± 0.166 11.942 12.496
原始 旋转椭圆 27.795 ± 0.401 27.273 28.694
purr 多边形 8.355 ± 0.219 7.988 8.748
原始 多边形 15.995 ± 0.275 15.426 16.431

依赖项

~18MB
~147K SLoC