制作自己的X-Face风格头像

看到LB大大的头像突然感觉好奇就学着做了一个。教程参考LB大大的帖子。

可以在Online X-Face Converter上一键生成头像,为了满足苛刻的要求我们打开gimp开始P图,以下是步骤说明:

  1. Image->Mode->Grayscale,去色
  2. Color->Threshold,分割黑白像素
  3. Image->Mode->Indexed,选择Use black and white pattle(1bit)
  4. Filters->Generic->Erode,加粗线条,一次不够就再来一次(效果参考下图)
  5. Image->Scale,缩放至48x48(这里我用的是Cubic插值,其它的弄出来也差不多),若效果不好,调节步骤2和4

转X-Face字符串格式这个可把我闹麻了,我原本还以为只要把像素内容逐字节颠倒后用uuencode编码即可,结果去Online X-Face Converter上decode出来是乱码,去翻了一下compface的代码才发现原来它有个独一无二的压缩编码。

顺带一提,xbm2xface脚本不适用于最新的perl-5.40,需要做点修改才能正常运行。

17,25c17,20
< #printf "0x%02x\n", &reverse_byte(0xF0);
< 
< <>;
< m/^#define \w+_width (\d+)/ && ($width=$1);
< <>;
< m/^#define \w+_height (\d+)/ && ($height=$1);
< <>;
< m/^static.* = \{/ && (( $width == 48 && $height == 48 )
<                     || die "xfaces are 48x48" );
---
> <> =~ /^#define \w+_width (\d+)/ && ($width = $1);
> <> =~ /^#define \w+_height (\d+)/ && ($height=$1);
> <> =~ /^static.* = \{/ && (( $width == 48 && $height == 48 )
>           || die "xfaces are 48x48" );

3 个赞

两个更新:

  1. x-face 没有确切的解码标准,甚至因为作者技术问题和导致仿造实现时出了偏差,有些实现是相互不兼容的,现在一般用 compface 这个具体实现

  2. 可以用 ffmpeg 从其他图片格式转到 compface 实现的 x-face 版本