15个版本 (稳定)
2.0.1 | 2021年1月4日 |
---|---|
1.7.0 | 2020年12月4日 |
1.7.0-测试版 | 2021年1月3日 |
1.3.0 | 2020年11月30日 |
0.1.6 |
|
#556 in 图像
每月下载 27次
55KB
927 行
IconWriter
编码常见图标文件格式(如.ico
、.icns
和favicon)的简单解决方案。
该crate主要是其他库的包装器,将现有的API统一到一个单一的、统一的接口中。
概览
一个图标由条目和图像之间的映射组成。一个条目仅仅是图标的键类型。
IconWriter简单地自动化图像重新缩放、创建条目并将它们组合成一个图标的过程。
键
每个图标格式都与特定的键类型相关联,这决定了如何标记条目。每个键只能与一个图像相关联。
例如,仅通过其相关联的图像的尺寸区分条目的图标格式通过正整数标记,例如.ico
和.icns
文件格式。
另一方面,通过路径区分其条目的图标格式,例如png序列和FreeDesktop图标主题,通过路径标记。
请注意,由于一个条目中包含的图像的尺寸由其相关联的条目指定,每个键都必须可以转换为正整数。因此,所有键类型都必须实现AsRef<u32>
。
重采样
使用重采样滤波器缩放图片,这些滤波器由函数表示,该函数接受一个源图像和一个大小,并返回一个重新缩放的图像。
这允许该crate的使用者提供他们自己的重采样滤波器。常见的重采样滤波器在resample
模块中提供。
示例
IconWriter简单地自动化图片重新缩放和组合成图标的过程。
使用重采样滤波器缩放图片,这些滤波器由函数表示,该函数接受一个源图像和一个大小,并返回一个重新缩放的图像。
重采样过滤器由函数表示,这些函数接受源图像和大小,并返回重缩放的原始RGBA缓冲区。这允许此包的用户提供他们自己的重采样过滤器。常用的重采样过滤器由resample
模块提供。
示例
通用用法
可以使用Icon::add_entry
自动重采样源图像并将它们转换为图标的条目。
use iconwriter::{Ico, Image, Icon, IconError};
fn example() -> Result<(), IconError> {
let icon = Ico::new();
let src = Image::open("image.svg")?;
icon.add_entry(resample::linear, &img, 32)
}
写入磁盘
实现了Icon
特质的实现者可以使用io::Write
的Icon::write
方法写入任何实现了的对象。
use iconwriter::favicon::Favicon;
use std::{io, fs::File};
fn example() -> io::Result<()> {
let icon = Favicon::new();
// Process the icon ...
let file = File::create("out.icns")?;
icon.write(file)
}
或者,可以使用Icon::save
方法将图标直接写入磁盘上的文件。
use iconwriter::favicon::Favicon;
use std::{io, fs::File};
fn example() -> io::Result<()> {
let icon = Favicon::new();
/* Process the icon */
icon.save("./output/")
}
支持
图标格式
以下是IconWriter
原生支持的输出格式。请注意,可以使用Icon
特质创建自定义输出类型。
ico
icns
- favicon
icns支持
IconWriter
使用icns
包来生成.icns
文件。支持的图标类型如下由该包的创建者指定
OSType | 描述 | 支持? |
---|---|---|
ICON |
32×32 1位条目 | 不支持 |
ICN# |
32×32 1位条目带1位掩码 | 不支持 |
icm# |
16×12 1位条目带1位掩码 | 不支持 |
icm4 |
16×12 4位条目 | 不支持 |
icm8 |
16×12 8位条目 | 不支持 |
ics# |
16×16 1位掩码 | 不支持 |
ics4 |
16×16 4位条目 | 不支持 |
ics8 |
16x16 8位条目 | 不支持 |
is32 |
16×16 24位条目 | 是 |
s8mk |
16x16 8位掩码 | 是 |
icl4 |
32×32 4位条目 | 不支持 |
icl8 |
32×32 8位条目 | 不支持 |
il32 |
32x32 24位条目 | 是 |
l8mk |
32×32 8位掩码 | 是 |
ich# |
48×48 1位掩码 | 不支持 |
ich4 |
48×48 4位条目 | 不支持 |
ich8 |
48×48 8位条目 | 不支持 |
ih32 |
48×48 24位条目 | 是 |
h8mk |
48×48 8位掩码 | 是 |
it32 |
128×128 24位条目 | 是 |
t8mk |
128×128 8位掩码 | 是 |
icp4 |
16x16 32位 png /jp2 条目 |
png 仅支持 |
icp5 |
32x32 32位 png /jp2 条目 |
png 仅支持 |
icp6 |
64x64 32位 png /jp2 条目 |
png 仅支持 |
ic07 |
128x128 32位 png /jp2 条目 |
png 仅支持 |
ic08 |
256×256 32位 png /jp2 条目 |
png 仅支持 |
ic09 |
512×512 32位 png /jp2 条目 |
png 仅支持 |
ic10 |
512x512@2x "retina" 32位 png /jp2 条目 |
png 仅支持 |
ic11 |
16x16@2x "retina" 32位 png /jp2 条目 |
png 仅支持 |
ic12 |
32x32@2x "retina" 32位 png /jp2 条目 |
png 仅支持 |
ic13 |
128x128@2x "retina" 32位 png /jp2 条目 |
png 仅支持 |
ic14 |
256x256@2x "retina" 32位 png /jp2 条目 |
png 仅支持 |
图像格式
IconWriter 使用 image
进行矢量图形处理,并使用带有 raqote
后端的 resvg
对 svg
进行光栅化。注意,raqote
需要使用 cmake
构建。
格式 | 支持? |
---|---|
png |
所有支持的颜色类型 |
jpeg |
基线型和渐进型 |
gif |
是 |
bmp |
是 |
ico |
是 |
tiff |
基线型(不支持传真),lzw ,PackBits |
webp |
有损(仅亮度通道) |
pnm |
pbm 、pgm 、ppm 、标准 pma |
svg |
静态 SVG 全 1.1 |
依赖关系
~15–24MB
~363K SLoC