php生成DWG的略缩图

一、基本知识

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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值