日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
文字サイズ変更:
トップページ > Perlについて
●Perlについて●
2022-11-15 21:39:12Image::Magickを使うには
Image::Magickについて書きたいと思います。
ブラウザからアップロードされた画像を、Perl モジュール Image::Magick を使って CGI プログラム内で加工する方法の紹介です。
Image::Magickとは、ImageMagickという画像操作を行うものをPerlで扱う為の外部モジュールです。
具体的には、useして使います。
use Image::Magick;
* 画像のアップロードフォーム *
画像をアップロードする際に使用するフォームを紹介します。
ENCTYPE を「multipart/form-data」にする点を忘れないでください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ファイルアップロード</title>
</head>
<body>
<form method="post" action="image_resize.cgi" ENCTYPE="multipart/form-data">
画像ファイル選択: <input type="file" name="img">
<input type="submit" value="アップロード">
</form>
</body>
</html>
画像変換をするCGI
画像変換をするプログラムは、CGI モジュール と Image::Magick モジュールを使い加工を行います。
Image::Magickは自サーバーの場合は、インストールする必要があります。
レンタルサーバーの場合は、ほぼインストールしてあると思います。
「use Image::Magick」で、エラーが出ないようなら、インストールしてあると思います。
[Image::Magic の使い方]
・設定パラメータは仕上がりを見ながら試行錯誤して設定する必要があります。
・Image::Magick のエラーは、CGI 内で起こると Internal Server Error を引き起こしてしまいますので、eval でトラップしながら処理を進めます。
その他、CGI でファイルを受け取るときの一般的な留意点は以下の通りです。
・ファイルサイズをチェックする(任意)
・ファイル拡張子で画像かどうかを事前チェック
・保存ディレクトリが重複しないように留意
#!/usr/bin/perlーー
use strict;
use Image::Magick;
use CGI;
binmode(STDOUT, ':utf8');
my $cgi = new CGI;
my %in = &parse_form($cgi);
# アップロードファイル取得
my $upfile = $in{'img'};
if($upfile ne '' || $upfile ne undef ){
# ファイル名と拡張子を取得
($fname, $ext) = $upfile =~ /([^:/]+).(w+)$/ ? ($1, $2) : &error("アップファイル名が不正です", 'kanri');
# 受付可能な拡張子(正規表現)
@ext_ok = ("gif", "jpeg", "jpg", "png");
unless (grep {$ext =~ /^$_$/i} @ext_ok){ #どれにも合致しなければ
&error("許可されていない拡張子($ext)です。", 'kanri');
}
# CGIオブジェクトを作成
$image = Image::Magick->new;
eval{$ret1 = $image->Read(file=>$upfile)};
# 画像の幅、高さを取得する
($width, $height) = $image->Get('width', 'height');
$width = $width - 100;
$height = $height - 100;
# サイズを変更
$image->Scale(width=>$width, height=>$height);
my $fname_min = "$img_dir$fname.$ext";
# 画像の書き込み
eval{$ret2 = $image->Write($fname_min)};
}
sub parse_form {
my $cgi = shift;
my %in;
foreach ( $cgi->param ) {
my $val = $cgi->param($_);
# 無害化
if ($_ ne 'img') {
$val =~ s/[
]//g;
$val =~ s/[
]/<br>/g;
}
$in{$_} = $val;
}
return %in;
}
上のCGIモジュールは、縦幅、横幅を-100したサイズに縮小して、サーバーにアップロードするモジュールです。
Image::Magick自体は、セピア調にしたり、文字を画像の中に入れたりと、様々できます。
出典「ミヤビッチの穴 Image::Magick の使い方」
Print
Twitter(test)
short URL
いいね:23 back to the TOP |