터미널에 Gif 애니메이션 표시
8313 단어 Ruby
터미널에 그림 보이기
원본 코드를 기반으로 Gif 애니메이션도 표시할 수 있도록 확장되었습니다.
#!/usr/bin/env ruby
require 'curses'
require 'rmagick'
DOT_CHAR = " "
IMAGE_PATH = ARGV[0]
INTERVAL = ARGV[1] ? ARGV[1].to_f : nil
def pixel2color_text(pixel)
color = [pixel.red, pixel.green, pixel.blue].map { |n| (n * 5) / (255 * 255) }
"\x1b[48;5;#{16 + color[0] * 36 + color[1] * 6 + color[2]}m#{DOT_CHAR}\x1b[0m"
end
def screen_columns
Curses.init_screen
columns = Curses.cols / 2
Curses.close_screen
columns
end
def draw(image)
image = image.sample((1.0 * screen_columns) / image.columns)
rows = (0...image.rows).map do |row|
pixels = image.get_pixels(0, row, image.columns, 1)
pixels.map { |pixel| pixel2color_text(pixel) }.join
end
picture = rows.join("\n")
puts picture
end
def animate(image_path)
image_list = Magick::ImageList.new(image_path)
# (ImageList#delay から算出した) デフォルトの interval 値でアニメがもっさりする場合は
# INTERVAL の値を 0.1 などに弄ってみてください。
interval = INTERVAL || ((1.0 * image_list.delay) / 100)
image_list.each do |image|
draw(image)
sleep(interval)
end
end
def clear_screen
puts "\e[H\e[2J"
end
def main
interrupted = false
Signal.trap(:INT) { interrupted = true }
# Ctrl + C で終了します。
# ※ ただし、現在のアニメーションが最後のコマまで再生されるまでは終了できません。
until interrupted do
animate(IMAGE_PATH)
end
clear_screen
end
main
데모
신난다!✌(’ω’✌ )세 개✌(’ω’)✌셋.✌’ω’)✌
Reference
이 문제에 관하여(터미널에 Gif 애니메이션 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/QUANON/items/287bc7d52d13a1936865텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)