binder gfortran-8/julia
binder で生成される Docker イメージは保存されるようなので、一回起動させれば、設定を修正しない限り、その後の起動は早くなるようです。
一旦出来るようになると、細部が分からないままでも簡単に出来ます。昔、謎に思ったのが馬鹿らしいほどに。それぞれ数文字の数行のテキスト・ファイルを二三個 github にうpするだけでした。
Julia AA
文法を学んで、試してみました。
文関数、module, optional 引数、「露出」補正関数のスイッチ。
#using Pkg #Pkg.add("Images") #Pkg.add("FileIO") #Pkg.add("ImageMagick") module myAA using Images using FileIO const fr, fg, fb = 0.3, 0.6, 0.1 rgb_norm(x) = fr * red(x) + fg * green(x) + fb * blue(x) distance(x, y) = sum(map(rgb_norm, x - y)) function to_ascii(font, im) d = fill(0.0, 95) for i = 1:95 d[i] = distance(font[i], im) end Char(Int(' ') + findmin(d)[2]) end function exposure_correction(font, img, char) # over/under exposure correction arbtary_parameter = 4.0 r = distance(font, img) / arbtary_parameter + 1 n = min(9, convert(Int, floor(r))) if char == 'R' # black ['*', '*', '*', '=', '=', 'H', 'R', 'M', '#'][n] elseif char == '!' # white [' ', ' ', '`', ',', '"', '-', '~', ':', '!'][n] else char end end function AA(font, img, flag) ny, nx = size_spatial(img) for iy = 1:8:ny-7 for ix = 1:4:nx-3 char = to_ascii(font, img[iy:iy+7, ix:ix+3]) if flag char = exposure_correction(font[1], img[iy:iy+7, ix:ix+3], char) end print(char) end println() end end function main(font_file, file_name, exposeure_correction = true) # load and chop fonts fonts = load(font_file) font = fill(fonts[:, 1:4], 95) # Array{RGB{Normed{UInt8, 8}}, 2} for i = 1:95 font[i] = fonts[:, 4*i-3:4*i] # display(font[i]) # font = 0.6 .* font end # load image img = load(file_name) # main AA(fonts, img, exposeure_correction) end end # module myAA
myAA.main("font4x8.gif", "tktt.jpg")