20250712

1156吃完午饭,今天是0134睡到0639睡到1018,最近两天都是1点睡,6点醒来料料。今天1点睡,明天0点睡,后天23点睡,我就变成人类啦。想的真好。

在 Neovim 中,如果你想直接在最后一行进入插入模式,可以使用以下命令:Go

1513今天不打喷了,才打到有魅力的,这祭典很难打。

b站最近很多星痕共鸣的推广,是mmorpg,和蓝色协议有点渊源。一直想玩mmo,我都没玩过,之前看到蓝色协议想玩但因为日服限定且封号很凶而退缩了,现在才知道它在2025年1月18日终止运营,太可惜了,不被当下社会享受的mmo啊,星痕共鸣好像是腾讯出资,希望它能好好的活下去吧。我想去异世界。+-

1811起来准备弄蛋炒饭吃。下午在床上打拔作岛,打到和nanase相互表明心意然后欲拒还迎的要开始继续做当初没做完的事了。这青梅竹马的戏码就好像你们是天生一对一样,这还是共通线吗,这真不是个人线吗。我就做过一个选择吧,不会真是那玩笑一般的选择决定的路线吧,不对吧,革命才刚刚起步,怎么可以在这里谈情说爱。

看看anki怎么用,我好想能无痛啃生肉。

之前就看到过anki,为什么我之前没有下载。我不知道,我live grep没搜到。

今天下了anki-25.02.7-windows-qt6.exe,一点chrome的在文件夹中显示,发现了我5月24号下载的anki-25.02.5-windows-qt6.exe,这太幽默了。

想提取正负战争中蓝咲的立绘,但face和body是分开的且分辨率不同,手动算好offset后又发现face.png有黑边,找了几种解决方案结果都不尽人意。crop_to_alpha_bbox()会改变分辨率;remove_black_outline()会误杀头发或眼睛边缘的深色像素;feather_alpha()边缘并不好看且会导致边缘处会往外平白生出不透明像素。

又去看了看tlg和png,对比了一下,感觉是转换时自动生成的奇妙边缘,但我没有证据。

face.png用画图打开并无明显黑边。face和body都导入到画布手动拼一拼在交界处仍有不自然的黑线。似乎是覆盖的问题,然而代码是alpha_composite,理应不该有问题的,不对,得有问题的,交界处有黑边导致的。黑边让单独的face看起来更加自然,但对需要合成face和body的我是阻碍,对我来说face的交界处应该是透明的。

即视觉边缘、过渡灰阶产生的问题

不知道该怎么处理,不知道该处理哪里,是原tlg的问题还是转化过程的问题。

画图中用橡皮直接擦去face图层的边缘能解决,考虑直接将face图片的边缘像素设成透明。

最后解决方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def clear_hard_edge_by_alpha(img: Image.Image, radius: int = 1) -> Image.Image:
    """
    清除被透明像素包围的边缘不透明像素
    """
    img = img.convert("RGBA")
    data = np.array(img)
    alpha = data[:, :, 3]

    print("Alpha通道最小值:", alpha.min(), "最大值:", alpha.max())

    transparent_mask = alpha == 0
    structure = np.ones((3, 3), dtype=bool)
    dilated_transparent = scipy.ndimage.binary_dilation(transparent_mask, structure=structure, iterations=radius)

    # 这里用 >0 代替 ==255,更宽松判断不透明区域
    opaque_mask = alpha > 0

    border_mask = dilated_transparent & opaque_mask

    # 将边缘像素 alpha 设为0,颜色不用管
    data[border_mask, 3] = 0

    return Image.fromarray(data, "RGBA")

0114洗完澡。在画图中没找到看像素具体rgba的地方我还以为那些过渡灰阶alpha是255,代码试了发现边缘像素还在,还是gpt找出来的问题。或许其实可以直接把face中alpha!=255的像素点全换成透明像素,但懒得试了。可以试的,干嘛不试,这可是性能大优化。

所以还是决定force_hard_alpha了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def force_hard_alpha(img: Image.Image) -> Image.Image:
    """
    将所有 alpha 不等于 255 的像素设为完全透明,去除羽化边缘。
    """
    img = img.convert("RGBA")
    data = np.array(img)
    alpha = data[:, :, 3]

    # 找出 alpha 不为 255 的位置
    non_hard_alpha_mask = alpha != 255

    # 将这些像素设置为透明
    data[non_hard_alpha_mask] = [0, 0, 0, 0]

    return Image.fromarray(data, "RGBA")

逻辑好麻烦,交给GPT:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 输入路径
bodyArray = [1,3,4,5,7,8,9]
faceArray = list(range(1, 39))  # [1, 2, 3, ..., 38]

# 随机选择一个 body 和 face 数字
body_id = random.choice(bodyArray)
face_id = random.choice(faceArray)

BODY_PATH = f"ft藍咲_{body_id}a.png"
FACE_PATH = f"ft04_a1_{face_id}.png" 这里的逻辑要改,先从[1,3,4,5,7,8,9]中选择body,若是9,则不需要face,否则仍需‘a'或'c',即BODY_PATH = f"ft藍咲_{body_id}a.png"或BODY_PATH = f"ft藍咲_{body_id}c.png";若需选择face,则从a1[1,2,..,37]和a2[1,2,..,19]中随机选一个,即FACE_PATH = f"ft04_a1_{face_id}.png"或FACE_PATH = f"ft04_a2_{face_id}.png"

0147来上床,把aisa也加进image-composite,让她每天更新;也写进github主页。blog的canvas就懒得加她了,太麻烦了。在想要不要把今晚经历写文档,我真的是绕了个远路啊,想起jojo sbr。明天再说吧。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计