<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>essaysinidleness &#187; Python勉強</title>
	<atom:link href="http://essaysinidleness.net/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>http://essaysinidleness.net</link>
	<description>essaysinidlenessは、Apple,Mac,iPhone,iPad,iTunesなどのキーワードを中心に、音楽・デジモノ・映画・ゲーム等、ワクワクできる面白い情報を紹介するブログです。</description>
	<lastBuildDate>Fri, 30 Jul 2010 02:49:07 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Pythonで画像を一括縮小して正方形にするツールの完成版</title>
		<link>http://essaysinidleness.net/create/python/20100511193429.html</link>
		<comments>http://essaysinidleness.net/create/python/20100511193429.html#comments</comments>
		<pubDate>Tue, 11 May 2010 10:34:29 +0000</pubDate>
		<dc:creator>Tatsuro</dc:creator>
				<category><![CDATA[Python勉強]]></category>

		<guid isPermaLink="false">http://essaysinidleness.net/?p=5052</guid>
		<description><![CDATA[かなり久々になるPython関連のエントリー。 前回画像をディレクトリごと縮小して余白を足して正方形にするツールを作ったのだけど、今度はそれに手を入れて暫定だけど完成型にしてみた。 今までに無く、今回新しく足した機能がコチラ。 2つのサイズを一度に吐き出す 元ファイルを残す→新しくフォルダを作ってそこに保存する プログレスバーをつける 終わったら閉じる 何気に苦労したので、少なくとも自分の為に記事に残しておきますｗ まず実際の完成した雰囲気がこんな感じ。 仕事で使うだけなので、もうサイズの選択とか無し。そして適当につけたプログレスバーｗ　まあこんなもんでしょうｗ んで、これのコードがこんな感じ。 # -*- coding: utf-8 -*- import Image import ImageDraw import glob import os import wx &#160; class GUI&#40;wx.Frame&#41;: def __init__&#40;self, parent, id, title&#41;: wx.Frame.__init__&#40;self, parent, id, title, size=&#40;450,100&#41;&#41; self.functions = Events&#40;self&#41; self.panel = wx.Panel&#40;self, -1&#41; self.count = 0 &#160; self.select = wx.Button &#40;self.panel, -1, [...]]]></description>
			<content:encoded><![CDATA[<p>かなり久々になるPython関連のエントリー。</p>
<p><img class="alignnone size-large wp-image-3021" title="2443dac31194ff3c747290ef1df" src="http://essaysinidleness.net/wordpress/wp-content/uploads/2443dac31194ff3c747290ef1df-500x149.png" alt="2443dac31194ff3c747290ef1df" width="500" height="149" /></p>
<p>前回画像をディレクトリごと縮小して余白を足して正方形にするツールを作ったのだけど、今度はそれに手を入れて暫定だけど完成型にしてみた。</p>
<p><span id="more-5052"></span></p>
<p>今までに無く、今回新しく足した機能がコチラ。</p>
<ul>
<li>2つのサイズを一度に吐き出す</li>
<li>元ファイルを残す→新しくフォルダを作ってそこに保存する</li>
<li>プログレスバーをつける</li>
<li>終わったら閉じる</li>
</ul>
<p>何気に苦労したので、少なくとも自分の為に記事に残しておきますｗ</p>
<p>まず実際の完成した雰囲気がこんな感じ。</p>
<p><img class="alignnone size-large wp-image-5053" title="100511120631" src="http://essaysinidleness.net/wordpress/wp-content/uploads/100511120631-500x229.jpg" alt="100511120631" width="500" height="229" /></p>
<p>仕事で使うだけなので、もうサイズの選択とか無し。そして適当につけたプログレスバーｗ　まあこんなもんでしょうｗ</p>
<p>んで、これのコードがこんな感じ。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> Image
<span style="color: #ff7700;font-weight:bold;">import</span> ImageDraw
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">glob</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> wx
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> GUI<span style="color: black;">&#40;</span>wx.<span style="color: black;">Frame</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, parent, <span style="color: #008000;">id</span>, title<span style="color: black;">&#41;</span>:
        wx.<span style="color: black;">Frame</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, parent, <span style="color: #008000;">id</span>, title, size=<span style="color: black;">&#40;</span><span style="color: #ff4500;">450</span>,<span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">functions</span> = Events<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">panel</span> = wx.<span style="color: black;">Panel</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">count</span> = <span style="color: #ff4500;">0</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: #dc143c;">select</span> = wx.<span style="color: black;">Button</span>    <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;Select&quot;</span>, pos=<span style="color: black;">&#40;</span><span style="color: #ff4500;">350</span>,<span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">text</span>   = wx.<span style="color: black;">TextCtrl</span>  <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;Select Folder&quot;</span>, pos=<span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">12</span><span style="color: black;">&#41;</span>, size=<span style="color: black;">&#40;</span><span style="color: #ff4500;">330</span>,<span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">go</span>     = wx.<span style="color: black;">Button</span>    <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;Resize&quot;</span>, pos=<span style="color: black;">&#40;</span><span style="color: #ff4500;">350</span>,<span style="color: #ff4500;">40</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">gauge</span>  = wx.<span style="color: black;">Gauge</span>     <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">100</span>, size=<span style="color: black;">&#40;</span><span style="color: #ff4500;">330</span>, <span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>, pos=<span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>,<span style="color: #ff4500;">40</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">Bind</span><span style="color: black;">&#40;</span>wx.<span style="color: black;">EVT_BUTTON</span>, <span style="color: #008000;">self</span>.<span style="color: black;">functions</span>.<span style="color: black;">showDlg</span>,  <span style="color: #008000;">id</span> = <span style="color: #008000;">self</span>.<span style="color: #dc143c;">select</span>.<span style="color: black;">GetId</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">Bind</span><span style="color: black;">&#40;</span>wx.<span style="color: black;">EVT_BUTTON</span>, <span style="color: #008000;">self</span>.<span style="color: black;">functions</span>.<span style="color: black;">goResize</span>, <span style="color: #008000;">id</span> = <span style="color: #008000;">self</span>.<span style="color: black;">go</span>.<span style="color: black;">GetId</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Events<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, parent<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">gui</span> = parent
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> showDlg<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, evt<span style="color: black;">&#41;</span>:
        DirPath = <span style="color: #483d8b;">&quot;/&quot;</span>
        Dlg = wx.<span style="color: black;">DirDialog</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">gui</span>, message=<span style="color: #483d8b;">&quot;Please Choose Directory&quot;</span>, defaultPath=DirPath<span style="color: black;">&#41;</span>
        AnsBtn = Dlg.<span style="color: black;">ShowModal</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">global</span> dirpath
        dirpath = Dlg.<span style="color: black;">GetPath</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> AnsBtn == wx.<span style="color: black;">ID_OK</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">text</span>.<span style="color: black;">SetLabel</span><span style="color: black;">&#40;</span>dirpath<span style="color: black;">&#41;</span>
        Dlg.<span style="color: black;">Destroy</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> goResize<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, evt<span style="color: black;">&#41;</span>:
&nbsp;
        <span style="color: #808080; font-style: italic;">#フォルダの作成</span>
        <span style="color: #ff7700;font-weight:bold;">global</span> dir100
        dir100 = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;160&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>dir100<span style="color: black;">&#41;</span> == <span style="color: #008000;">True</span>:
            <span style="color: #ff7700;font-weight:bold;">pass</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>dir100<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">global</span> dir200
        dir200 = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;400&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>dir200<span style="color: black;">&#41;</span> == <span style="color: #008000;">True</span>:
            <span style="color: #ff7700;font-weight:bold;">pass</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>dir200<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;">#ファイル数計算</span>
        filecount = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> infile <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;*.jpg&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            filecount = filecount + <span style="color: #ff4500;">1</span>
        ansfilecount = <span style="color: #ff4500;">100</span>/filecount
&nbsp;
        <span style="color: #808080; font-style: italic;">#画像処理</span>
        a = <span style="color: #ff4500;">100</span>
        sizea = a, a
        b = <span style="color: #ff4500;">200</span>
        sizeb = b, b
        <span style="color: #ff7700;font-weight:bold;">for</span> infile <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;*.jpg&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>infile<span style="color: black;">&#41;</span>
            im.<span style="color: black;">thumbnail</span><span style="color: black;">&#40;</span>sizea,Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
            box = <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>a - im.<span style="color: black;">size</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>,<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>a - im.<span style="color: black;">size</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            bg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;RGB&quot;</span>,sizea,<span style="color: #483d8b;">&quot;#ffffff&quot;</span><span style="color: black;">&#41;</span>
            bg.<span style="color: black;">paste</span><span style="color: black;">&#40;</span>im,box<span style="color: black;">&#41;</span>
            bg.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dir100,<span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">basename</span><span style="color: black;">&#40;</span>infile<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>,quality=<span style="color: #ff4500;">80</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> infile <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;*.jpg&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>infile<span style="color: black;">&#41;</span>
            im.<span style="color: black;">thumbnail</span><span style="color: black;">&#40;</span>sizeb,Image.<span style="color: black;">ANTIALIAS</span><span style="color: black;">&#41;</span>
            box = <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>b - im.<span style="color: black;">size</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>,<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>b - im.<span style="color: black;">size</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            bg = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;RGB&quot;</span>,sizeb,<span style="color: #483d8b;">&quot;#ffffff&quot;</span><span style="color: black;">&#41;</span>
            bg.<span style="color: black;">paste</span><span style="color: black;">&#40;</span>im,box<span style="color: black;">&#41;</span>
            bg.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dir200,<span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">basename</span><span style="color: black;">&#40;</span>infile<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>,quality=<span style="color: #ff4500;">80</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">count</span> = <span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">count</span> + ansfilecount
            <span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">gauge</span>.<span style="color: black;">SetValue</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">count</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">gui</span>.<span style="color: black;">gauge</span>.<span style="color: black;">SetValue</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span>
        wx.<span style="color: black;">Exit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Application<span style="color: black;">&#40;</span>wx.<span style="color: black;">App</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, redirect = <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>:
        wx.<span style="color: black;">App</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> OnInit<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        frame = GUI<span style="color: black;">&#40;</span><span style="color: #008000;">None</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #483d8b;">&quot;Resize Image&quot;</span><span style="color: black;">&#41;</span>
        frame.<span style="color: black;">Show</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
Application<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">MainLoop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>もう驚きの無駄コードだね。ファイル数の計算の部分とか本当はos.dirlistとか使いたかったけど、時間が無かったので普通にforでカウント。素人の書くコードです。ご理解の方お願いいたしますorz</p>
<h5>2つのサイズを一度に吐き出す</h5>
<p>これは説明する事は無いかな。今までの縮小処理コードを2つ書いただけ。</p>
<h5>元ファイルを残す→新しくフォルダを作ってそこに保存する</h5>
<p>これ、正しいのか正しくないのかいまいち分からないのだけど、こんな感じの書き方になった。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">        <span style="color: #ff7700;font-weight:bold;">global</span> dir100
        dir100 = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;160&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>dir100<span style="color: black;">&#41;</span> == <span style="color: #008000;">True</span>:
            <span style="color: #ff7700;font-weight:bold;">pass</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>dir100<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">global</span> dir200
        dir200 = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;400&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">exists</span><span style="color: black;">&#40;</span>dir200<span style="color: black;">&#41;</span> == <span style="color: #008000;">True</span>:
            <span style="color: #ff7700;font-weight:bold;">pass</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>dir200<span style="color: black;">&#41;</span></pre></div></div>

<p>普通にディレクトリをos.makedirsで作ろうと思った時、既にそのファイルがあるとエラーがでてしまうので、os.path.existsでまずファイル名の有無を確認。既に存在する場合はpass(何もせず)で、elseでos.makedirsにしてみた。</p>
<h5>プログレスバーをつける</h5>
<p>これが今回一番めんどうくさかった。GUIはwxPythonで作っているので、なんか簡単にwxPythonでプログレスバーを設置できるでしょ！とか思って検索したら全然日本語での記事がヒットしない。</p>
<p>ちょっと調べたらwxGaugeという便利な物があるそうなので、海外にあるサンプルコードを見てみる。すると、意外と簡単に実装できそうだったので書いてみた。</p>
<p>まず、GUIクラスにカウントと実際のプログレスバーの設置。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #008000;">self</span>.<span style="color: black;">count</span> = <span style="color: #ff4500;">0</span>
<span style="color: #008000;">self</span>.<span style="color: black;">gauge</span> = wx.<span style="color: black;">Gauge</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">panel</span>, -<span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">100</span><span style="color: black;">&#41;</span></pre></div></div>

<p>で、進行具合を単純に+1で刻むならこんな感じになる。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">i = <span style="color: #ff4500;">0</span>
<span style="color: #ff7700;font-weight:bold;">while</span> i == <span style="color: #ff4500;">100</span>:
	i + <span style="color: #ff4500;">1</span>
	<span style="color: #008000;">self</span>.<span style="color: black;">gauge</span>.<span style="color: black;">SetValue</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span></pre></div></div>

<p>この進行値の増え方は各々のツールによります。例えば上記の自分が書いたコードだと、「ディレクトリ内のファイル数一つの割合＝進行値」なので、</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">        filecount = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> infile <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">glob</span>.<span style="color: #dc143c;">glob</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dirpath, <span style="color: #483d8b;">&quot;*.jpg&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            filecount = filecount + <span style="color: #ff4500;">1</span>
        ansfilecount = <span style="color: #ff4500;">100</span>/filecount</pre></div></div>

<p>という感じに100をファイル数で割って計算しています。</p>
<p>本来は小数点までガチっと計算すべきなのかもしれませんが、大雑把に進行具合が分かれば良いので、整数のまま最後に100をwx.Gaugeに渡している。</p>
<h5>終わったら閉じる</h5>
<p>wx.Exit()書いただけでいいのかな？ここがちょっと不安なのでもう少し調べてみる。</p>
<p>////////////////////////////////////////</p>
<p>今後は他の作ったツールにもプログレスバーを設置していこうかなぁと思います。</p>
<p>それでは。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797353953/essaysinidleness-22/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41B-p0eqGeL._SL160_.jpg" border="0" alt="4797353953" /></a><br />
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797353953/essaysinidleness-22/" target="_blank">みんなのPython 改訂版 (単行本)</a></p>

	<img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/python" title="Python勉強" rel="tag">Python勉強</a>

	関連する投稿
	<ul class="st-related-posts">
	<li><a href="http://essaysinidleness.net/create/python/20091104120119.html" title="結局Pythonコードのバイナリ化はpy2exeに (2009/11/04)">結局Pythonコードのバイナリ化はpy2exeに</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091014102613.html" title="オブジェクト指向についてちょっと書いて脳内整理 (2009/10/14)">オブジェクト指向についてちょっと書いて脳内整理</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091013100731.html" title="PILで文字描画をした時にそのサイズを測るコードサンプル (2009/10/13)">PILで文字描画をした時にそのサイズを測るコードサンプル</a></li>
	<li><a href="http://essaysinidleness.net/create/20091007011018.html" title="PyscripterからEclipseに移行した (2009/10/07)">PyscripterからEclipseに移行した</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091006231054.html" title="PythonでGUIアプリケーション【2】 (2009/10/06)">PythonでGUIアプリケーション【2】</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://essaysinidleness.net/create/python/20100511193429.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>結局Pythonコードのバイナリ化はpy2exeに</title>
		<link>http://essaysinidleness.net/create/python/20091104120119.html</link>
		<comments>http://essaysinidleness.net/create/python/20091104120119.html#comments</comments>
		<pubDate>Wed, 04 Nov 2009 03:01:19 +0000</pubDate>
		<dc:creator>Tatsuro</dc:creator>
				<category><![CDATA[Python勉強]]></category>
		<category><![CDATA[py2exe]]></category>

		<guid isPermaLink="false">http://essaysinidleness.net/?p=3605</guid>
		<description><![CDATA[ちょっと月末が忙しくて触れなかったので、久々のPythonエントリー。 といっても、バイナリ化に関する記事ですけど(´μヽ)　もうちょっとコードスペニットとか書けるようにがんばらねば。 というわけで、今日はバイナリ化に関してのエントリー。 wxPythonを使いGUIアプリケーションをちょっと作ってみたんですが、そのアプリケーションをバイナリ化する時にpyinstallerを使用するとバイナリ化できないという問題がありました。で、せっかくだからbbfreezeを使った(リンク：bbfreezeを使ってPythonコードをexe(実行形式)に)のだけど、bbfreezeはアプリケーションのアイコンが設定できない上にファイル数が多いという問題が。 で、結局のところ一番最初に使ったpy2exeを使用する事に。結局最初に戻るのね(´μヽ)　経緯を書いてみると、 とりあえずpy2exeを使ってみる ↓ 一つのexeにまとめたいからpyinstaller使う ↓ wxPython使うとpyinstallerが使えない ↓ 複数のファイル数になるけど諦めてbbfreeze使う ↓ ファイル数多すぎワロタ。それにアイコン設定できね(&#8216;A｀) ↓ 結局py2exeか……　←いまここ 他にもバイナリ化ツールを試してみましたが、まあ良い勉強になった。 wxPythonを使わないのであればpyinstaller。色々ライブラリを使ったりするのならpy2exeって所ですかねぇ。 なんか、Pythonはこういうちょっと痒い部分があるなぁ。日本語の情報のみでやってるからこういう風になるんだろうなぁ。 さて、この辺りでちょっと基本を学びなおしたいな。本格的に参考書を購入してみようかな。これから勉強系のエントリー書いたら次の目標も書いてみよう。 ■次の目標 Pythonの基本を勉強する バージョン間の差異を調べる SQLiteの勉強←現在進行形 Python ポケットリファレンス (Pocket Reference) (単行本（ソフトカバー）) py2exePython勉強 関連する投稿 Pythonで画像を一括縮小して正方形にするツールの完成版 オブジェクト指向についてちょっと書いて脳内整理 PILで文字描画をした時にそのサイズを測るコードサンプル PyscripterからEclipseに移行した PythonでGUIアプリケーション【2】]]></description>
			<content:encoded><![CDATA[<p>ちょっと月末が忙しくて触れなかったので、久々のPythonエントリー。</p>
<p><img class="alignnone size-large wp-image-3021" title="2443dac31194ff3c747290ef1df" src="http://essaysinidleness.net/wordpress/wp-content/uploads/2443dac31194ff3c747290ef1df-500x149.png" alt="2443dac31194ff3c747290ef1df" width="500" height="149" /></p>
<p>といっても、バイナリ化に関する記事ですけど(´μヽ)　もうちょっとコードスペニットとか書けるようにがんばらねば。</p>
<p><span id="more-3605"></span></p>
<p>というわけで、今日はバイナリ化に関してのエントリー。</p>
<p>wxPythonを使いGUIアプリケーションをちょっと作ってみたんですが、そのアプリケーションをバイナリ化する時にpyinstallerを使用するとバイナリ化できないという問題がありました。で、せっかくだからbbfreezeを使った(リンク：<a href="http://essaysinidleness.net/create/python/20090917131946.html">bbfreezeを使ってPythonコードをexe(実行形式)に</a>)のだけど、<span style="color: red;">bbfreezeはアプリケーションのアイコンが設定できない上にファイル数が多い</span>という問題が。</p>
<p>で、結局のところ一番最初に使ったpy2exeを使用する事に。結局最初に戻るのね(´μヽ)　経緯を書いてみると、</p>
<p>とりあえずpy2exeを使ってみる<br />
↓<br />
一つのexeにまとめたいからpyinstaller使う<br />
↓<br />
wxPython使うとpyinstallerが使えない<br />
↓<br />
複数のファイル数になるけど諦めてbbfreeze使う<br />
↓<br />
ファイル数多すぎワロタ。それにアイコン設定できね(&#8216;A｀)<br />
↓<br />
結局py2exeか……　←いまここ</p>
<p>他にもバイナリ化ツールを試してみましたが、まあ良い勉強になった。</p>
<p>wxPythonを使わないのであればpyinstaller。色々ライブラリを使ったりするのならpy2exeって所ですかねぇ。</p>
<p>なんか、Pythonはこういうちょっと痒い部分があるなぁ。日本語の情報のみでやってるからこういう風になるんだろうなぁ。</p>
<p>さて、この辺りでちょっと基本を学びなおしたいな。本格的に参考書を購入してみようかな。これから勉強系のエントリー書いたら次の目標も書いてみよう。</p>
<p>■次の目標</p>
<ul>
<li>Pythonの基本を勉強する</li>
<li>バージョン間の差異を調べる</li>
<li>SQLiteの勉強←現在進行形</li>
</ul>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774138053/essaysinidleness-22/" target="_blank"><img src="http://ec3.images-amazon.com/images/I/51NNxQpJVZL._SL160_.jpg" alt="4774138053" border="0" /></a><br />
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774138053/essaysinidleness-22/" target="_blank">Python ポケットリファレンス (Pocket Reference) (単行本（ソフトカバー）)</a></p>

	<img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/py2exe" title="py2exe" rel="tag">py2exe</a><img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/python" title="Python勉強" rel="tag">Python勉強</a>

	関連する投稿
	<ul class="st-related-posts">
	<li><a href="http://essaysinidleness.net/create/python/20100511193429.html" title="Pythonで画像を一括縮小して正方形にするツールの完成版 (2010/05/11)">Pythonで画像を一括縮小して正方形にするツールの完成版</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091014102613.html" title="オブジェクト指向についてちょっと書いて脳内整理 (2009/10/14)">オブジェクト指向についてちょっと書いて脳内整理</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091013100731.html" title="PILで文字描画をした時にそのサイズを測るコードサンプル (2009/10/13)">PILで文字描画をした時にそのサイズを測るコードサンプル</a></li>
	<li><a href="http://essaysinidleness.net/create/20091007011018.html" title="PyscripterからEclipseに移行した (2009/10/07)">PyscripterからEclipseに移行した</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091006231054.html" title="PythonでGUIアプリケーション【2】 (2009/10/06)">PythonでGUIアプリケーション【2】</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://essaysinidleness.net/create/python/20091104120119.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オブジェクト指向についてちょっと書いて脳内整理</title>
		<link>http://essaysinidleness.net/create/python/20091014102613.html</link>
		<comments>http://essaysinidleness.net/create/python/20091014102613.html#comments</comments>
		<pubDate>Wed, 14 Oct 2009 01:26:13 +0000</pubDate>
		<dc:creator>Tatsuro</dc:creator>
				<category><![CDATA[Python勉強]]></category>

		<guid isPermaLink="false">http://essaysinidleness.net/?p=3499</guid>
		<description><![CDATA[先日作った画像合成ツールについてちょっと考えてみる。Pythonはオブジェクト指向言語なのでクラスを作ってプログラムを組んだのだけど、それに関して考えている事をテキストに起こしてみる。 所謂オブジェクト指向というのはクラスを作ることで情報を整理し、素材を与える事で結果が返ってくるプログラムだと勝手に解釈している。(結果、メソッドとかが再利用できたり別用途で使用できたりという利点があるとも思っています) で、今回の画像合成プログラムの場合どういう風にクラスとメソッドを分けるのが正解なのか。その辺りがまだ少し自分の中で明確じゃなかったりするので、テキストに起こしてみて整理してみる事に。 まず、現在のプログラムの構成はこんな感じ。会社の内部情報を含む部分が多々あるのでコードを丸ごと転載できない故、見づらいとは思いますが自分の解釈でプログラムの内容を書いてみる。 GUIクラス 　　__init__(クラスのインターフェース) 　　　　csvファイル選択ボタン 　　　　選択したcsvファイルを表示するテキストボックス 　　　　保存先設定ボタン 　　　　設定した保存先を表示するテキストボックス 　　　　実行ボタン ダイアログでパスを取得するクラス 　　__init__ 　　csvを選択するメソッド 　　　　csvのパス、ファイル名などを取得 　　　　テキストボックスにパスを表示 　　保存先を設定するメソッド 　　　　保存先のパス 　　　　テキストボックスにパスを表示 実行クラス 　　__init__ 　　処理メソッド 　　　　csvファイルの中の情報を元に 　　　　ベース画像を作成 　　　　画像をごにょごにょ……etc 　　　　文字をごにょごにょ……etc 　　　　数字をごにょごにょ……etc 　　　　保存先に設定したパスへ保存 アプリケーションの実装 　　__init__ 　　　　フレームを設定 　　　　GUIクラスのパーツを取得 一先ず、こんな感じでしょうか。4つのクラスで構成されている感じです。 で、自分が考えていたのは「どこまで細分化・分別化すればいいのか」です。用はどこまでメソッドって分ければいいの？と。処理を分けまくってつなぎ合わせて一つの処理を作る事は全然可能ですが、それって処理速度的には良くないんじゃない？などなど、色々考えました。変な話、1本……というかクラスなんて無くてもこの処理だったら書けるわけです。 そんな事を考えている最中、ある事に気づいた。それは「後で使える(再利用)できる形にするのがベスト」という事に。というか、そうでなければオブジェクト指向の意味がなくなってくる。 どんなデータを渡してもそれに応じた答えが返ってくる部分を処理クラス(メソッド)に。それ以外のどうしようもない部分は別クラスにする。こうする事で他の昨日追加した時や別のプログラムで画像処理だけインポートして使ったり。HTMLとCSSを分けるような感覚。 その辺をふまえて上記のクラス。処理がダダっと書いてあるだけで、1つの処理専用クラスみたいな感じになっています。これを改善する為にはどうしたら良いか。 まず、CSVの内容をばらして下準備。各セルのデータを元に合成するパーツを作成という感じ。そして、画像や文字の加工部分をそれぞれ別メソッドに。一つの素材を投げれば加工された画像が返ってくるように。 こうする事で「ちょっと画像合成のレイヤーの順番変えたいなぁ」と思ったとき、下準備のメソッドだけ追加して画像データと順番に関する情報を画像処理メソッドに投げるだけで完成というわけだ。 もっと大きく言うと、画像処理は画像処理でまとめてpyファイルにしておいて、それをimportして使った方が良いのか？ｗ　まあそれはもっと大規模なコードになってからかな。 というわけで、頭の中で考えていた事をテキストにしてみました。 それでは(´μヽ) Python勉強 関連する投稿 Pythonで画像を一括縮小して正方形にするツールの完成版 結局Pythonコードのバイナリ化はpy2exeに PILで文字描画をした時にそのサイズを測るコードサンプル PyscripterからEclipseに移行した PythonでGUIアプリケーション【2】]]></description>
			<content:encoded><![CDATA[<p>先日作った画像合成ツールについてちょっと考えてみる。Pythonはオブジェクト指向言語なのでクラスを作ってプログラムを組んだのだけど、それに関して考えている事をテキストに起こしてみる。</p>
<p>所謂オブジェクト指向というのはクラスを作ることで情報を整理し、素材を与える事で結果が返ってくるプログラムだと勝手に解釈している。(結果、メソッドとかが再利用できたり別用途で使用できたりという利点があるとも思っています)</p>
<p>で、今回の画像合成プログラムの場合どういう風にクラスとメソッドを分けるのが正解なのか。その辺りがまだ少し自分の中で明確じゃなかったりするので、テキストに起こしてみて整理してみる事に。</p>
<p><span id="more-3499"></span></p>
<p>まず、現在のプログラムの構成はこんな感じ。会社の内部情報を含む部分が多々あるのでコードを丸ごと転載できない故、見づらいとは思いますが自分の解釈でプログラムの内容を書いてみる。</p>
<pre>GUIクラス
　　__init__(クラスのインターフェース)
　　　　csvファイル選択ボタン
　　　　選択したcsvファイルを表示するテキストボックス
　　　　保存先設定ボタン
　　　　設定した保存先を表示するテキストボックス
　　　　実行ボタン

ダイアログでパスを取得するクラス
　　__init__
　　csvを選択するメソッド
　　　　csvのパス、ファイル名などを取得
　　　　テキストボックスにパスを表示
　　保存先を設定するメソッド
　　　　保存先のパス
　　　　テキストボックスにパスを表示

実行クラス
　　__init__
　　処理メソッド
　　　　csvファイルの中の情報を元に
　　　　ベース画像を作成
　　　　画像をごにょごにょ……etc
　　　　文字をごにょごにょ……etc
　　　　数字をごにょごにょ……etc
　　　　保存先に設定したパスへ保存

アプリケーションの実装
　　__init__
　　　　フレームを設定
　　　　GUIクラスのパーツを取得</pre>
<p>一先ず、こんな感じでしょうか。4つのクラスで構成されている感じです。</p>
<p>で、自分が考えていたのは「どこまで細分化・分別化すればいいのか」です。用はどこまでメソッドって分ければいいの？と。処理を分けまくってつなぎ合わせて一つの処理を作る事は全然可能ですが、それって処理速度的には良くないんじゃない？などなど、色々考えました。変な話、1本……というかクラスなんて無くてもこの処理だったら書けるわけです。</p>
<p>そんな事を考えている最中、ある事に気づいた。それは「後で使える(再利用)できる形にするのがベスト」という事に。というか、そうでなければオブジェクト指向の意味がなくなってくる。</p>
<p>どんなデータを渡してもそれに応じた答えが返ってくる部分を処理クラス(メソッド)に。それ以外のどうしようもない部分は別クラスにする。こうする事で他の昨日追加した時や別のプログラムで画像処理だけインポートして使ったり。HTMLとCSSを分けるような感覚。</p>
<p>その辺をふまえて上記のクラス。処理がダダっと書いてあるだけで、1つの処理専用クラスみたいな感じになっています。これを改善する為にはどうしたら良いか。</p>
<p>まず、CSVの内容をばらして下準備。各セルのデータを元に合成するパーツを作成という感じ。そして、画像や文字の加工部分をそれぞれ別メソッドに。一つの素材を投げれば加工された画像が返ってくるように。</p>
<p>こうする事で「ちょっと画像合成のレイヤーの順番変えたいなぁ」と思ったとき、下準備のメソッドだけ追加して画像データと順番に関する情報を画像処理メソッドに投げるだけで完成というわけだ。</p>
<p>もっと大きく言うと、画像処理は画像処理でまとめてpyファイルにしておいて、それをimportして使った方が良いのか？ｗ　まあそれはもっと大規模なコードになってからかな。</p>
<p>というわけで、頭の中で考えていた事をテキストにしてみました。</p>
<p>それでは(´μヽ)</p>

	<img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/python" title="Python勉強" rel="tag">Python勉強</a>

	関連する投稿
	<ul class="st-related-posts">
	<li><a href="http://essaysinidleness.net/create/python/20100511193429.html" title="Pythonで画像を一括縮小して正方形にするツールの完成版 (2010/05/11)">Pythonで画像を一括縮小して正方形にするツールの完成版</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091104120119.html" title="結局Pythonコードのバイナリ化はpy2exeに (2009/11/04)">結局Pythonコードのバイナリ化はpy2exeに</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091013100731.html" title="PILで文字描画をした時にそのサイズを測るコードサンプル (2009/10/13)">PILで文字描画をした時にそのサイズを測るコードサンプル</a></li>
	<li><a href="http://essaysinidleness.net/create/20091007011018.html" title="PyscripterからEclipseに移行した (2009/10/07)">PyscripterからEclipseに移行した</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091006231054.html" title="PythonでGUIアプリケーション【2】 (2009/10/06)">PythonでGUIアプリケーション【2】</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://essaysinidleness.net/create/python/20091014102613.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PILで文字描画をした時にそのサイズを測るコードサンプル</title>
		<link>http://essaysinidleness.net/create/python/20091013100731.html</link>
		<comments>http://essaysinidleness.net/create/python/20091013100731.html#comments</comments>
		<pubDate>Tue, 13 Oct 2009 01:07:31 +0000</pubDate>
		<dc:creator>Tatsuro</dc:creator>
				<category><![CDATA[Python勉強]]></category>
		<category><![CDATA[PIL]]></category>

		<guid isPermaLink="false">http://essaysinidleness.net/?p=3485</guid>
		<description><![CDATA[先日一先ず完成した社内用の画像合成ツール。その中で自分が探すのに困ったコードや調べたコードを伝えるハブエントリー。 まずはImageDrawを使った文字を描画した後にそのサイズを取得する方法を書いてみます。 まずはサンプルコード。 1 2 3 4 5 6 7 8 9 10 # -*- coding: utf-8 -*- import Image import ImageDraw import ImageFont &#160; canvas = Image.new&#40;&#34;RGB&#34;,&#40;200,200&#41;,&#34;#ffffff&#34;&#41; text = &#34;text sample&#34; font = ImageFont.truetype&#40;'ariblk.ttf',24&#41; draw = ImageDraw.Draw&#40;canvas&#41; &#40;textw, texth&#41; = draw.textsize&#40;text , font=font&#41; こんな感じ。このコードの後にprint textw,texthと打つと print textw, texth &#62;&#62;&#62;155 34 と返ってくる。うん。ちゃんと取得できてるできてる。 //////////////////////////////////////// さて、コードの覚書。というか自分で再確認&#038;暗記する為のチラ裏。importの所は飛ばしますね。 まずはImage.newで新しい無地のキャンバスを作成。描画する内容、描画するフォント、それから描画する場所を設定。 [...]]]></description>
			<content:encoded><![CDATA[<p>先日一先ず完成した社内用の画像合成ツール。その中で自分が探すのに困ったコードや調べたコードを伝えるハブエントリー。</p>
<p><img class="alignnone size-large wp-image-3021" title="2443dac31194ff3c747290ef1df" src="http://essaysinidleness.net/wordpress/wp-content/uploads/2443dac31194ff3c747290ef1df-500x149.png" alt="2443dac31194ff3c747290ef1df" width="500" height="149" /></p>
<p>まずはImageDrawを使った文字を描画した後にそのサイズを取得する方法を書いてみます。</p>
<p><span id="more-3485"></span></p>
<p>まずはサンプルコード。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">import</span> Image
<span style="color: #ff7700;font-weight:bold;">import</span> ImageDraw
<span style="color: #ff7700;font-weight:bold;">import</span> ImageFont
&nbsp;
canvas = Image.<span style="color: #dc143c;">new</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;RGB&quot;</span>,<span style="color: black;">&#40;</span><span style="color: #ff4500;">200</span>,<span style="color: #ff4500;">200</span><span style="color: black;">&#41;</span>,<span style="color: #483d8b;">&quot;#ffffff&quot;</span><span style="color: black;">&#41;</span>
text = <span style="color: #483d8b;">&quot;text sample&quot;</span>
font = ImageFont.<span style="color: black;">truetype</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'ariblk.ttf'</span>,<span style="color: #ff4500;">24</span><span style="color: black;">&#41;</span>
draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>canvas<span style="color: black;">&#41;</span>
<span style="color: black;">&#40;</span>textw, texth<span style="color: black;">&#41;</span> = draw.<span style="color: black;">textsize</span><span style="color: black;">&#40;</span>text , font=font<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>こんな感じ。このコードの後にprint textw,texthと打つと</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">print</span> textw, texth
<span style="color: #66cc66;">&gt;&gt;&gt;</span><span style="color: #ff4500;">155</span> <span style="color: #ff4500;">34</span></pre></div></div>

<p>と返ってくる。うん。ちゃんと取得できてるできてる。</p>
<p style="text-align: center;">////////////////////////////////////////</p>
<p>さて、コードの覚書。というか自分で再確認&#038;暗記する為のチラ裏。importの所は飛ばしますね。</p>
<p>まずはImage.newで新しい無地のキャンバスを作成。描画する内容、描画するフォント、それから描画する場所を設定。</p>
<p>そして、</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: black;">&#40;</span>textw, texth<span style="color: black;">&#41;</span> = draw.<span style="color: black;">textsize</span><span style="color: black;">&#40;</span>text , font=font<span style="color: black;">&#41;</span></pre></div></div>

<p>で描画後のテキストサイズを取得する事が可能。</p>
<p>実際に描画するには</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">draw.<span style="color: black;">text</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>, text, font=font, fill=<span style="color: #483d8b;">'#000000'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>というコードを書かないといけない。というかそれを書くまでは描画されない。</p>
<p>この</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">draw = ImageDraw.<span style="color: black;">Draw</span><span style="color: black;">&#40;</span>canvas<span style="color: black;">&#41;</span></pre></div></div>

<p>というDrawを定義するコード(描画する場所)を予め書いてからでないと、サイズの取得はできない。</p>
<p style="text-align: center;">////////////////////////////////////////</p>
<p>という感じで、文字描画する時の文字サイズ取得方法でした。このサイズを取得する事で、キャンバスの好きな位置に文字を描画したり、また横幅を越えて描画してしまいそうな時のエラーや処理も出せるようになります。</p>
<p>次はリサイズの時のTipsなんかを書いてみるかな。@nobonoboさんからの受け売りですがｗ</p>
<p>それでは。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774138053/essaysinidleness-22/" target="_blank"><img src="http://ec3.images-amazon.com/images/I/51NNxQpJVZL._SL160_.jpg" alt="4774138053" border="0" /></a><br />
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774138053/essaysinidleness-22/" target="_blank">Python ポケットリファレンス (Pocket Reference) (単行本（ソフトカバー）)</a></p>

	<img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/pil" title="PIL" rel="tag">PIL</a><img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/python" title="Python勉強" rel="tag">Python勉強</a>

	関連する投稿
	<ul class="st-related-posts">
	<li><a href="http://essaysinidleness.net/create/python/20100511193429.html" title="Pythonで画像を一括縮小して正方形にするツールの完成版 (2010/05/11)">Pythonで画像を一括縮小して正方形にするツールの完成版</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091104120119.html" title="結局Pythonコードのバイナリ化はpy2exeに (2009/11/04)">結局Pythonコードのバイナリ化はpy2exeに</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091014102613.html" title="オブジェクト指向についてちょっと書いて脳内整理 (2009/10/14)">オブジェクト指向についてちょっと書いて脳内整理</a></li>
	<li><a href="http://essaysinidleness.net/create/20091007011018.html" title="PyscripterからEclipseに移行した (2009/10/07)">PyscripterからEclipseに移行した</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091006231054.html" title="PythonでGUIアプリケーション【2】 (2009/10/06)">PythonでGUIアプリケーション【2】</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://essaysinidleness.net/create/python/20091013100731.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyscripterからEclipseに移行した</title>
		<link>http://essaysinidleness.net/create/20091007011018.html</link>
		<comments>http://essaysinidleness.net/create/20091007011018.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 16:10:18 +0000</pubDate>
		<dc:creator>Tatsuro</dc:creator>
				<category><![CDATA[制作関連]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Python勉強]]></category>

		<guid isPermaLink="false">http://essaysinidleness.net/create/20091007011018.html</guid>
		<description><![CDATA[自分がPythonを触り始める時、手頃そうだったPyscripterというエディタを使用していたのですが、wxPythonとの相性が最悪でストレスがマックスになったので、IDEをEclipseに移行した。 で、ちょこっと触ってみた感想は「Eclipse素晴らしいな」 自分は少しPHPを触った事があるので、Eclipse自体はちょこっと触った事があったのですが、そこまで大掛かりなプログラムを書いているわけでもないし、簡単にささっと書けるエディタを愛用する傾向があるので日本語化まではしたものの、本格的に使う事はありませんでした。 しかし今思えば、その時なんで本格的に使わなかったんだろうと悔やむばかりです。Eclipse、素晴らしすぎる。 で、そんな自分がPyscripterからEclipseに移行する再のメリットを書いてみようと思います。あくまでもPyscripterからEclipseに移行する際の初心者視点からのメリットなので、本職プログラマさんからしたら「おま、そんな事で……」と思う部分が多々含まれると思われます。ご了承ください(´μヽ) とりあえずメリット一覧 総合開発環境(Java/PHP/C++/Perlなどの言語環境にも対応できる) マルチプラットフォームという利点 実行した後にUndoできる wxPythonが問題なく使用できる プラグインによる機能の追加 起動が重いけ起動したらEclipseの方が速い件 とまあこんな所ですかね。 //////////////////////////////////////// Pythonに限って言えばGUI開発する時にwxPythonが問題なく使用できるという部分と実行した後にUndoできる(←いやこれ基本だと思うんだけどw)のが今の自分にとって最大のメリットです。 PyscripterはwxPythonをimportして実行するとエディタがフリーズするという最悪なバグがありました。なので今までは実行&#62;再起動を繰り返していたのですが、これって相当ありえなかった。エディタでHTMLを書いてブラウザで確認する作業を苦に感じていた自分が幸せだったと気づくほどにw　おまけにUndoできないので余分なファイルを一つ開いてバックアップしながらデバッグしないといけないという……。 //////////////////////////////////////// 更に総合開発環境、マルチプラットフォームという点も非常に魅力でした。Mac/Windows/Linuxなど、プラットフォームが変わっても同じエディタを起動して好きな言語で開発できる。使いこなせばEclipseひとつあれば環境や場所に左右されないという点は非常に魅力的ですよね。 更にプラグインによる機能追加も嬉しい。まだ本格的に調べていないのですが、PythonやPHP開発に便利なプラグインもあるようです。この辺りはこれから楽しみたいと思います。 //////////////////////////////////////// というわけでPyscripter使ってPython書いている人はすぐに移行した方がいいと思います。ストレスを溜めながら時間を犠牲にするのは自分だけで十分だっ！ しかしPythonの楽しさを教えてくれたPyscripterには心から感謝の意を表したいと思います。 ありがとう、Pyscripter！ ※WindowsのEclipseのインストールについてはググればうじゃうじゃでてくるので、徒然草:remixには今度サラっと覚え書き程度だけしておきますかね。Macへのインストールも兼ねて。 EclipsePython勉強 関連する投稿 Pythonで画像を一括縮小して正方形にするツールの完成版 結局Pythonコードのバイナリ化はpy2exeに オブジェクト指向についてちょっと書いて脳内整理 PILで文字描画をした時にそのサイズを測るコードサンプル PythonでGUIアプリケーション【2】]]></description>
			<content:encoded><![CDATA[<p>自分がPythonを触り始める時、手頃そうだったPyscripterというエディタを使用していたのですが、wxPythonとの相性が最悪でストレスがマックスになったので、IDEをEclipseに移行した。</p>
<p><a href="http://essaysinidleness.net/wordpress/wp-content/uploads/ishot-0910070047501.png" rel="lightbox"><img src="http://essaysinidleness.net/wordpress/wp-content/uploads/ishot-0910070047501.jpg" width="500" height="199" alt="ishot-0910070047501.png" style="border:1px #000000 solid;" /></a></p>
<p>で、ちょこっと触ってみた感想は「Eclipse素晴らしいな」</p>
<p><span id="more-3459"></span>
<p>自分は少しPHPを触った事があるので、Eclipse自体はちょこっと触った事があったのですが、そこまで大掛かりなプログラムを書いているわけでもないし、簡単にささっと書けるエディタを愛用する傾向があるので日本語化まではしたものの、本格的に使う事はありませんでした。</p>
<p>しかし今思えば、その時なんで本格的に使わなかったんだろうと悔やむばかりです。Eclipse、素晴らしすぎる。</p>
<p>で、そんな自分がPyscripterからEclipseに移行する再のメリットを書いてみようと思います。あくまでもPyscripterからEclipseに移行する際の初心者視点からのメリットなので、本職プログラマさんからしたら「おま、そんな事で……」と思う部分が多々含まれると思われます。ご了承ください(´μヽ)</p>
<p>とりあえずメリット一覧</p>
<ul>
<li>総合開発環境(Java/PHP/C++/Perlなどの言語環境にも対応できる)</li>
<li>マルチプラットフォームという利点</li>
<li>実行した後にUndoできる</li>
<li>wxPythonが問題なく使用できる</li>
<li>プラグインによる機能の追加</li>
<li>起動が重いけ起動したらEclipseの方が速い件</li>
</ul>
<p>とまあこんな所ですかね。</p>
<p style="text-align: center;">////////////////////////////////////////</p>
<p>Pythonに限って言えばGUI開発する時にwxPythonが問題なく使用できるという部分と実行した後にUndoできる(←いやこれ基本だと思うんだけどw)のが今の自分にとって最大のメリットです。</p>
<p>PyscripterはwxPythonをimportして実行するとエディタがフリーズするという最悪なバグがありました。なので今までは実行&gt;再起動を繰り返していたのですが、これって相当ありえなかった。エディタでHTMLを書いてブラウザで確認する作業を苦に感じていた自分が幸せだったと気づくほどにw　おまけにUndoできないので余分なファイルを一つ開いてバックアップしながらデバッグしないといけないという……。</p>
<p style="text-align: center;">////////////////////////////////////////</p>
<p>更に総合開発環境、マルチプラットフォームという点も非常に魅力でした。Mac/Windows/Linuxなど、プラットフォームが変わっても同じエディタを起動して好きな言語で開発できる。使いこなせばEclipseひとつあれば環境や場所に左右されないという点は非常に魅力的ですよね。</p>
<p>更にプラグインによる機能追加も嬉しい。まだ本格的に調べていないのですが、PythonやPHP開発に便利なプラグインもあるようです。この辺りはこれから楽しみたいと思います。</p>
<p style="text-align: center;">////////////////////////////////////////</p>
<p>というわけでPyscripter使ってPython書いている人はすぐに移行した方がいいと思います。ストレスを溜めながら時間を犠牲にするのは自分だけで十分だっ！</p>
<p>しかしPythonの楽しさを教えてくれたPyscripterには心から感謝の意を表したいと思います。</p>
<p>ありがとう、Pyscripter！</p>
<p>※WindowsのEclipseのインストールについてはググればうじゃうじゃでてくるので、徒然草:remixには今度サラっと覚え書き程度だけしておきますかね。Macへのインストールも兼ねて。</p>

	<img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/eclipse" title="Eclipse" rel="tag">Eclipse</a><img src="http://essaysinidleness.net/blogparts/listicon/simple_tagg.gif" style=" margin: 0px 2px 0px 8px;" alt="タグ" /><a href="http://essaysinidleness.net/tag/python" title="Python勉強" rel="tag">Python勉強</a>

	関連する投稿
	<ul class="st-related-posts">
	<li><a href="http://essaysinidleness.net/create/python/20100511193429.html" title="Pythonで画像を一括縮小して正方形にするツールの完成版 (2010/05/11)">Pythonで画像を一括縮小して正方形にするツールの完成版</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091104120119.html" title="結局Pythonコードのバイナリ化はpy2exeに (2009/11/04)">結局Pythonコードのバイナリ化はpy2exeに</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091014102613.html" title="オブジェクト指向についてちょっと書いて脳内整理 (2009/10/14)">オブジェクト指向についてちょっと書いて脳内整理</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091013100731.html" title="PILで文字描画をした時にそのサイズを測るコードサンプル (2009/10/13)">PILで文字描画をした時にそのサイズを測るコードサンプル</a></li>
	<li><a href="http://essaysinidleness.net/create/python/20091006231054.html" title="PythonでGUIアプリケーション【2】 (2009/10/06)">PythonでGUIアプリケーション【2】</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://essaysinidleness.net/create/20091007011018.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
