SlideShare a Scribd company logo
Pythonでターミナルに画像表示
藤武将人@Swall0wTech
#stapy 2016/10/12
1
2自己紹介
名前: 藤武 将人
(Masato FUJITAKE)
Twitter : @Swall0wTech
専攻:ロボットの制御とかとか
言語:c言語、C++,アセンブリとか
Python歴:約6ヵ月
(画像処理、機械学習等)
最近Gnu Parallelに感動しました!
自然言語処理に興味あります。
SSHで作業してる時に画像を開こうと…
3
4
どんな画像なのかだけでいいから
知りたい
画像を開いて、
エスケープシーケンスコードに変換
ターミナルに出力
5Pythonでターミナルに画像表示
Python画像ライブラリPillow
6画像を開く
https://pillow.readthedocs.io/en/3.4.x/
Anacondaに入ってる!
7画像を開く→RGB値取得
from PIL import Image
img = Image.open(files)
imgW = img.size[0]
imgH = img.size[1]
for y in range(0, imgH):
for x in range(0, imgW):
offset = y * imgW + x
xy = (x, y)
rgb = img.getpixel(xy)
rgbR = rgb[0]
rgbG = rgb[1]
rgbB = rgb[2]
ファイル
読み込み
RGB
取得
「ls」とかの表示に変化をつける特殊文字
8エスケープシーケンスとは…?
実際はこんなの 033[36m
エスケープシーケンスコード 処理内容コード 終了コード
赤い文字→ Echo “033[31mred”
9とりあえずechoで試す
赤い文字→ Echo “033[38;2;R;G;Bmred”
RGB値で
画像:解像度いろいろ…640x480とか
端末:55x237とか
小さい方に合わせて変換
10解像度変更
img.thumbnail((xの大きさ, yの大きさ), Image.ANTIALIAS)
端末の大きさ取得
import os
terminal_size = os.popen('stty size').read().split()
11結果!
ぱっと見変だけど、何かはわかる。
他にも端末出力にはSixel Graphicsもあるらしい…
https://goo.gl/YR49AZ
12
#!/usr/bin python3
# -*- coding: utf-8 -*-
from PIL import Image
import sys
import os
import math
import argparse
def get_terminal_size():
terminal_size = os.popen('stty size').read().split()
# return the sizes in list
return terminal_size
def set_parameter_string(default, IsTrueValue):
'''
Initializing parameter with default value or True value.
If the IsTrueValue is None, initialize with default value.
Or not, initialize with IsTrueValue
'''
return IsTrueValue if IsTrueValue else default
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Show some image files')
parser.add_argument(dest='filenames', metavar='filename', nargs='*')
#parser.add_argument('-p', '--pat', metavar='pattern', dest='patterns',help=)
parser.add_argument('-s','--split', dest='splits', action='store', help='Value of display splitting by input images. Type an integer number.')
parser.add_argument('-p', '--pat', dest='pattern', action='store', help='A displayed mark. The default parameter is a white space.')
args = parser.parse_args()
ソースコード1
13
try:
print(args.filenames)
for files in args.filenames:
img = Image.open(files)
imgW = img.size[0]
imgH = img.size[1]
imgh = img.size[1]
TerminalSize = get_terminal_size()
terminaly = int(TerminalSize[0])
terminalx = int(TerminalSize[1])
img = img.resize(( imgW, round(imgH*2/3) ))
splitNum = set_parameter_string('1',args.splits)
terminalY = round((terminaly -1)/int(splitNum))
img.thumbnail((terminalx, terminalY), Image.ANTIALIAS)
convertedImgW = img.size[0]
convertedImgH = img.size[1]
ascii_markNum = '38' if args.pattern else '48'
ascii_markString = 'm'+args.pattern[0] if args.pattern else 'm '
if(img.mode == "RGB" or img.mode == "RGBA"):
for y in range(0, convertedImgH):
for x in range(0, convertedImgW):
offset = y * convertedImgW + x
xy = (x, y)
rgb = img.getpixel(xy)
rgbR = rgb[0]
rgbG = rgb[1]
rgbB = rgb[2]
outline = "033[" + ascii_markNum +";2;" + str(rgbR) + ";" + str(rgbG) + ";" + str(rgbB) + ascii_markString
sys.stdout.write(outline)
sys.stdout.write("033[0mn")
except:
print("Error")
ソースコード2
「ゲームで極める シェルスクリプト
スーパーテクニック」
山本 丈範
技術評論社
14参考書籍
ご清聴有難うございました
15
https://goo.gl/d5a47h

More Related Content

PDF
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
PDF
Automatic Mixed Precision の紹介
PDF
Constexpr 中3女子テクニック
PPTX
非同期処理の基礎
PDF
ドロネー三角形分割
PDF
オブジェクト指向できていますか?
PDF
Union find(素集合データ構造)
PPTX
大規模ゲーム開発における build 高速化と安定化
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
Automatic Mixed Precision の紹介
Constexpr 中3女子テクニック
非同期処理の基礎
ドロネー三角形分割
オブジェクト指向できていますか?
Union find(素集合データ構造)
大規模ゲーム開発における build 高速化と安定化

What's hot (20)

PDF
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
PDF
高速な倍精度指数関数expの実装
PDF
Unityネイティブプラグインの勧め
PDF
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
PPTX
shared_ptrとゲームプログラミングでのメモリ管理
PDF
ソーシャルゲームのためのデータベース設計
PDF
すごい constexpr たのしくレイトレ!
PDF
Unity開発で使える設計の話+Zenjectの紹介
PDF
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
PDF
コールバックと戦う話
PDF
IL2CPPに関する軽い話
PDF
機械学習で泣かないためのコード設計 2018
PPTX
async/await のしくみ
PDF
ゲームの仕様書を書こうまとめ
PPTX
RPGにおけるイベント駆動型の設計と実装
PPTX
C#や.NET Frameworkがやっていること
PDF
中3女子が狂える本当に気持ちのいい constexpr
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
PDF
C++ マルチスレッドプログラミング
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
高速な倍精度指数関数expの実装
Unityネイティブプラグインの勧め
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
shared_ptrとゲームプログラミングでのメモリ管理
ソーシャルゲームのためのデータベース設計
すごい constexpr たのしくレイトレ!
Unity開発で使える設計の話+Zenjectの紹介
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
コールバックと戦う話
IL2CPPに関する軽い話
機械学習で泣かないためのコード設計 2018
async/await のしくみ
ゲームの仕様書を書こうまとめ
RPGにおけるイベント駆動型の設計と実装
C#や.NET Frameworkがやっていること
中3女子が狂える本当に気持ちのいい constexpr
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
C++ マルチスレッドプログラミング
Ad

Viewers also liked (6)

PPTX
Seq2Seqでボットづくり
PPTX
Stapy#17LT
PPTX
Stapy#22 LT
PDF
Python学習奮闘記#07 webapp
PDF
WindowsでPython
PDF
アジャイルってなにが美味しいの
Seq2Seqでボットづくり
Stapy#17LT
Stapy#22 LT
Python学習奮闘記#07 webapp
WindowsでPython
アジャイルってなにが美味しいの
Ad

Pythonでターミナルに画像表示