カテゴリ: perl

Imagerで画像を加工して、斜めに20℃傾けてみました。

もと画像はこちら

use Imager;

# 写真の読み込み
my $photo = new Imager;
$photo->read(file => $photo_file) or die $photo->errstr;

# 写真を傾ける
$photo = $photo->rotate( degrees => 20 );

# キャンバスとなるオブジェクト
my $canvas = new Imager( xsize => 300, ysize => 350, channels => 4 );

# 写真のリサイズ
$photo = $photo->scale(
    xpixels => 300,
    ypixels => 300,
);

# キャンバスに写真を貼り付け
$canvas->paste(
    src  => $photo,
    left  => 0,
    top  => 0,
);

# PNGで書き出し
$canvas->write(file=> './result.png', type=> 'png') or die;

上記コードを実行するとこうなります。

斜めにはなるんですが、四隅が黒くなってしまいました。
透明にするにはアルファチャンネルを有効にしてあげれば良いはずなので、

channel => 4に設定してあげればいいんですが。

略

# 写真の読み込み
my $photo = new Imager;
$photo->read(file => $photo_file) or die $photo->errstr;

# 写真を傾ける
$photo = $photo->rotate( degrees => 20, back => [0,0,0,255] );
$photo->img_set( channel => 4 );

略

実行結果はこうなります
背景はあえて不透明にしてあります(白にすればよかった・・)

なぜか写真が透明になってしまいました・・・
なぜかと言うと元の写真にアルファチャンネルが設定されていないからで、

アルファチャンネルが0(透明)に設定されてしまうせいでした。

これを回避するためにImagerにはconvertというメソッドがあります。

略

# 写真の読み込み
my $photo = new Imager;
$photo->read(file => $photo_file) or die $photo->errstr;

# 写真を傾ける
$photo = $photo->convert( preset => 'addalpha');
$photo = $photo->rotate( degrees => 20, back => [0,0,0,0]);

略

結果はこのとおり

思いどうりになりました。
Imagerは色々画像を加工するメソッドが用意されていていいですね。

このエントリーをはてなブックマークに追加

HTTP-MobileAgent-Plugin-Locatorを入れようとしたら、Geo::Coordinates::Converter::iAreaが必要だって注意されたので、G::C::C::iAreaを入れようとしたら、今度はCDB_Fileが必要だとのこと。

最新版のCDB_File-0.96をfreeBSDに入れようと思ったらmakeでこける

