#png #image #filter

pnglitcher

PNG glitcher

7个版本

0.3.1 2023年4月19日
0.3.0 2023年4月13日
0.2.0 2022年11月2日
0.1.3 2022年9月13日
0.1.1 2022年6月8日

#200 in 图像

每月 34 次下载

MIT 许可证

130KB
2.5K SLoC

PNGlitcher

这个crate包含一个库,允许您损坏PNG图像。大部分代码来自为神奇的PNG编码器(用于Image crate)。这里的想法是提供一个类似Ruby gem PNGlitch的工具,用于Rust。图像的输出将不会与PNGlitch完全相同,它只是用于启发。

目前这个cargo处于重度的WIP状态,任何版本都可能引入破坏性变更,所以请使用这个crate来娱乐并创建看起来奇怪的PNG图像。

如何使用

复制

单个过滤器

对于每个出现,这个算法将从图像的另一部分复制数据,然后强制png使用指定的过滤器。

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • filter(u8): 从0到5,定义保存图像时使用的过滤器。
  • occurence(usize): glitch的出现次数,1表示图像的每一列。
  • gap(usize): 从第一次出现之前跳过的列数

示例

pnglitcher::duplicate("input1.png", "output1", true, 3,  1, 0);
pnglitcher::duplicate("input2.png", "output2", true, 0, 100, 1000);

示例

使用复制算法为给定图像的所有过滤器创建示例

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • occurence(usize): glitch的出现次数,1表示图像的每一列。
  • gap(usize): 从第一次出现之前跳过的列数

示例

pnglitcher::duplicate_sample("input1.png", "output1", true, 1, 0);
pnglitcher::duplicate_sample("input2.png", "output2", true, 100, 1000);

替换

单个过滤器

对于每个出现,这个算法将用0替换数据,然后强制png使用指定的过滤器。

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • filter(u8): 从0到5,定义保存图像时使用的过滤器。
  • occurence(usize): glitch的出现次数,1表示图像的每一列。

示例

pnglitcher::replace("input1.png", "output1", true, 0, 1);
pnglitcher::replace("input2.png", "output2", true, 4, 1);

示例

使用复制算法为给定图像的所有过滤器创建示例

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • occurence(usize): glitch的出现次数,1表示图像的每一列。

示例

pnglitcher::replace_sample("input1.png", "output1", true, 1);
pnglitcher::replace_sample("input2.png", "output2", true, 10);

变量过滤器

使用不同的png过滤器保存每一行。

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • random(boolean): 定义选择过滤器的选择是随机还是顺序的。

示例

pnglitcher::variable_filter("input1.png", "output1", true, true);
pnglitcher::variable_filter("input2.png", "output2", true, false);

错误的过滤器

单个过滤器

强制png编码器使用错误的过滤器

参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像
  • filter(u8): 从0到5,定义保存图像时使用的过滤器。

示例

pnglitcher::wrong_filter("input1.png", "output1", true, 0);
pnglitcher::wrong_filter("input2.png", "output2", true, 2);

示例

使用错误的过滤器算法为给定图像的所有过滤器创建示例参数

  • input(str): 输入png图像的路径。
  • output(str): 输出png图像的路径(不带扩展名)。
  • overwrite: 指定输出文件是否应该覆盖具有相同名称的任何现有图像

示例

pnglitcher::wrong_filter_sample("input1.png", "output1", true);
pnglitcher::wrong_filter_sample("input2.png", "output2", true);

依赖项

~13MB
~70K SLoC