2014年1月9日木曜日

Webサーバー (Apache) でPythonファイルを実行できるように設定する

webサイト作成中に躓いたこと。

Pythonで作成した配列をJSONにエンコードしてAjaxで受け取ろうとすると、JSONではなくPythonのソースコードがそのまま送られてきた。

原因はwebサーバー上でPythonを実行できるように設定していなかったため。

手順は以下のとおり

1.Apacheの設定ファイルを開く
sudo vim /etc/httpd/conf/httpd.conf

2.次の記述箇所を検索して編集する
  AddHandler cgi-script .cgi 
=>  AddHandler cgi-script .cgi .py

3.次の記述箇所を検索し
<Directory "/var/www/html">
その少し離れた下の方にある記述を編集

  Options Indexes FollowSymLinks 
=>  Options Indexes FollowSymLinks ExecCGI


4.Apacheを再起動
sudo service httpd restart

以上


ちなみに

手順2の編集箇所に .pl .rb など各言語の拡張子を追記すれば実行可能になる模様。

また、DirectoryIndex index.html〜 という箇所に index.py など使用したい言語のindexページを記述しておけば html の動的生成ができるようだ。

2014年1月4日土曜日

pillowにlibjpegを導入する

pillowでjpeg画像を編集しているとdecode errorのようなメッセージが出た。
どうやらpillowだけではjpeg画像を扱えないらしい。

ということでlibjpegを導入する。(sudoは省略)

1.libjpegのダウンロード

wget http://www.ijg.org/files/jpegsrc.v9.tar.gz


2.解凍

tar xzvf jpegsrc.v9.tar.gz


3.ちょいと設定をいじる
./configure --enable-shared


4.インストール
make
make install


5.pillowをアンインストール
pip uninstall -y pillow


6.pillowをインストール
pip install pillow


無事、JPEGを扱えるようになりました。


追記)pythonを実行中に
shared object file 云々
のエラーが出たら、ライブラリへのパスが設定されていない可能性があるので、
/etc/ld.so.config.d/
のディレクトリに次の記述をしたファイルを作成する。
/usr/local/lib/
ファイル名は
python2.7lib.conf
のように .conf で終わるように付ける。

2014年1月3日金曜日

Pillowのthumbnailオプション比較

JPEGが開けませんといった問題を乗り越えて使えるようになったpillowで画像のリサイズをしてみた。

リサイズに用いたthumbnailメソッドにはresampleというオプションがあり、

  • NEAREST
  • BILINEAR
  • BICUBIC
  • ANTIALIAS

の4種類から指定できる。ちなみにオプション省略時はNEARESTが適用される。


早速これら4つのオプションを比較してみる。
検証画像はこちら。



この画像を300×300にリサイズ

NEAREST
曲線部分がカックカクな上にぶつ切りになっている。
傾斜のある直線も垂直方向に修正された結果、変なストライプができてしまった。


 BILINEAR
全体的にぼかされて曲線や斜め線のカックカクが改善されている。



BICUBIC
曲線や斜め線のカックカクが改善されているのに画像がシャープなまま。
ただし水平や垂直に近い曲線はカクカクしている。


ANTIALIAS
全体的にぼかされてカックカクな部分がほとんどない。


まとめ

オプションはBICUBICかANTIALIASを指定すべきだろう。
シャープさを求めるならBICUBIC
曲線美を求めるならANTIALIAS
といったところか。


ちなみに
サイズは300×300を指定したが、実際には最大長が300になるように縦横比率を保持してリサイズされた。
いちいち最大長を求めて条件分岐云々をやらなくて済む便利なメソッドのようだ。

2014年1月2日木曜日

CentOSにPython2.7をインストールし直す

先日、Vagrant上のCentOSにPython2.7をインストールした。

これに画像処理のライブラリpillowを入れたがimportできない。

どうやらCentOSにデフォルトでインストールされているPython2.6の方にライブラリが入ってしまったらしい。


テキトーにインストールしていたためパスがカオスなことになっていたのでPython2.7をインストールし直すことにした。


以下が手順


まず、vagrantに接続


/usr/local/bin
Python公式HPからダウンロードする場合、このディレクトリにインストールされるため、ここにパスを通す必要がある

visudo
このコマンドでパスを編集するファイルを開く

Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
/usr/local/bin:を追加



作業中に
permission denied
のようなメッセージが出たら sudo を付けて実行する



cd /usr/local/src
wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
圧縮データをダウンロード


tar xvzf Python-2.7.6.tgz
解凍


cd Python-2.7.6
解凍したディレクトリに移動


./configure --enable-shared --prefix=/usr/local --with-threads
いろいろ設定して

make
ビルドして

make install
インストール


vim /etc/ld.so.conf.d/python2.7lib.conf
Pythonライブラリのパスを記述する新規ファイルを作成


/usr/local/lib/
上記の一文を追加して保存


ldconfig
設定を読み込み直す



次はeasy_installのインストール


その前に
which python
コマンドを実行してパスが
/usr/local/bin/python
であることを確認(/usr/bin/pythonだと2.6の方にインストールされてしまう)


wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz
distribute をダウンロード


tar zxvf distribute-0.6.49.tgz 
distribute を解凍


cd distribute-0.6.49
解凍先のディレクトリに移動

python setup.py install
distribute をインストール


easy_install pip
pipをインストール



無事、pipでライブラリを追加できるようになった。