feat: 格式扩展 — 支持 BMP/JPEG/WebP 输出
- png.rs 重命名为 image.rs,新增 OutputFormat 枚举 - QrCode::to_image_bytes 支持 PNG/BMP/JPEG/WebP - CLI 新增 -f/--format 参数(png/bmp/jpeg/webp) - Web API fmt 参数扩展至全部 4 种图像格式 - core/Cargo.toml: image crate 新增 bmp feature
This commit is contained in:
+20
-13
@@ -55,6 +55,10 @@ struct Args {
|
||||
#[arg(long)]
|
||||
logo: Option<String>,
|
||||
|
||||
/// 输出图像格式 [png/bmp/jpeg/webp] [default: png]
|
||||
#[arg(short = 'f', long, default_value = "png")]
|
||||
format: String,
|
||||
|
||||
// ---- 编码模式参数 ----
|
||||
/// 编码模式 [text/url/wifi/vcard/email/phone/sms/batch]
|
||||
#[arg(long)]
|
||||
@@ -199,24 +203,27 @@ fn main() -> anyhow::Result<()> {
|
||||
.to_lowercase();
|
||||
|
||||
match ext.as_str() {
|
||||
"png" => {
|
||||
let bytes = qr.to_png_bytes(args.size, logo_bytes.as_deref())?;
|
||||
fs::write(path, bytes)?;
|
||||
println!(
|
||||
"已生成: {} (版本 {}, {}×{} 模块, {:?} 级纠错)",
|
||||
path,
|
||||
qr.version.0,
|
||||
qr.size(),
|
||||
qr.size(),
|
||||
qr.level
|
||||
);
|
||||
}
|
||||
"svg" => {
|
||||
let svg = qr.to_svg(logo_bytes.as_deref());
|
||||
fs::write(path, svg)?;
|
||||
println!("已生成: {} (版本 {}, SVG 格式)", path, qr.version.0);
|
||||
}
|
||||
_ => anyhow::bail!("不支持的文件格式: .{}。支持 .png / .svg", ext),
|
||||
_ => {
|
||||
let fmt = qr_core::render::image::OutputFormat::from_ext(&ext)
|
||||
.or_else(|| qr_core::render::image::OutputFormat::from_ext(&args.format))
|
||||
.unwrap_or(qr_core::render::image::OutputFormat::Png);
|
||||
let bytes = qr.to_image_bytes(args.size, logo_bytes.as_deref(), Some(fmt))?;
|
||||
fs::write(path, bytes)?;
|
||||
println!(
|
||||
"已生成: {} (版本 {}, {}×{} 模块, {:?} 级纠错, {})",
|
||||
path,
|
||||
qr.version.0,
|
||||
qr.size(),
|
||||
qr.size(),
|
||||
qr.level,
|
||||
fmt.extension()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {
|
||||
|
||||
Reference in New Issue
Block a user