冰箱研会长 发表于 2020-5-16 11:58

【AA】【搞笑】用ASCII ART (AA画) 来批量全损压缩漫画

本帖最后由 冰箱研会长 于 2020-5-16 17:39 编辑

更新:安装wkhtmltoimage 全自动出图 不需要截图了2333




一些必须写在前面的话

本篇教程 (如果这种垃圾帖子也可以成为教程的话), 除了扯淡以外无任何意义.
我对AA的了解属于浅尝辄止, 不排除已经有更先进, 更性能, 成品质量更稳定的方法存在

(因为我查都没查所以不知道有没有)

虽然结果大概率上不尽人意, 但如果它能给像我一样无法返校的人提供个消遣的话, 也不算完全的失败.
所以归根结底, 我还是希望各位能以轻松的心情看待本帖.

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516111251.png
什么? 你问为什么明明都有AA了还要发图片? 因为S1的有每行最大字符限制, 而我做出来的AA都超限了....

那么从现在开始切入主题

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516111855.png

要从一张图片制作出AA, 共有两个步骤:
1. 图像预处理
2. 像素符号映射

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516112646.JPG
一这张图片作为原图为例, 如果我们不首先进行处理, 直接符号映射会得到什么结果呢?

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516112017.png
嗯...很糟糕了.
华语作豚领袖nbht在点评 "普罗米亚" 的时候说过 "我们看动画.....看的是线条....不是色块...." (引用了名人名言)
先不论这句话在动画领域正确与否, 在AA画里, 我是觉得线条更为重要的.
同时, 因为AA原生就是不存在颜色的一种形式, 对于映射过程而言, 色块及其颜色都是一种干扰.
学习过素描的人可能知道, "画的真好, 像照片一样" 的前提是形准和阴影准, 那么我们在进行映射之前, 首先就是要提取出图像的线条和阴影信息.

要实现这个任务, 我们有很多的工具可以选择, 这里就找来人民的好朋友----老马制作的Comic Enhancer Pro
**** Hidden Message *****
这里提供老马一系列原创软件的链接, 积分不够的话可以直接百度前往老马的博客.
因为老马随软件提供了非常详细的教程, 对于软件的具体操作这里不会说的特别详细.

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113054.png
直接纯黑白, 简单拿出线和阴影:
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113120.png
点击批量处理, 自动调用同一套设置
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113226.png

处理结束之后,进入映射部分.
这里我们主要的映射部分使用Python, 搭配Powershell实现批量处理.
代码如下:
function asctrans($tpath,$sformat,$hscale,$wscale)
{
$pythonblock=@"
from PIL import Image
import os
import sys
filepath = sys.argv
heightarg = sys.argv
widtharg = sys.argv
CODE_LIB = r"B8&WM#YXQO{}[]()I1i!pao;:,.    "
count = len(CODE_LIB)
def transform_ascii(image_file):
    image_file = image_file.convert("L")
    code_pic = ''
    for h in range(0,image_file.size):
      for w in range(0,image_file.size):
            gray = image_file.getpixel((w,h))
            code_pic = code_pic + CODE_LIB
      code_pic = code_pic + "\n"
    return code_pic
def convert_image(inputfilepath,heightratio,weightration):
    heightratio=float(heightratio)
    weightration=float(weightration)
    image_file = Image.open(inputfilepath)
    image_file=image_file.resize((int(image_file.size*weightration), int(image_file.size*heightratio)))
    trans_data = transform_ascii(image_file)
    print(trans_data)
convert_image(filepath,heightarg,widtharg)
"@
Write-Output $pythonblock >> "$($tpath)\asc.py"
Get-ChildItem -recurse -LiteralPath $tpath -include *.$sformat | ForEach-Object{
      python "$($tpath)\asc.py" $_.FullName $hscale $wscale > "$($_.Directory)\$($_.Basename).txt"
}
}这段powershell的本质就是把所有python代码创建成一个字符串变量, 然后再目标目录位置创建python脚本并批量执行.
各位可以按需改动.

例子如下:
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113515.png

各位可以在
https://github.com/GrandArth/Risi-Pwsh-Profile
找到我的配置文件.

至于如何使用配置文件, 参见这个帖子的回复.

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113958.png这里我建议各位使用Powershell 7.0及以上, 因为有些特性很可能无法在老powershell中实现.

这个函数总共接受4个参数, 目标文件夹位置, 目标文件类型 ,高度缩放, 宽度缩放.
根据你电脑对"空格"的渲染设置的不同, 你可能需要对后两个参数进行多次调试才能拿到比较好的效果.
在我这里, 两者为1:2的时候效果比较好.
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516113934.png
那这篇垃圾帖子到这里就结束了, 希望大家早日开学上班(这是人话吗), 再也不用看我发的kuso帖子.

漫画转ASCII是怎么回事呢?漫画相信大家都很熟悉,但是漫画转ASCII是怎么回事呢,下面就让小编带大家一起了解吧。
漫画转ASCII,其实就是用符号表示图像,大家可能会很惊讶漫画怎么会转ASCII呢?但事实就是这样,小编也感到非常惊讶。
这就是关于漫画转ASCII的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

洗刷刷 发表于 2020-5-16 12:05

冰箱研会长 发表于 2020-5-16 12:19

本帖最后由 冰箱研会长 于 2020-5-16 12:21 编辑

更新一下压缩前后体积对比:
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516121737.png
一张3m的猫娘图https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516121758.png
压缩完了之后变成了18mbhttps://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516121823.png
https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516121845.png
众所周知, 图像体积当然是越大越好.
而且我们打开来看看, 可以看到几乎没有肉眼可见的损失

BT绅士 发表于 2020-5-16 12:51

反向压缩,最为致命

plazum 发表于 2020-5-16 13:17

冰箱研会长 发表于 2020-5-16 12:19
更新一下压缩前后体积对比:

一张3m的猫娘图


别的不说,这猫娘我射了

王留美 发表于 2020-5-16 13:19

猫娘的转换后效果图呢?

whzfjk 发表于 2020-5-16 13:23

冰箱研会长 发表于 2020-5-16 13:37

王留美 发表于 2020-5-16 13:19
猫娘的转换后效果图呢?

https://gitee.com/Arxher/Risiamu-Picture/raw/master/wikifiles/20200516133703.png

linux40 发表于 2020-5-16 15:07

因为mpv依赖,我一般用caca。

冰箱研会长 发表于 2020-5-16 15:14

本帖最后由 冰箱研会长 于 2020-5-16 15:18 编辑

linux40 发表于 2020-5-16 15:07
因为mpv依赖,我一般用caca。
Libcaca! 好东西 终端播视频还是很炫酷的 我记得ffpemg配套的ffplay也用caca库

哎 不过想生成能用的AA的话, 果然还是得分块做边缘检测... 不知道有没有人做

页: [1]
查看完整版本: 【AA】【搞笑】用ASCII ART (AA画) 来批量全损压缩漫画