#icons #icns #image #image-encoding #image-format #file-format

tauri-icns

一个用于编码/解码Apple Icon Image (.icns)文件库

1个不稳定版本

使用旧的Rust 2015

0.1.0 2022年8月23日

#489 in 图像

Download history 2331/week @ 2024-03-14 2395/week @ 2024-03-21 2403/week @ 2024-03-28 2364/week @ 2024-04-04 2137/week @ 2024-04-11 2295/week @ 2024-04-18 2726/week @ 2024-04-25 2414/week @ 2024-05-02 2369/week @ 2024-05-09 2333/week @ 2024-05-16 2483/week @ 2024-05-23 2816/week @ 2024-05-30 3581/week @ 2024-06-06 3309/week @ 2024-06-13 3009/week @ 2024-06-20 13001/week @ 2024-06-27

23,484每月下载量
用于8个crate(5个直接使用)

MIT许可证

105KB
1.5K SLoC

rust-icns

这是mdsteele/rust-icns的一个分支。

Rust库,用于编码/解码Apple Icon Image (.icns)文件。

文档:https://docs.rs/tauri-icns

概述

icns crate实现了ICNS文件的读取和写入,将图像编码和解码成ICNS图标家族,将这些图像转换为其他像素格式(如果需要将图像数据传输到另一个期望特定格式的库),并将这些图像保存到PNG文件或从PNG文件加载。

crate文档提供了更多关于如何使用此库的信息。

示例用法

extern crate icns;
use tauri_icns::{IconFamily, IconType, Image};
use std::fs::File;
use std::io::{BufReader, BufWriter};

fn main() {
    // Load an icon family from an ICNS file.
    let file = BufReader::new(File::open("16.icns").unwrap());
    let mut icon_family = IconFamily::read(file).unwrap();

    // Extract an icon from the family and save it as a PNG.
    let image = icon_family.get_icon_with_type(IconType::RGB24_16x16).unwrap();
    let file = BufWriter::new(File::create("16.png").unwrap());
    image.write_png(file).unwrap();

    // Read in another icon from a PNG file, and add it to the icon family.
    let file = BufReader::new(File::open("32.png").unwrap());
    let image = Image::read_png(file).unwrap();
    icon_family.add_icon(&image).unwrap();

    // Save the updated icon family to a new ICNS file.
    let file = BufWriter::new(File::create("16-and-32.icns").unwrap());
    icon_family.write(file).unwrap();
}

支持的图标类型

ICNS文件可以包含多种不同的图标类型。此库支持最常用的类型,但一些较旧的类型尚未支持。下表显示了当前支持的类型;有关每种类型的更多信息,请参阅https://en.wikipedia.org/wiki/Apple_Icon_Image_format#Icon_types

当前最大的限制是,许多较新的图标类型可以使用PNG或JPEG 2000数据进行编码,但此库尚不支持JPEG 2000;尝试解码此类图标将返回错误值(尽管您仍然可以从同一ICNS文件中解码其他图标)。原因是我目前不知道有任何Rust的JPEG 2000库;如果有,请随时提交错误报告或发送拉取请求。

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

许可

rust-icns 在MIT 许可证下提供。

依赖关系

~88–315KB