PerlMagickで複数の画像を1枚にまとめる
PerlMagickで複数の画像を1枚にまとめた。
ImageMagickのmontageコマンドでもできて、それは前に書いた。
ImageMagickで撮った月食を1枚にまとめる CodingFirst
PerlMagick は、cpanでなく apt-get で入手した。
$ sudo apt-get install perlmagick
で、作ったコードは下記。
引数に 4つの画像ファイルを指定すると、2x2に結合した out.jpg が出力される。
ちょっといい加減なコードなので、ファイル数に応じて 2x2 を変更したり、
フィルタかけたり、文字描いたり..改造して使うといいでしょう。
#!/usr/local/bin/perl
use strict;
use warnings;
use Image::Magick;
print <<USAGE if $#ARGV==-1;
Usage: montage.pl file..`
USAGE
my $img = new Image::Magick;
$img->Read(@ARGV);
my $mon=$img->Montage(geometry=>'160',tile=>'2x2');
$mon->Write(filename=>'out.jpg');
gistにも貼った。
https://gist.github.com/2621784
実際に作った出力例。
$ perl montage.pl a.jpg b.jpg c.jpg d.jpg
最近、コージーコーナーの濃厚レアチーズケーキにはまってる。うまい。。
- 2012-05-06: PerlMagickで複数の画像を1枚にまとめる
- 2011-05-01: Perl,PythonでCGI環境変数取得
- 2011-04-18: SubversionのコミットメールをPerlで書いた
- 2011-03-26: Perlで簡易メモCGIを書いた
- 2011-03-22: perlで簡単なCGIのアップローダを作った
- 2011-03-15: Perlでtwitterのつぶやきを検索表示する(2)
- 2011-03-14: Perlでtwitterのつぶやきを検索表示する
- 2010-12-29: perlで重複してない画像を探す
- 2010-12-23: perlでJPEGファイルをExifの時間にリネームする
- 2010-09-13: perlでソート付きのdu
- 2008-04-27: W-ZERO3メールの添付ファイルを抜き出す
電池式ひげ剃り+エネループがすごい便利かも
ひげ剃り(シェーバ)を新調したんだけど、
電池式ひげ剃り+エネループにしたらすごい快適になった。
![]() | Panasonic スーパーレザー シルバー調 ES3832P-S (2009/02/10) パナソニック 商品詳細を見る |
うざったいACアダプタとコードが無くなった。
本体につけとくとブラブラするし、外して片付けるのもめんどくさいし、
とにかく邪魔だったんで、すごく楽になったし、嬉しい。
いざ充電が切れてしまった場合、電池式の方が楽。
最近の充電式は電源コードつないでも、ある程度充電しないと使えない。
しかし、電池は交換したらおしまい。
しかも充電池にすれば充電池と同じで繰り返し使える。
交換する充電池をたくさん持ってた。
電池って、時計、ゲーム機、リモコン、外出時の携帯充電へといまだにあちこちで使ってる。
それら全部に充電池を使ってるので、なんだかんだ
多めに予備の電池を持ってるので、今回新たに買う必要が無かった。
旅先で電池が切れたら...
カバンの中でスイッチ入っちゃって、旅先で使えなかった事が何度かある。
充電式は忘れたら使えないけど、電池式なら乾電池を買えばいい。
友達から借りてもいいし。
性能も問題ない。
そもそもヒゲが濃い方じゃないから悩んだことないけど、
普通にしっかり剃れるし、掃除も特に変わらない。
そして、安い。
結構、安いのが多いので気軽に試せるのと、
外出用とか、職場においてるともよく聞く。
と、電池式を考えてみると、
あれもこれもと充電池をたくさん使ってる事にも気づいた。
地味に革新的に便利になった事なんだなと思う。
![]() | SANYO NEW eneloop 単3形8本 HR-3UTGB-8 (2011/11/14) 三洋電機 商品詳細を見る |
いつも買うのは8本単位。
震災時、かなり在庫無しだったので、ちょっと欲しくなったら、
8本単位にしてる。
![]() | SANYO 「eneloop pro」単3形4本付き急速充電器セット N-TGR01WS (2011/09/21) 三洋電機 商品詳細を見る |
proって高容量タイプもあるのか!
![]() | (HR-3UTGB8D)+(YU511370) | 【ディズニーセット】 サンヨー eneloop エネループ 充電池 単3形8本 ディズニーキャラクターモデル+ミッキーシルエットイヤホン ホワイト SANYO () 不明 商品詳細を見る |
限定のミッキーのがある!
![]() | SANYO NEW eneloop 簡易バッテリーチェッカーエネルーピー付き 充電式ニッケル水素電池 (単3形2個) HR-3UTGA-2LP (2009/11/14) 三洋電機 商品詳細を見る |
便利だし、カワイイとウケるかも...と手にとって、
家族に馬鹿にされ、
ごく稀に必要だったときに、合って良かったじゃん!...的なチェッカ
- 2012-04-08: 電池式ひげ剃り+エネループがすごい便利かも
- 2012-01-28: 満足! Ultimate Ears Triple.fi 10 PROを買った。
- 2012-01-07: わが家での年賀ハガキの収納ルール
- 2011-09-24: カップガンプラを作った
- 2011-08-03: イオニティってドライヤーは静音でイイ!
- 2011-05-17: ポーターのピース(ショルダーバッグ)を買った
- 2011-01-02: ポーターのピース(カバン)が欲しい
- 2011-01-01: MR-C18BK(SDカードリーダ)を買った
- 2010-12-27: セラミックスライサー (厚み調節機能・プロテクター付)を買った。
- 2010-12-26: パトリオ7(懐中電灯)を買った
- 2010-12-25: 強力なマグネットフックを買った。
- 2010-12-24: ハリナックスを買った
- 2010-05-03: ファミコンっぽいゲームパッドを買った
- 2010-05-02: ブルーレイレコーダを買った
C言語でmd5
C言語でmd5を計算する。
MD5は、ファイルの指紋(フィンガープリント)としてよく使われてる。
用語的にはMD5チェックサムの方が一般的かも。
あやまって一致する事はまず無いので、
ダウンロードしたデータの正当性とか、Jenkinsのようにビルドの追跡とか、
要するに、テストの期待値を圧縮する手段としてよく利用される。
MD5は linux だと簡単に下のように計算できる。
$ openssl dgst -md5 fox.jpg MD5(fox.jpg)= c7880ecd95d8dcf0efe82f465aa41e3f $ md5sum fox.jpg c7880ecd95d8dcf0efe82f465aa41e3f fox.jpg
C言語でも使いたい事がある。
簡単に使いたいので openssl を利用する。まず、環境入手。
$ sudo apt-get install libssl-dev
MD5を計算する Cコードは以下。
$ tcc "-lssl" -run md5sum-1.c fox.jpg c7880ecd95d8dcf0efe82f465aa41e3f fox.jpg
$ tcc "-lssl" -run md5sum-2.c fox.jpg c7880ecd95d8dcf0efe82f465aa41e3f fox.jpg
2番目の方、後で文字列を追加する(ループする)には、
どうすればいいかよくわからんかった。まぁマジックナンバーが必要だし、
1番目のケースしか使わなけりゃいいか。
参考)
チェックサム - Wikipedia
巡回冗長検査 - Wikipedia(CRC)
MD5 - Wikipedia
Cソースを見ながら学ぶなら、やっぱアルゴリズム辞典。
![]() | C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー) (1991/03) 奥村 晴彦 商品詳細を見る |
- 2012-03-18: C言語でmd5
- 2012-02-19: [C]クイックソートをする
- 2012-02-14: C言語で正規表現 - PCRE編
- 2012-02-12: C言語で正規表現
- 2011-12-25: C言語だって成長する! 標準がC11(C1X)にアップデート
- 2011-12-17: [C]選択ソートをする
- 2011-12-15: [C]バブルソートをする
- 2011-11-20: GCCでC言語の分岐カバレッジを試す。思ったのとちょっと違った。
- 2011-11-08: GCCでC言語のラインカバレッジ。ちょっと怖いぞ。
- 2011-11-07: GCCでC言語のコードカバレッジを計測する
- 2011-11-02: コードカバレッジとは
- 2011-09-20: C言語でコマンドライン引数処理
- 2011-09-09: C言語でFizzBuzz
- 2010-08-16: coutの<<に関する評価順(2)
- 2010-08-15: coutの<<に関する評価順
[C]クイックソートをする
C言語でクイックソート。
標準でqsortがあるけど、筋トレ的に書いてみよう。
その前に、アルゴリズムを復習しよう。
クイックソート - Wikipedia
C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
一言で言うと、配列を中間値で大小に分割して再起するソートか。
実装方法に悩むけど、思いつきで書いてみた。
gist に書いたコードを以下に。
中間値は一番左の要素にして、左のバケツを決めていく方法にした。
これはこれでいいけど、奥村先生本の手法をみたら愕然。こんなコードになる頭が欲しい!
では、
コンペアとスワップを基準に前に書いたソートも含めて性能比較。
$ git clone git://gist.github.com/1476722.git sort-eg
Cloning into sort-eg...
remote: Counting objects: 26, done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 26 (delta 15), reused 5 (delta 3)
Receiving objects: 100% (26/26), done.
Resolving deltas: 100% (15/15), done.
$ cd sort-eg
$ for i in *.c ; do tcc -run $i ; done
bblsort: cmp=4950.0, swp=2472.6, xor=197DFD2F
bblsort2: cmp=4768.0, swp=2472.6, xor=197DFD2F
qsort: cmp= 541.8, swp=??????, xor=197DFD2F
qsort2: cmp= 890.6, swp= 158.9, xor=197DFD2F
qsort3: cmp= 944.1, swp= 155.1, xor=197DFD2F
selsort: cmp=4950.0, swp= 94.8, xor=197DFD2F
安定的では無いとはいうけど、バブルソートや選択ソートに比べりゃ、やっぱり早いな。
cのqsortはかなり早そうだけど、実装がイントロソートとかなのだろう。
クイックソートは、アルゴリズムが単純で早いけど、再起を使うのが難点かな。
C言語だとスタックまで気を使う事も多いし。
もちろん、実装次第の話でもあって、例えば奥村先生本に再起を使わないコードがある。
ご利用は計画的にってとこか。
いい勉強になった。
![]() | C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー) (1991/03) 奥村 晴彦 商品詳細を見る |
- 2012-03-18: C言語でmd5
- 2012-02-19: [C]クイックソートをする
- 2012-02-14: C言語で正規表現 - PCRE編
- 2012-02-12: C言語で正規表現
- 2011-12-25: C言語だって成長する! 標準がC11(C1X)にアップデート
- 2011-12-17: [C]選択ソートをする
- 2011-12-15: [C]バブルソートをする
- 2011-11-20: GCCでC言語の分岐カバレッジを試す。思ったのとちょっと違った。
- 2011-11-08: GCCでC言語のラインカバレッジ。ちょっと怖いぞ。
- 2011-11-07: GCCでC言語のコードカバレッジを計測する
- 2011-11-02: コードカバレッジとは
- 2011-09-20: C言語でコマンドライン引数処理
- 2011-09-09: C言語でFizzBuzz
- 2010-08-16: coutの<<に関する評価順(2)
- 2010-08-15: coutの<<に関する評価順
C言語で正規表現 - PCRE編
C言語で正規表現、第2弾。PCREを使ってみた。
PCREは perl5コンパチな正規表現ライブラリ。
前エントリのコメントで教えていただいたんで早速。
libpcre.a はすでに入ってたので、apt-getで libpcre3-dev だけ入れた。
以下、gistに貼ったpcreを使ったサンプルコード。
動作例。svn infoの Revision: の番号を取得するサンプルです。
$LANG=c svn info http://svn.apache.org/repos/asf/subversion/trunk > info.txt $ cat info.txt |./pcre-eg.c 1243564$
あっけないほど簡単で、使いやすい。便利だ。 これなら LL系に弱い人にも使いこなせる気がする。
例えば、svnのリビジョン番号のファイルを作成したいとき、
touch r`LANG=c svn info|grep '^Revision:'|cut -d ' ' -f 2`.logとか、
touch r`LANG=c svn info|perl -ne 'print $1 if(/^Revision: (\d+)/)'`.log
とかワンライナーで書くけど、
grepってなんすか?な人は意外に多いし、
perlは読めないんで!と断られたりもするけど、
みんな大好きc言語だよ!なら受け入れられそう。
touch r`LANG=c svn info|../pcre.c`.log
と、こんな感じかな。
![]() | 詳説 正規表現 第3版 (2008/04/26) Jeffrey E.F. Friedl 商品詳細を見る |
- 2012-03-18: C言語でmd5
- 2012-02-19: [C]クイックソートをする
- 2012-02-14: C言語で正規表現 - PCRE編
- 2012-02-12: C言語で正規表現
- 2011-12-25: C言語だって成長する! 標準がC11(C1X)にアップデート
- 2011-12-17: [C]選択ソートをする
- 2011-12-15: [C]バブルソートをする
- 2011-11-20: GCCでC言語の分岐カバレッジを試す。思ったのとちょっと違った。
- 2011-11-08: GCCでC言語のラインカバレッジ。ちょっと怖いぞ。
- 2011-11-07: GCCでC言語のコードカバレッジを計測する
- 2011-11-02: コードカバレッジとは
- 2011-09-20: C言語でコマンドライン引数処理
- 2011-09-09: C言語でFizzBuzz
- 2010-08-16: coutの<<に関する評価順(2)
- 2010-08-15: coutの<<に関する評価順













FollowMe