cc -c    -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -I/usr/local/include -O    -DVERSION=\"0.96\"  -DXS_VERSION=\"0.96\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.8.6/i386-freebsd/CORE"  -DHASMMAP CDB_File.c
CDB_File.xs: In function `XS_CDB_File_FETCH':
CDB_File.xs:480: syntax error before `dlen'
CDB_File.xs:483: `dlen' undeclared (first use in this function)
CDB_File.xs:483: (Each undeclared identifier is reported only once
CDB_File.xs:483: for each function it appears in.)
*** Error code 1
ちなみにfreeBSDのバージョンは4.11。
どうもハマリそうなんで、CDB_File-0.95に切り替えたら、すんなり入った。
CHANGESみたら

0.96    - Fix for compiling under stricter compilers
なんだよw
じゃあ0.95でいいや。

このエントリーをはてなブックマークに追加

最近はまったのでメモ書き。

LeopardからApacheのバージョンが2.2.6になっています。
Tigerと違って、Apache1.3+mod_perlが標準ではないので、mod_perl2を自前で入れる必要があるんですね。
今の職場はPerlがメインのWeb開発なので、mod_perlないとお話にならないのですね。

が、普通にインストールすると、
Intel Macだと、アーキテクチャータイプが違うとかで起動してくれない。
(非インテルは未確認)

そこで、mod_perlを入れる際に、環境変数をいじる必要があります。

$ wget http://search.cpan.org/CPAN/authors/id/G/GO/GOZER/mod_perl-1.30.tar.gzmod_perl-1.30.tar.gz
$ tar zxvf mod_perl-1.30.tar.gz
$ cd mod_perl-1.30
$ export ARCHFLAGS="-arch x86_64"
$ export CFLAGS="-arch x86_64"
$ perl Makefile.PL
$ make
$ make install


デフォルトで入っているモジュールだけだと、make testでモジュールが足りないと怒られると思うので、エラーメッセージ見ながら追加してあげて下さい。

このエントリーをはてなブックマークに追加

以前Sledgeについて書いたんですが、サンプルが無くて動作確認して無かったので、「まるごとPerl vol.1」のサンプルを使用して動かして見ました。

実際に動かしてみる際に以前の設定から変更した所があるので、再度エントリします。

Apacheの設定

まず、mod_perlを有効にします。また、apacheのSetEnvを使いたいので、mod_envも有効にしておきます。

$ sudo vi /etc/httpd/httpd.conf
206行目
#LoadModule env_module         libexec/httpd/mod_env.so
コメントを外す
LoadModule env_module         libexec/httpd/mod_env.so
239行目
#LoadModule perl_module        libexec/httpd/libperl.so
コメントを外す
LoadModule perl_module        libexec/httpd/libperl.so
283行目
#AddModule mod_env.c
コメントを外す
AddModule mod_env.c
283行目
#AddModule mod_perl.c
コメントを外す
AddModule mod_perl.c

Sledgeでは、アプリケーション毎にサブドメインを切るのが王道なので、http://localhost/bbsではなくて、http://bbs.localhost/としたい。Apacheのvirtualhostを使えばいいのだが、localhostにサブドメインを加える場合、/etc/hostsの127.0.0.1とサブドメインを紐づける必要があります。

$ sudo vi /etc/hosts
127.0.0.1    localhost
の後ろにサブドメイン追加
127.0.0.1    localhost bbs.localhost

あとはVirtualHostの設定ですが、アプリの配置を終えた後に設定します。

Sledgeの導入

Sledgeの公式ページからダウンロード出来ますが、プラグインや追加モジュールが沢山あるので、下記SorceForgeのCVSから丸ごととってきた方がいいです。

http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/sledge/

画面の下の方にDownload tarbollというリンクがあるので、ここから落とします。(CVSでチェックアウトしてもいいです)

tarbollを解凍すると、Slege本体と追加モジュール、プラグインが沢山できますが、全部入れなくても良いです。必要に応じて追加しましょう。(その都度書こうかと思います)

まずはSledgeの導入です。以前書いた内容とちょっとだけ変わります。SledgeはCPANモジュールを多用していますので、始めにモジュールを追加しておきます。

$ sudo perl cpan_install.pl

今回のサンプルでは、Class::DBIやTime::Pieceを使っていますので、追加しておきます。他にも環境によって足りないモジュールがあるかも知れません。httpのエラーログに足りないモジュールがあった場合はログがかかれますので、もしあれば同様に追加して下さい。

$ sudo perl -MCPAN -e shell
cpan> install Class::DBI
cpan> install Time::Piece

モジュール導入が終わったら、Sledgeのインストールです。

$ perl Makefile.PL
$ make; make test;
$ sudo make install

make testは念の為です。あんまり気にしてません。勉強中なもので・・(ノ´∀`*)

アプリの配置とApacheの設定

まるごとPerl vol.1のサポートページからモジュールをダウンロードします。
何処に置くかは任意ですが、今回は/Users/Sledgeに配置。

この設定はアプリ作る度さわることになるので、/etc/httpd/users/virtualhost.confに切り出しておきました。

$ sudo vi /etc/httpd/users/virtualhost.conf
NameVirtualHost 127.0.0.1
<virtualhost bbs.localhost>
   ServerName bbs.localhost
   DocumentRoot /Users/Sledge/bbs/htdocs
   SetEnv  PERL5LIB /Users/Sledge/bbs/lib
   PerlSetEnv PERL5LIB /Users/Sledge/bbs/lib
   <location>
     SetHandler perl-script
     PerlHandler Apache::Registry
   </location>
   <directory /users/sledge/bbs/htdocs>
       DirectoryIndex index.cgi index.html
       AddHandler cgi-script .cgi
       Options +ExecCGI
       Order deny,allow
       Allow from all
   </directory>
