ImageMagick导出C头文件:能否修改变量名及移除顶部注释?
ImageMagick导出C头文件的变量名修改与注释去除问题
- 关于修改默认
MagickImage变量名:目前ImageMagick没有内置选项支持这个操作。你找到的-define h:format=确实是官方提供的仅有的头文件相关自定义选项,作用是指定像素存储格式(比如RGBA、RGB、GRAY等),无法干预变量命名。
举个例子,执行命令:
convert rgba.png -define h:format=RGBA rgba.h
生成的头文件内容大致如下(以32x32的RGBA图片为例):
/* rgba.png=>rgba.h RGBA 32x32 32x32+0+0 8-bit sRGB 4096B 0.000u 0:00.000 */ static const unsigned char MagickImage[] = { 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, /* 第1行像素数据 */ // ... 剩余像素数据省略 }; static const unsigned int MagickImage_height = 32; static const unsigned int MagickImage_width = 32;
- 关于去除顶部注释:同样没有内置选项可以直接禁用。官方生成的头文件默认会包含图片转换信息的注释块,无法通过
convert命令的参数跳过。
虽然你已经知道可以用awk处理,但这里给你一个整合了转换+修改变量名+删除注释的批量处理脚本示例,能简化你的操作:
#!/bin/bash # 批量处理当前目录下所有png文件,导出为自定义变量名的头文件 for img in *.png; do # 提取文件名作为变量名(去掉.png后缀) var_name=$(basename "$img" .png) # 先生成临时头文件 convert "$img" -define h:format=RGBA "${img%.png}_temp.h" # 处理临时文件:删除注释、替换MagickImage为自定义变量名,生成最终头文件 awk ' BEGIN { skip=0 } /^\/\*/ { skip=1; next } /\*\// { skip=0; next } !skip { gsub(/MagickImage/, "'"$var_name"'") print } ' "${img%.png}_temp.h" > "${img%.png}.h" # 删除临时文件 rm "${img%.png}_temp.h" done
这个脚本会自动把每个png文件导出为对应文件名的头文件,变量名用文件名(比如icon.png会生成icon变量),同时去掉顶部注释,一步完成所有操作,不用单独写后续处理步骤。
内容的提问来源于stack exchange,提问作者Kagetsuki
相关产品推荐
相关产品推荐

