一、基本知识
1、DWG的略缩图图像信息块在DWG文件的第13-15位,设为add0(具体详见DWG文件的预览图像数据结构);
2、略缩图数据开始地址在add+31~add+34中,设为add1;
3、略缩图数据的长度在add+35~add+38字节中,设为len;
4、略缩图数据区由add1开始,直至add1+len。
略缩图数据区相当于BMP(8bit)的位图信息区块、调色板区块和数据区块,只差文件头区块(具体详见BMP(8bit)的数据结构);
5、AutoCAD的DWG的略缩图长180,宽104,故文件总长度=54+1024+25200=0X4D56。故8bitBMP文件头为定值:42 4D 56 4D 00 00 00 00 00 00 36 04 00 00
二、程序
//读取地址
function address($name,$offset)
{
$ch=file_get_contents($name,'',null,$offset,4);
$str=array();
for($i=0;$i<4;$i++)
{
$str[]= sprintf('%02X',ord($ch[$i]));
}
$str=array_reverse($str);
$str=implode('',$str);
return hexdec($str);
}
$name='test.dwg';
$add0=address($name,13);//略缩图图像信息块的地址
$add1=address($name,$add0+31);//略缩图数据开始地址
$len=address($name,$add0+35);//略缩图数据的长度
$data=file_get_contents($name,'',null,$add1,$len);//获取BMP数据
$header='BM'.pack('V3',14+$len,0,1078);//42 4D 56 4D 00 00 00 00 00 00 36 04 00 00
file_put_contents('test.bmp',$header.$data);