くれすのPerl日記 このページをアンテナに追加 RSSフィード

この日記の方針。

  1. この日記では、超初心者向けの内容は取り扱っておりません。モジュールの利用など、実践的な内容が中心となります。
  2. ここに貼られるソースは、基本的にそのままでは動かないものばかりです。各自の責任でご利用ください。
  3. 内容が間違っていることがあります。その際はご指摘いただけるとありがたいです。「検証してみたら違う結果が出た」などの報告も大歓迎です。
  4. perl -e die

2009-03-24 (Tue)Image::Magick

[][] Image::Magickで複数のサムネイルを作る 20:18  Image::Magickで複数のサムネイルを作る - くれすのPerl日記 を含むブックマーク はてなブックマーク -  Image::Magickで複数のサムネイルを作る - くれすのPerl日記  Image::Magickで複数のサムネイルを作る - くれすのPerl日記 のブックマークコメント

これだけで2時間くらいはまった。かなり特殊なパターン。

$imを外に出してやったほうが効率的だったかも。クラスで包んで内部の値として$imを持たせたりしてみたけど、エラーも出さずに異常終了してしまう始末。どうなってんだか。

動いたからこれでいいや。

# スクリプトの一部。
use CGI;
use Image::Magick;

my $cgi = CGI->new;
my $fin = $cgi->upload('upload');

my $t = time;

&thumbnail($fin, $t . '_1.jpg', '640x480');
&thumbnail($fin, $t . '_2.jpg', '128x96');
&thumbnail($fin, $t . '_3.jpg', '160x120');

#
# 省略
#

sub thumbnail {
    my($fin, $filename, $geometry) = @_;
    my $im = Image::Magick->new;

    # print 'Debug(1): ', tell($fin), "\n";
    $im->Read(file => \*$fin);
    seek($fin, 0, 0);  ### <= これがないと二回目以降がうまくいかない
    # print 'Debug(2): ', tell($fin), "\n";

    my $imout = $im->Transform(geometry => $geometry);

    #
    # 以下略
    #
}

ファイルのカーソル位置を戻してやらないとダメだったというオチ。

というか、毎回読むならScale()しても一緒のような気がしてきた。

トラックバック - http://perl.g.hatena.ne.jp/Cress/20090324

2009-03-19 (Thu)携帯サイト用

くれすのPerl日記

[][] QRコードは簡単に作れる 16:44  QRコードは簡単に作れる - くれすのPerl日記 を含むブックマーク はてなブックマーク -  QRコードは簡単に作れる - くれすのPerl日記  QRコードは簡単に作れる - くれすのPerl日記 のブックマークコメント

どのくらい簡単かというと、10分で作れるくらい。

#!/usr/bin/perl

use strict;
use CGI;
use GD::Barcode::QRcode;
use Encode;

my $cgi = CGI->new;

binmode(STDOUT);
my $input = decode('utf8', $cgi->param('q'));
$input =~ s/[\x0A\x0D]+/ /g;

print 'Content-Type: image/png', "\n";
print "\n";
print GD::Barcode::QRcode->new(encode('shiftjis', $input))->plot->png;

GD::Barcode::QRcodeさえインストールしてしまえば、9割作業完了したようなもの。

http://www.example.com/QRcode.cgi?q=http://perl.g.hatena.ne.jp/Cress/ という具合に呼び出す。

Shift_JISにしている理由

携帯電話のバーコードリーダーで読み取ればわかる。

改行が化けるので、こちらも半角スペースに変換。何に変換するのがいいんだろ。タブ文字?

decodeの第一引数のutf8は、設置するWEBページ等の環境に合わせて書き換えること。

どこが便利なのか

「動的にQRcodeを生成できる」のが最大の利点。「ぐるなび」のような店舗検索サイトでは非常に役に立つと思う。URLが長くても、QRcodeを読み取れば一瞬で入力できる。

携帯サイトには、PC用のサイトとは別の良さがある。携帯電話の手軽さを生かすなら、QRcodeの取り扱いは不可欠。

トラックバック - http://perl.g.hatena.ne.jp/Cress/20090319

2009-03-17 (Tue)基礎の基礎かもしれない

[] ||とorの違い 18:39  ||とorの違い - くれすのPerl日記 を含むブックマーク はてなブックマーク -  ||とorの違い - くれすのPerl日記  ||とorの違い - くれすのPerl日記 のブックマークコメント

はまったのでメモ。

my $arg = '200x150';

my($x, $y) = ($arg =~ /^(\d+)x(\d+)$/) || next;
# $x => 1, $y => undef

my($x, $y) = ($arg =~ /^(\d+)x(\d+)$/) or next;
# $x => 200, $y => 150

演算の順番が違うとかだっけか。おそらく、&&とandにも挙動の違いはありそう。

トラックバック - http://perl.g.hatena.ne.jp/Cress/20090317