memo/20120419
created 2012-04-19 modified 2012-04-24
cairoでギターフォームの図、とりあえずできた。
後述のソースのうち、重要なのは
frets = 4 leftmost_fret = 3 pos = [2, 2, 1, None, 2, None]の部分だけなので、この部分だけを指定すれば、上記のような図をWikiに埋め込めるようにしたい訳です。それをこれから考えて行きます。
Python ソースコード
↓4/24 英語のつづり間違ってるかも!
#!/usr/bin/env python #coding:utf-8 import cairo import math def main(): sf_w = 200 sf_h = 150 margin_x = 20 margin_y = 20 margin_fb_and_num = 20 margin_fret_num_h = 5 strings = 6 frets = 4 leftmost_fret = 3 pos = [2, 2, 1, None, 2, None] #下地 surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, sf_w, sf_h) cx = cairo.Context(surface) cx.set_source_rgb(1.0, 1.0, 1.0) cx.rectangle(0, 0, sf_w, sf_h) #左上 x y と 幅 高さ cx.fill() #マス cx.set_source_rgb(0.0, 0.0, 0.0) fb_x0 = margin_x fb_y0 = margin_y fb_x1 = sf_w - margin_x fb_y1 = sf_h - margin_y - margin_fret_num_h - margin_fb_and_num frets_interval_x = (fb_x1 - fb_x0) / frets strings_interval_y = (fb_y1 - fb_y0) / (strings-1) fb_x_seq = range(fb_x0, fb_x1, frets_interval_x) fb_x_seq.append(fb_x1) fb_y_seq = range(fb_y0, fb_y1, strings_interval_y) fb_y_seq.append(fb_y1) for px in fb_x_seq: cx.move_to(px, fb_y0) cx.line_to(px, fb_y1) for py in fb_y_seq: cx.move_to(fb_x0, py) cx.line_to(fb_x1, py) cx.stroke() #抑えるところマーク for i in range(6): if not pos[i] is None: pos_x = (pos[i] - 0.5) * frets_interval_x + fb_x0 pos_y = fb_y_seq[i] pos_r = strings_interval_y * 0.4 cx.arc(pos_x, pos_y, pos_r, 0, 2*math.pi) cx.fill() #フレット番号 cx.select_font_face( "monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) cx.set_font_size(14) font_x_bearing, font_y_bearing, font_width, font_height = \ cx.text_extents("8")[:4] fretnum_y = sf_h - margin_y - margin_fret_num_h fret_nums = range(leftmost_fret + 1, leftmost_fret + 1 + frets) for i in range(frets): fretnum_x = (i + 0.5) * frets_interval_x + fb_x0 cx.move_to(fretnum_x - font_width/2 - font_x_bearing, fretnum_y - font_height/2 - font_y_bearing) cx.show_text("%d" % fret_nums[i]) surface.write_to_png("test2-line.png") return main()
下記、参考にさせていただきました。ありがとうございます。
リンク | 備考 |
---|---|
画像処理についてあれこれ - pycairoのまとめ | |
Cairo Tutorial for Python Programmers |
2012 4/20
あああっ margine じゃなくて !!margin だろが俺のバカ。
だから嫌なんだよ!
→なおしました...
そしてさらに
flet じゃなくて fret です。OTL
→なおしました...