Board logo

标题: [原创代码] [Perl]BMP图片转TXT,暂时只支持黑白,0和1 [打印本页]

作者: 523066680    时间: 2015-11-5 10:59     标题: [Perl]BMP图片转TXT,暂时只支持黑白,0和1

本帖最后由 523066680 于 2015-11-5 11:08 编辑
  1. =info
  2.     Code: 523066680
  3.     Date: 2015-11
  4. =cut
  5. use utf8;
  6. use IO::Handle;
  7. STDOUT->autoflush(1);
  8. binmode(STDOUT, ":encoding(gbk)");
  9. my $file = "1.bmp";
  10. our $READ;
  11. open $READ, "<:raw", $file or die "$!";
  12. GET_INFO:
  13. {
  14.     our $v;
  15.     read($READ, $v, 14, 0);
  16.     our ($type, $bfSize, $res1, $res2, $offset) = (unpack 'SLSSL', $v);
  17.     read($READ, $v, 4+4+4+2+2, 0);
  18.     our ($headSize, $width, $height, $planes, $bitCount) = (unpack 'L3S2', $v);
  19.     our $Compoments_per_pixel = $bitCount / 8;
  20.     #RGBA, 4bytes, 32bit
  21.     #RGB, 3bytes, 24bit
  22.     #Windows的BMP规定一行所占的字节数须是 4字节的倍数,不足的以0填充
  23.     our $rowLen = ($bfSize - $offset) / $height;
  24.     our $rowCut = ($width * $Compoments_per_pixel) % 4; #RGBA的情况下自然为0
  25.     printf "文件字节数:%04x -> %d\n", $bfSize, $bfSize;
  26.     printf "位图偏移量:%04x -> %d\n", $offset, $offset;
  27.     printf "   宽 × 高:%d×%d\n", $width, $height;
  28.     printf "  位图色深:%d 位\n", $bitCount;
  29. }
  30. TO_TEXT:
  31. {
  32.     #跳过文件头
  33.     seek($READ, $offset, 0);
  34.     my ($R, $G, $B);
  35.     my $col = 0;
  36.     my @all;
  37.     my $tstr="";
  38.     while ( read( $READ, $v, $Compoments_per_pixel, 0) )
  39.     {
  40.         $col++;
  41.         ($B, $G, $R) = unpack("C$Compoments_per_pixel", $v);   #C4 or C3
  42.         $tstr .= ($R || $G || $B) > 0 ? 0 : 1; #黑白取反, 白色为0,其他色为1
  43.         if ($col == $width)
  44.         {
  45.             unshift @all, $tstr;
  46.             seek($READ, $rowCut, 1);   #从当前去掉多余的填充字节
  47.             $col = 0;
  48.             $tstr="";
  49.         }
  50.     }
  51.     close $READ;
  52.     print join("\n", @all);
  53. }
复制代码


文件字节数:1426 -> 5158
位图偏移量:0036 -> 54
   宽 × 高:58×29
  位图色深:24 位
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
0000000011110000000000000000000000000000000000000000000000
0000000111111000000000000000000000000000000000000000000000
0000000111111100000000000000000000000000000000000000000000
0000000110001110000000000000000000000000000000000000000000
0000001110001110000000000000000000000100000000000000000000
0000001110001110000000000000000000001110000000000000000000
0000011100001110000000000000000000001110000000000000000000
0000011100001110000000000000000000001110000000000000000000
0000011000011110000111110000000011111111111111110000000000
0000111011111110001111111000000111111111111111111000000000
0000110111111100011111111100000111111111111111111000000000
0001110111111110111000011100000000011100000000000000000000
0001110000011111111000011100000000011100000000000000000000
0001100000000111110000011100000000011100000000000000000000
0011100000000011110000011100000000011100000000000000000000
0011100000000011110000111100000000011111000000000000000000
0111000000000011110000111100000000001111100000000000000000
0011000000000011111111111111111000001111100000000000000000
0010000000000011111111100111111000000000000000000000000000
0111111111111111111110000011110000000000000000000000000000
0111111111111110000000000000000000000000000000000000000000
0011111111111100000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000

作者: 523066680    时间: 2018-11-27 20:02

本帖最后由 523066680 于 2018-11-27 20:07 编辑

轮廓贴合(未完善)
  1. 514 x 268
  2. 7 14
  3.                                __                       ?^.              
  4.                                ,                       _ 2 _,,           
  5.                            ( "+' "=~._            ,&=~,   __,4           
  6.                              `)  \"``"0__.""___""%_   ~ ,.",            
  7.                             { _"$ (   ," ,*`    "+,",_ 2 *__            
  8.                              "'  %+ _" _"          "{"+=&,_              
  9.                                    ,  ,                7"*+."%,         
  10.                                   ,  2    _.=^""`7""*=,_     "%_%,      
  11.                                  _  2  ,*" __.+;+=+.    `"<_    %,".     
  12.                                 _' , ='_$"` )  |   _.%      ".    ",".   
  13.                                 '  0'_6+.   0 *0, _", ",  ""  ",    % :  
  14.                                ?    2 7{^%.";  ".`  ..+.: :    ,(    $ (
  15.                               $    ?_*+*    _ _+ _ ;=~.' :* `"" ";    % .
  16.                              ?    ?  9*"2 ?% "%.' [ :     %7{     (     $
  17. ",_                       _"   _'      '_  ``    *='       %_+,       |2
  18.    "%&_                  _?   _+        ``                    "%_7"+=&.:2
  19.       "$3+._          _="   _<                                   `"=~~="
  20.          `"=._""^"""`   _,="                                             
  21.                7""^*^""`
复制代码
  1. 380 x 198
  2. 7 18
  3.                        ":                ;,           
  4.                     %,"` "1<_  _,.._,4""{  =='        
  5.                      [_".%  .',"`  `*.%__'3_)         
  6.                           , ,`         "^+~2=,_      
  7.                          ? ? _."` ____ `"=.   ".".   
  8.                         ? ?+_>" 2 {   +?,  ,_%.  '.:  
  9.                        '   ''.%.0  %" 6.~%  ( _&   %'
  10.                      _   , %.+:,.%(,".(   *0.   3   (4
  11. "%_               _"  ,'    *.              ="=.__ {3
  12.      "0+~___  __."  _*                           "^*"
  13.           `"^+++""`                                   
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2