2015/01/01(木) [n年前の日記]
#1 [nitijyou] あけおめことよろ
あけましておめでとうございます。本年もどうぞよろしくお願い申し上げます。
[ ツッコむ ]
#2 [prog][nitijyou][cg_tools] 年賀状を書くためにPythonスクリプトを書いたり
年賀状に貼る画像を作成すべく、素材画像を作成後、Python +
_Pillow (PIL)
で、ドット単位で加工をするスクリプトを書いてみたり。年賀状を書くためにPythonスクリプトを書く! みたいな。
環境は、Windows7 x64 + Python 2.7.8 + Pillow 2.6.1。
_conv_img.py
こういう処理が簡単に書けるから、Python + Pillow (PIL) は個人的に好きです。お手軽・気楽に使えると言うか。
しかし、考えてみたら、この程度ならGIMPでもできるよなあ…。例えば…。
GIMPで試してみたり。
うむ。Python スクリプトを書く必要は無かった…ですね…。
環境は、Windows7 x64 + Python 2.7.8 + Pillow 2.6.1。
_conv_img.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # -*- mode: python;Encoding: utf8n -*- ''' 1ドットずつ加工した画像を生成するPythonスクリプト usage: conv_img.py INPUT_IMAGE OUTPUT_IMAGE ''' import sys from PIL import Image SCALEX, SCALEY = 8, 8 def get_color(c, v): ''' 色を与えられた係数で明るくしたり暗くしたり ''' r, g, b = c return (int(r * v), int(g * v), int(b * v)) def write_img(im, sx, sy, cc): ''' 1ドット分の色を数倍にして描き込む ''' nx = sx * SCALEX ny = sy * SCALEY r, g, b = cc for y in range(SCALEY): for x in range(SCALEX): im.putpixel((nx + x, ny + y), (r, g, b)) for x in range(SCALEX): x0 = nx + x y0 = ny im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.3)) # y0 = ny + 1 # im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.2)) # y0 = ny + SCALEY - 2 # im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.7)) y0 = ny + SCALEY - 1 im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.7)) for y in range(SCALEY): x0 = nx y0 = ny + y im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.2)) # x0 = nx + 1 # im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 1.1)) # x0 = nx + SCALEX - 2 # im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.8)) x0 = nx + SCALEX - 1 im.putpixel((x0, y0), get_color(im.getpixel((x0, y0)), 0.8)) def conv_img(infile, outfile): im = Image.open(infile, 'r') srcim = im.convert("RGB") w, h = im.size nim = Image.new("RGB", (w * SCALEX, h * SCALEY)) for y in range(h): for x in range(w): write_img(nim, x, y, srcim.getpixel((x, y))) nim.save(outfile, 'PNG') nim.show() def main(): argvs = sys.argv if len(argvs) != 3: print "usage: python conv_img.py INPUT_IMAGE OUTPUT_IMAGE" sys.exit() infile = argvs[1] outfile = argvs[2] conv_img(infile, outfile) if __name__ == '__main__': main()
python conv_img.py hoge.png hoge_out.pngと打てば、以下のような感じの変換が。
こういう処理が簡単に書けるから、Python + Pillow (PIL) は個人的に好きです。お手軽・気楽に使えると言うか。
しかし、考えてみたら、この程度ならGIMPでもできるよなあ…。例えば…。
- 元画像をn倍に、補間なしで拡大
- n x n ドットでグレースケールの画像を作る
- フィルタ → マップ → 並べる、で敷き詰める
- レイヤーで重ねてレイヤーモードを変更
GIMPで試してみたり。
うむ。Python スクリプトを書く必要は無かった…ですね…。
[ ツッコむ ]
#3 [cg_tools] 年賀状ソフトと透明度
年賀状ソフトの「筆まめ Ver. 21」を使って、画像配置・レイアウトをしていたのだけど。
テキストボックスの背面に、半透明を含んだグラデーションの角丸図形を置きたいなと思ったものの、どうやらそんな機能は無いようで。グラデーションの指定色1つ1つに対して、個別にアルファ値(透明度)を設定できない。図形全体に対しては設定できるのだけど。
以前は何を使ってソレをやったのだったか…。OpenOffice・LibreOfficeでやれたのかなあ…。それともGIMPで画像に直接描き込んだのだろうか…。
年賀状ソフトもそうだし、ドローソフトの DrawGraphic 2 もそうだったけど。1つ1つの色に対してアルファ値が設定できず、図形全体にしかアルファ値が設定できないあたり、なんだか気になる。Windowsアプリを作る際、そのあたり、何か制限でもあるんだろうか。ビジネスアプリを作る際によく使われるAPIには、そういう機能が無いとか? css や svg で半透明を含むグラデが表現できてる現在、ブラウザ上でも描画できる要素が、その手の専用ソフトではできないってどうなんだろ、てな印象も。
でもまあ、そういった機能を求めるユーザさんは少ないだろうし、できなくても別に問題なさそうだけど。それに、そこまでやりたい人は、えてしてCGツールの類を立ち上げちゃうだろうし。大体にして、年賀状を書く人もどんどん減ってるはずだから、今からそんな部分に労力をつぎ込んでみても。これまで作ったデータや、旧バージョンのアプリとの、互換性の問題もありそうだし。実装しない理由なんて、いくらでも挙げられるわな…。
ちなみに、自分は数年前に筆まめを購入して使ってるのだけど。 *1 今現在は _無料版 が存在するそうで。なんだか「筆自慢」を思い出す…。あのソフトがどうなったかを思い返すと、このソフトも、とりあえず今のうちにDLしておいたほうがいいのだろうか。
テキストボックスの背面に、半透明を含んだグラデーションの角丸図形を置きたいなと思ったものの、どうやらそんな機能は無いようで。グラデーションの指定色1つ1つに対して、個別にアルファ値(透明度)を設定できない。図形全体に対しては設定できるのだけど。
以前は何を使ってソレをやったのだったか…。OpenOffice・LibreOfficeでやれたのかなあ…。それともGIMPで画像に直接描き込んだのだろうか…。
年賀状ソフトもそうだし、ドローソフトの DrawGraphic 2 もそうだったけど。1つ1つの色に対してアルファ値が設定できず、図形全体にしかアルファ値が設定できないあたり、なんだか気になる。Windowsアプリを作る際、そのあたり、何か制限でもあるんだろうか。ビジネスアプリを作る際によく使われるAPIには、そういう機能が無いとか? css や svg で半透明を含むグラデが表現できてる現在、ブラウザ上でも描画できる要素が、その手の専用ソフトではできないってどうなんだろ、てな印象も。
でもまあ、そういった機能を求めるユーザさんは少ないだろうし、できなくても別に問題なさそうだけど。それに、そこまでやりたい人は、えてしてCGツールの類を立ち上げちゃうだろうし。大体にして、年賀状を書く人もどんどん減ってるはずだから、今からそんな部分に労力をつぎ込んでみても。これまで作ったデータや、旧バージョンのアプリとの、互換性の問題もありそうだし。実装しない理由なんて、いくらでも挙げられるわな…。
ちなみに、自分は数年前に筆まめを購入して使ってるのだけど。 *1 今現在は _無料版 が存在するそうで。なんだか「筆自慢」を思い出す…。あのソフトがどうなったかを思い返すと、このソフトも、とりあえず今のうちにDLしておいたほうがいいのだろうか。
◎ LibreOfficeなら半透明グラデができることを確認。 :
LibreOffice Writer で、半透明グラデが使えることを確認。図形を描画してから、図形の上で右クリック → 表面 → 透過性 → グラデーション、で、半透明なグラデーションが使える。
「グラデーションなんだから、グラデーションタブの中にあるんだろう」と思い込んで、「アレ? 機能が無いぞ?」と。半透明に関する指定は、全て、透過性タブの中にまとめてあるのだなと。おそらく色とは別の情報として管理している予感。
ただ、複数の値を指定することはできない ―― 開始と終了の2ヶ所しか値を指定できないので、自由度は低い印象。
色々ググってたら、Word等も半透明は使えるけど、印刷時に反映されない等の不具合が過去にあったそうで。Mso.dllの不具合だそうだけど。もしかすると、印刷まで担当するソフトと、半透明機能の組み合わせは鬼門だった時期がある故に、できれば実装したくない、てな事情があるのだろうか。
「グラデーションなんだから、グラデーションタブの中にあるんだろう」と思い込んで、「アレ? 機能が無いぞ?」と。半透明に関する指定は、全て、透過性タブの中にまとめてあるのだなと。おそらく色とは別の情報として管理している予感。
ただ、複数の値を指定することはできない ―― 開始と終了の2ヶ所しか値を指定できないので、自由度は低い印象。
色々ググってたら、Word等も半透明は使えるけど、印刷時に反映されない等の不具合が過去にあったそうで。Mso.dllの不具合だそうだけど。もしかすると、印刷まで担当するソフトと、半透明機能の組み合わせは鬼門だった時期がある故に、できれば実装したくない、てな事情があるのだろうか。
*1: 年賀状ソフトって、年賀状シーズンの中間、来年用の新バージョンが出る直前に、激安になる時期があって。プリンタと同じというか。
[ ツッコむ ]
以上、1 日分です。