</virtualhost>

設定はそれぞれの環境次第ではありますが、とりあえずコレで動きました。
もう少し色々試して見たい所ではあります。



mod_alias辺りは、他の設定次第で、違うところ見に行ったりします。

ちなみに、SledgeのサンプルはSorceforgeから落としたtarballの中にも3つ程あるので、参考に動かしてみてはいかがでしょう?

shopcartがオススメです。

このエントリーをはてなブックマークに追加

Perl勉強するのに購入した本達。

・新版Perl言語プログラミングレッスン入門編


新版Perl言語プログラミングレッスン入門編
結城浩
ソフトバンククリエイティブ (2006/10/21)
売り上げランキング: 6757
おすすめ度の平均: 5.0
5 次はRuby言語プログラミングレッスン入門編ですね
5 ウェブプログラミングの基礎を固める良書 奇跡の復刊


結城さんの説明は簡潔かつ、丁寧で分かり易い。基本的な事を抑えるだけでなく、実践的な使い方や、ちょっと踏み込んだコラムなど、嫉妬してしまう程に巧みに書かれています。Ruby本が出るのみ楽しみ。


・プログラミングPerl

プログラミングPerl〈VOLUME1〉
ラリー ウォール ジョン オーワント トム クリスチャンセン Larry Wall Jon Orwant Tom Christiansen 近藤 嘉雪
オライリー・ジャパン (2002/09)
売り上げランキング: 20782
おすすめ度の平均: 4.5
4 値段は高いけど・・・
5 CGIを自在にこなす第一歩の書
5 Perl文法の仕組みを詳細に知りたい人の本


ラリー・ウォールによるPerlのバイブル。通称ラクダ本。
708ページにものぼる名著。このボリュームで5000円なら安い方だと思う。




ラリーならではのジョークも楽しい。


・実用Perlプログラミング

実用Perlプログラミング
サイモン カズンズ Simon Cozens 菅野 良二
オライリージャパン (2006/03)
売り上げランキング: 35285
おすすめ度の平均: 5.0
5 Perlを深く知りたい方にはよい本です。

一歩踏み込んだPerlでの実装テクニックや、言語仕様など、色々なトピックが取り上げられています。
中級者向けの本なのかな?リファレンス、コンテキスト、型グロブ、オブジェクト指向プログラミング辺りのトピックは押さえておいた方が良さそう。


・Effective Perl (ASCII Addison Wesley Programming Series)

Effective Perl (ASCII Addison Wesley Programming Series)
ジョセフ・N. ホール ランドル・L. シュワォーツ Joseph N. Hall Randal L. Schwartz 吉川 邦夫
アスキー (1999/03)
売り上げランキング: 166326
おすすめ度の平均: 5.0
5 C互換でなく、perlらしい書き方をしたい人に
5 perl語を学ぶ
5 perl語を学ぶ

Perlプログラミングをする上でのTips的な事が書いてある。オライリーのHACKシリーズみたいな感じ。内容的は初級から中級辺りの内容を取り扱っている様子。読みやすい。

・Parl HACKS

Perl Hacks ―プロが教えるテクニック & ツール101選
chromatic Damian Conway Curtis "Ovid" Poe 株式会社ロングテール/長尾 高弘
オライリー・ジャパン (2007/01/23)
売り上げランキング: 90551
おすすめ度の平均: 5.0
5 Perl Hacker になるための一冊
5 アイディア本

オライリーのHACKシリーズ。
Parlに関するTips集。HACKシリーズ全般に言えることだが、ちょこっとずつ読めるのが良い。

このエントリーをはてなブックマークに追加

↑このページのトップヘ