图像处理基本方法-perl语言生成纯色BMP文件
现在由perl语言完成该功能。主要是在ubuntu下使用perl语言环境完成。
1、perl语言简介
Perl一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。 [1]
Perl易于使用、高效、完整,而不是美观(小巧,优雅,简约)。同时支持过程和面向对象编程,对文本处理具有强大的内置支持,并且拥有第三方模块集合之一。 [1] Perl借取了C、sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
2、实现代码
#!/usr/bin/perl
$width = 1920;
$height = 1080;
$bit = 3;
$Red = 255;
$Green = 255;
$Blue = 0;
$bfType = 'BM';
$bfSize = ($width*$height*$bit + 54);
$bfReserved1 = 0;
$bfReserved2 = 0;
$bfOffBits = 54;
$biSize = 40;
$biWidth = $width;
$biHeight = $height;
$biPlanes = 1;
$biBitCount = $bit * 8;
$biCompression = 0;
$biSizeImage = 0;
$biXPelsPerMeter = 3780;
$biYPelsPerMeter = 3780;
$biClrUsed = 0;
$biClrImportant = 0;
$bmpDataSize = $bfSize - 54;
sub intToArray{
$tmp1 = 0;
$tmp2 = 0;
$tmp3 = 0;
$tmp4 = 0;
#print("$_[0], $_[1]\n");
if ($_[1] == 1){
$tmp1 = chr($_[0]);
return ($tmp1);
}
if($_[1] == 2){
$tmp1 = chr($_[0] & 0xFF);
$tmp2 = chr( ($_[0] >> 8) & 0xFF );
return ($tmp1,$tmp2);
}
if($_[1] == 4){
$tmp1 = chr($_[0] & 0xFF);
$tmp2 = chr( ($_[0] >> 8) & 0xFF );
$tmp3 = chr( ($_[0] >> 16) & 0xFF);
$tmp4 = chr( ($_[0] >> 24) & 0xFF);
#print("$tmp1, $tmp2, $tmp3, $tmp4 \n");
@hits = ($tmp1, $tmp2, $tmp3, $tmp4);
return @hits;
}
}
print "write file \n";
open(file1, ">test-perl.bmp") or die $!;
#print file1 "BM";#ÏòÎļþдÈëÄÚÈÝ
$bfSizeHex = sprintf("%x", $bfSize);
#print "$bfSizeHex \n";
syswrite file1,$bfType,2;
@arraySize = intToArray($bfSize, 4);
#print "\$arraySize[0] = $arraySize[0] \n";
#print "\$arraySize[1] = $arraySize[1] \n";
#print "\$arraySize[2] = $arraySize[2] \n";
#print "\$arraySize[3] = $arraySize[3] \n";
syswrite file1,$arraySize[0],1;
syswrite file1,$arraySize[1],1;
syswrite file1,$arraySize[2],1;
syswrite file1,$arraySize[3],1;
#syswrite file1,@arraySize,1; # error
@arrayTmp = intToArray($bfReserved1, 2);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
@arrayTmp = intToArray($bfReserved2, 2);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
@arrayTmp = intToArray($bfOffBits, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biSize, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biWidth, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biHeight, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biPlanes, 2);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
@arrayTmp = intToArray($biBitCount, 2);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
@arrayTmp = intToArray($biCompression, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biSizeImage, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biXPelsPerMeter, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biYPelsPerMeter, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biClrUsed, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
@arrayTmp = intToArray($biClrImportant, 4);
syswrite file1,$arrayTmp[0],1;
syswrite file1,$arrayTmp[1],1;
syswrite file1,$arrayTmp[2],1;
syswrite file1,$arrayTmp[3],1;
print "write bmp file before \n";
# $width
for( $a = 0; $a < $height; $a = $a + 1 ){
for( $b = 0; $b < $width; $b = $b + 1){
syswrite file1,chr($Blue),1;
syswrite file1,chr($Green),1;
syswrite file1,chr($Red),1;
}
}
print "write bmp file out \n";
close(file1);
3、执行程序
命令如下:
perl testbmp.pl
执行完成之后,可以生成bmp文件。
4、参考资料
https://bbs.csdn.net/topics/30096685