นั่งเขียน Perl Script ที่เรียกใช้ ImageMagick อีกที เพื่อจะย่อรูป/ทำกรอบ/แต่งรูปเล็กน้อย (Auto contrast/Unsharp Mask)
จริงๆ มันมี Module PerlMagick ให้ใช้ด้วย แต่ขี้เกียจดู
ตอนแรกว่าจะเขียนด้วย Batch file แต่ข้อจำกัดเยอะมาก
หา Option ใหม่ได้คือ
- -equalize แต่ใช้แล้วสีเพี้ยน ยังหาวิธีแก้ไม่ได้
- -gamma ใช้แล้วสว่างไปหน่อย
- -encoding เซ็ตเป็น UTF-8 หรือ SJIS อะไรงี้ได้ แต่ภาษาไทยต้องใช้ UTF-8 เท่านั้น
เรื่องของเรื่องคืน ขี้เกียจมานั่งปรับ Photoshop ทีละอัน
แล้ว Action ใน Photoshop มันก็ไม่ยืดหยุ่นด้วย
Link อ้างอิงที่น่าสนใจ
- Graphics from the command line
- More graphics from the command line
- How I Prepare Pictures for the Web With Photoshop
ตัวโปรแกรมตั้งชื่อว่า batchframe.pl
คุณสมบัติคือ
– Normalize histogram
– ถ้าใช้ Option -eq ก็จัดการใช้ -equalize เวลาเรียก convert ของ ImageMagick ด้วย
– ย่อรูป
– Crop รูป
– Unsharp Mask
– ทำกรอบสีขาว
– มุมล่างขวาใส่ Copyright text
– ถ้าใช้ Option -text “any text” ที่มุมล่างซ้ายก็ใส่ custom text ด้วย
* Detect ได้ด้วยว่าเป็นรูปแนวตั้งหรือแนวนอน
** Setting อื่นๆ อย่างขนาดภาพที่ต้องการ หรือ Font นี่ แก้เองใน Script
#!/usr/bin/perl
#!/usr/bin/perl
# fix for Windows only
use File::Glob qw(:glob);
use POSIX qw(ceil floor);
$usage = "usage: batchframe.pl [-eq] [-lev black,white] [-gam gamma] [-sat saturation] [-nonorm] [-text \"Text\"] filename\n";
$equalize = 0;
$fullmajorsize = 1024;
$fullminorsize = floor($fullmajorsize * 3 / 4);
$borderratio = 2.5;
$inborder = 2;
$border = floor($fullmajorsize * 2.5 / 100);
$size = $fullmajorsize - ($border * 2);
$minorsize = $fullminorsize - ($border * 2);
$fontsize = floor($border * 0.75);
$border -= $inborder;
$type = "Bookman-Old-Style";
$outputdir = "edited";
$unsharp = $fullmajorsize * 0.500 / 100;
$norm = "-normalize";
$equalize = "";
$modulate = "";
$gamma = "";
$level = "";
while($#ARGV > 0) {
if($ARGV[0] eq "-eq") {
$equalize = "-equalize";
shift @ARGV;
} elsif($ARGV[0] eq "-nonorm") {
shift @ARGV;
$norm = "";
} elsif($ARGV[0] eq "-text") {
shift @ARGV;
$text = shift @ARGV;
} elsif($ARGV[0] eq "-sat") {
shift @ARGV;
$sat = shift @ARGV;
$modulate = "-modulate 100,$sat";
} elsif($ARGV[0] eq "-lev") {
shift @ARGV;
$level = shift @ARGV;
$level = "-level $level";
} elsif($ARGV[0] eq "-gam") {
shift @ARGV;
$gam = shift @ARGV;
# pantip post = 1.2
$gamma = "-gamma $gam";
} elsif($ARGV[0] eq "-h") {
print $usage;
exit(0);
}
}
if($#ARGV == 0 && $ARGV[0] =~ /^-/) {
print $usage;
exit(0);
}
if($#ARGV < 0) {
print $usage;
exit(0);
}
print "target size = ${fullmajorsize}x${fullminorsize}\n";
print "border = $border\n";
print "size (w/o border) = ${size}x${minorsize}\n";
print "font = $type $fontsize\n";
print "unsharp = $unsharp\n";
print "text = $text\n" if($text ne "");
print "saturation = $sat%\n" if($sat ne "");
print "do not apply -normalize\n" if($norm eq "");
print "apply -equalize\n" if($equalize ne "");
print "$level\n" if($level ne "");
print "gamma = $gam\n" if($gamma ne "");
if(! -e $outputdir) {
mkdir $outputdir;
}
# Normal way to do
# foreach $_ (@ARGV) {
# fix for Windows only
foreach $_ (bsd_glob($ARGV[$#ARGV], GLOB_NOCASE)) {
$in = $_;
$out = $outputdir."\\".$in;
$width = `identify -format "%w" $in`;
chomp($width);
$height = `identify -format "%h" $in`;
chomp($height);
#print "${width}x${height} ";
if($width > $height) {
#print "lanscape\n";
$cropstring = " -crop ${size}x${minorsize}-0-0 ";
} else {
#print "portrait\n";
$cropstring = " -crop ${minorsize}x${size}-0-0 ";
}
$convertcmd = "convert $in $norm $gamma $modulate $level $equalize -resize ${size}x$size $cropstring -unsharp $unsharp -bordercolor black -border $inborder -bordercolor white -border $border -gravity southeast -font $type -pointsize $fontsize -fill black -annotate 0x0+$border+2 \"© Oakyman - Issara Thienlikit\" -gravity southwest -annotate 0x0+$border+2 \"$text\" $out
";
print "$in --> $out\n";
`$convertcmd`;
}
เอาหละ เตรียม Upload รูปที่แต่งแล้วขึ้น Fotki
62 thoughts on “ImageMagick Revisited”