fortran66のブログ

fortran について書きます。

【メモ帳】昨日の微修正

binder gfortran-8/julia

binder で生成される Docker イメージは保存されるようなので、一回起動させれば、設定を修正しない限り、その後の起動は早くなるようです。

Binder
一旦出来るようになると、細部が分からないままでも簡単に出来ます。昔、謎に思ったのが馬鹿らしいほどに。それぞれ数文字の数行のテキスト・ファイルを二三個 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")