Pythonで画像の出力

Python->Tkinter->Canvasに描いた画像を保存します。


canvasのpostscriptメソッドを使うと、PSファイルを出力できます。
http://kansai.anesth.or.jp/gijutu/python/man-gui/man-canvas.php#c-postscript

PSファイルってなんぞー?

PS(PostScript)というのは、ベクタ、ラスタ、テキスト、なコンピュータ上で実現できるすべての形式を含む画像形式のことらしいです。パソコン間やプリンタとの画像のやり取りはPostScriptが使われているとのこと。
参考:http://cns-guide.sfc.keio.ac.jp/2001/10/1/2.html#SECTION011120500000000000000

とりあえず、下記のモンキーPythonのお絵かきソフトに保存機能をつけてみます。
モンキーPython:http://www.nslabs.jp/monkey-python-02.rhtml

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
import Tkinter

class Scribble:
def on_pressed(self, event):
self.sx = event.x
self.sy = event.y
self.canvas.create_oval(self.sx, self.sy, event.x, event.y, outline = "red", width = 5)

def on_dragged(self, event):
self.canvas.create_line(self.sx, self.sy, event.x, event.y, fill = "red", width = 5)
self.sx = event.x
self.sy = event.y

def save_image(self, event):
self.canvas.postscript(file="outfile.ps")
print "saved!"

def __init__(self):
window = Tkinter.Tk()
self.canvas = Tkinter.Canvas(window, bg = "white", width = 300, height = 300)
self.canvas.pack()
quit_button = Tkinter.Button(window, text = "Exit", command = window.quit)
quit_button.pack(side = Tkinter.RIGHT)

self.canvas.bind("<ButtonPress-1>", self.on_pressed)
self.canvas.bind("<B1-Motion>", self.on_dragged)
self.canvas.bind("<ButtonPress-3>", self.save_image)

window.mainloop()

Scribble()


cap_20081006205743.jpg

27行目でバインディングして、右クリックでsave_imageメソッドを呼び出すようにします。
右クリックすると、output.psができているはず。ちなみにPostScriptはGSviewなどで見れます。


いや、しかし、日常的に使うJPEGとかGIFとかでほしいわけで、それはどうするのかと言うと、PIL(Python Image Library)といった画像編集ライブラリを使えば簡単にできるようです。
http://www.phactory.jp/blog/pyblosxom.cgi/tech/080901.html

PILは他にも拡大とかトリミングとかできるらしいので、使い方はまたいつかに~。
つか、インストールしてないっていう・・

目次へ

追記:
あれ、できなかった・・。EPS吐いてるらしいから出来ると思うんだけど・・。Ghostscript が認識されてないのか?
同様の事例
http://www.dojoforum.com/node/12836
う~ん?
ImageMagickならできるかもしれない。
現在の対応策、IrfanViewにPsファイルのプラグイン入れて変換(笑)
関連記事

コメント

質問です

こんにちは。
このお絵かきソフトに画面に描かれた描画を白紙状態に戻すボタンを付けたいと思っているのですが、どうすればいいのでしょうか?

こんにちは。

白紙状態に戻すには描写されているもの(オブジェクト)を全て消せばいいわけですね。
オブジェクトの削除についてはこちらで扱ってます。
http://timiditybraver.blog71.fc2.com/blog-entry-354.html

オブジェクトの削除にはidが必要です。なので、生成時に作られるidをリストに格納しておくなどしてidを管理しておくのが良いですが、白紙の場合は、Canvasにfind_allという全てのオブジェクトのidをリストで返してくれるメソッドがあるので、それを使うと便利です。

こんな感じですね。
http://blog-imgs-32.fc2.com/t/i/m/timiditybraver/oekaki_renew.txt

ありがとうございます!

疑問が解決されました!
ありがとうございます!

コメントの投稿

非公開コメント

このブログについて
□ ブログ内容
決まった趣旨はありません。
興味を持ったこと・日常で行ったことを何でも書きます。

3DCG・プログラミングなどが多めです。

★下記のブログに移行しました★
https://tiblab.net/blog/
検索フォーム
ユーザータグ

Blender キャプチャ blendファイル BGE GameEngine Python ムービー Android  CG Red5 Terragen C# C++ 

カテゴリー
プロフィール

TiBra

Author:TiBra
趣味でCG制作、プログラミング等を行っています。メイカーズに憧れています。

ネットを通じた交流を広げたく思っていますので、コメント・メールはお気軽にどぞー

Mail:tibraあっとlive.jp
HP:TibLabmemocode
動画:VimeoFC2動画ニコニコ
ファイル:SkyDrive
企画:3Dゲーム作業実況

Blogリンク
不都合がございましたらご連絡ください。
当ブログのリンクバナー
FC2 ID
FC2カウンター
RSSフィード