ImageMagick Revisited

นั่งเขียน Perl Script ที่เรียกใช้ ImageMagick อีกที เพื่อจะย่อรูป/ทำกรอบ/แต่งรูปเล็กน้อย (Auto contrast/Unsharp Mask)
จริงๆ มันมี Module PerlMagick ให้ใช้ด้วย แต่ขี้เกียจดู
ตอนแรกว่าจะเขียนด้วย Batch file แต่ข้อจำกัดเยอะมาก

หา Option ใหม่ได้คือ

  • -equalize แต่ใช้แล้วสีเพี้ยน ยังหาวิธีแก้ไม่ได้
  • -gamma ใช้แล้วสว่างไปหน่อย
  • -encoding เซ็ตเป็น UTF-8 หรือ SJIS อะไรงี้ได้ แต่ภาษาไทยต้องใช้ UTF-8 เท่านั้น

เรื่องของเรื่องคืน ขี้เกียจมานั่งปรับ Photoshop ทีละอัน
แล้ว Action ใน Photoshop มันก็ไม่ยืดหยุ่นด้วย

Link อ้างอิงที่น่าสนใจ

ตัวโปรแกรมตั้งชื่อว่า 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

ExpensePlus DB File converter

วันนี้นั่งอู้งานมาเขียนโปรแกรมใช้เอง
หลังจากวันก่อนนั่งแกะ Format ของ pdb file ของโปรแกรม ExpensePlus ใน Palm (จริงๆ ใช้ Clie)
เพราะแม้ว่าเวลา Sync จะได้ Text file ออกมาก็ตาม (ตัว Conduit ของ ExpensePlus แปลงให้)
แต่ว่าไฟล์มันเละมาก สันนิษฐานว่าเกิดจากที่ใช้ภาษาไทย

เมื่อวานพอดีเล่น Clie เล่นๆ หลังจากไม่ค่อยได้ทำอะไรกะมันมานาน
ใช้โปรแกรม Filez เปิดดูไฟล์ pdb ของ ExpensePlus เล่น
ก็เลยลองแกะดูเลย ว่าจะดึงข้อมูลออกมายังไงดี

เลยได้โปรแกรม ExpensePlus Converter มา (เขียนเอง)
รายละเอียดดังนี้

Description:
Convert ExpensePlus DB file (*.pdb) to Comma Separated Values file
(*.csv)Usage:
expp2csv [ExpensePlus DB File (*.pdb)] > [csv file (*.csv)] Remarks:
CR/LF in any text will be converted into "|" (pipe) and double-quote
into single-quote.
Download ได้ที่นี่
expp2csv.zip (133 KB)ป.ล. หา Format ของ สารพัดไฟล์ได้ที่ Wotsit’s Format
ป.ล. 2 อุตส่าห์สั่งซื้อ Batt. ก้อนใหม่จาก eBay
อาการแบตหมดเร็ว/ชาร์จไฟไม่ค่อยเข้าก็ยังไม่หายอยู่ดี เซ็ง