写了一个读取CAD文件生成缩略图的类,和大家分享
时间:2009-09-23
来源:互联网
终于能在这版发贴了!
dwgthumb.zip (1.39 KB)
[code]<?php
/**
+------------------------------------------------------------------------------
* 读取CAD dwg文件,生成缩略图
+------------------------------------------------------------------------------
* 作者:杨嵩 netyum
* 邮箱:[email protected]
* QQ :8025628
* MSN :[email protected]
* 时间:2009-9-17 8:38
* 调用方法:
* $dwg = new dwgthumb();
* $dwg->read("./2.dwg") //读取文件
* ->show() //页面显示
* ->save("./2.bmp"); //保存文件
+------------------------------------------------------------------------------
*/
class dwgthumb {
var $fp = null;
var $sentinelpos = 0;
var $thumbtype = 0;
var $bmpData = null; //bmpData数据
var $bmpHead = null;
var $bmpBody = null; //bmpData数据
var $bmpSizeBitmapHeader = 0;
var $bmpWidth = 0;
var $bmpHeight = 0;
var $bmpBitPlanes = 0;
var $bmpBitCount = 8;
var $bmpRelCompression = 0;
var $bmpWidthxHeight = 0;
var $bmpBitXPelsPerMeter = 0;
var $bmpBitYPelsPerMeter = 0;
var $bmpNumberOfPalettesUsed = 0;
var $bmpNumberOfImportantColors = 0;
function dwgthumb($filename="") {
if ($filename!="") $this->readinfo($filename);
}
function read($filename) {
if (!file_exists($filename)) {
echo "文件未找到";die();
}
$this->fp = fopen($filename,"rb");
fseek($this->fp, 13); //移动到13字节
$this->sentinelpos = $this->fread2unpack(); //读4个字节
fseek($this->fp, $this->sentinelpos + 30); //移动
$this->thumbtype = $this->fread2unpack(1); //读1个字节
if ($this->thumbtype<0 && $this->thumbtype>3) {
echo "文件无缩图或各式不正确";die();
}
$bmpPos = $this->fread2unpack();
$bmpLen = $this->fread2unpack();
//开始读取bmpHeader图片信息
fseek($this->fp, $bmpPos);
$this->bmpSizeBitmapHeader = $this->fread2unpack();
$this->bmpWidth = $this->fread2unpack(); //获得宽高 用来计算header size
$this->bmpHeight = $this->fread2unpack();
$this->bmpBitPlanes = $this->fread2unpack(2);
$this->bmpBitCount = $this->fread2unpack(2); //获得bit位数,
/*
$this->bmpRelCompression = $this->fread2unpack();
$this->$bmpWidthxHeight = $this->fread2unpack();
$this->$bmpBitXPelsPerMeter = $this->fread2unpack();
$this->$bmpBitYPelsPerMeter = $this->fread2unpack();
$this->$bmpNumberOfPalettesUsed = $this->fread2unpack();
$this->$bmpNumberOfImportantColors = $this->fread2unpack();*/
fseek($this->fp, $bmpPos);
$this->bmpBody = fread($this->fp,$bmpLen);
fclose($this->fp);
return $this;
}
function makebmp() {
$size = (4-($this->bmpWidth/(8/$this->bmpBitCount)) %4)%4;
if ($this->bmpBitCount<24) $palsize=pow(2,$this->bmpBitCount)*4;
$size = (floor($this->bmpWidth/(8/$this->bmpBitCount)) + $size) * $this->bmpHeight + 54;
$size += $palsize;
$offset = 54 + $palsize;
// Bitmap 头
$this->bmpHead = "BM";
$this->bmpHead .= $this->fwrite2pack($size);
$this->bmpHead .= $this->fwrite2pack(0);
$this->bmpHead .= $this->fwrite2pack($offset);
$this->bmpData = $this->bmpHead . $this->bmpBody;
}
function show() {
if (is_null($this->bmpData)) $this->makebmp();
header("Content-type:image/bmp");
echo $this->bmpData;
return $this;
}
function save($filename) {
$fp = fopen($filename,"wb");
fwrite($fp,$this->bmpData);
fclose($fp);
return true;
}
function fread2unpack($bit=4) {
$bit = intval($bit);
switch($bit) {
case "1":
$b = unpack("a",fread($this->fp,1));break;
case "2":
$b = unpack("s",fread($this->fp,2));break;
case "4":
$b = unpack("l",fread($this->fp,4));break;
}
if (isset($b[1])) return $b[1];
else return fread($this->fp,$num);
}
function fwrite2pack($data,$bit=4) {
$bit = intval($bit);
switch($bit) {
case "1":
$b = pack("a",$data);break;
case "2":
$b = pack("s",$data);break;
case "4":
$b = pack("l",$data);break;
default:
return $data;
}
return $b;
}
}[/code]

[code]<?php
/**
+------------------------------------------------------------------------------
* 读取CAD dwg文件,生成缩略图
+------------------------------------------------------------------------------
* 作者:杨嵩 netyum
* 邮箱:[email protected]
* QQ :8025628
* MSN :[email protected]
* 时间:2009-9-17 8:38
* 调用方法:
* $dwg = new dwgthumb();
* $dwg->read("./2.dwg") //读取文件
* ->show() //页面显示
* ->save("./2.bmp"); //保存文件
+------------------------------------------------------------------------------
*/
class dwgthumb {
var $fp = null;
var $sentinelpos = 0;
var $thumbtype = 0;
var $bmpData = null; //bmpData数据
var $bmpHead = null;
var $bmpBody = null; //bmpData数据
var $bmpSizeBitmapHeader = 0;
var $bmpWidth = 0;
var $bmpHeight = 0;
var $bmpBitPlanes = 0;
var $bmpBitCount = 8;
var $bmpRelCompression = 0;
var $bmpWidthxHeight = 0;
var $bmpBitXPelsPerMeter = 0;
var $bmpBitYPelsPerMeter = 0;
var $bmpNumberOfPalettesUsed = 0;
var $bmpNumberOfImportantColors = 0;
function dwgthumb($filename="") {
if ($filename!="") $this->readinfo($filename);
}
function read($filename) {
if (!file_exists($filename)) {
echo "文件未找到";die();
}
$this->fp = fopen($filename,"rb");
fseek($this->fp, 13); //移动到13字节
$this->sentinelpos = $this->fread2unpack(); //读4个字节
fseek($this->fp, $this->sentinelpos + 30); //移动
$this->thumbtype = $this->fread2unpack(1); //读1个字节
if ($this->thumbtype<0 && $this->thumbtype>3) {
echo "文件无缩图或各式不正确";die();
}
$bmpPos = $this->fread2unpack();
$bmpLen = $this->fread2unpack();
//开始读取bmpHeader图片信息
fseek($this->fp, $bmpPos);
$this->bmpSizeBitmapHeader = $this->fread2unpack();
$this->bmpWidth = $this->fread2unpack(); //获得宽高 用来计算header size
$this->bmpHeight = $this->fread2unpack();
$this->bmpBitPlanes = $this->fread2unpack(2);
$this->bmpBitCount = $this->fread2unpack(2); //获得bit位数,
/*
$this->bmpRelCompression = $this->fread2unpack();
$this->$bmpWidthxHeight = $this->fread2unpack();
$this->$bmpBitXPelsPerMeter = $this->fread2unpack();
$this->$bmpBitYPelsPerMeter = $this->fread2unpack();
$this->$bmpNumberOfPalettesUsed = $this->fread2unpack();
$this->$bmpNumberOfImportantColors = $this->fread2unpack();*/
fseek($this->fp, $bmpPos);
$this->bmpBody = fread($this->fp,$bmpLen);
fclose($this->fp);
return $this;
}
function makebmp() {
$size = (4-($this->bmpWidth/(8/$this->bmpBitCount)) %4)%4;
if ($this->bmpBitCount<24) $palsize=pow(2,$this->bmpBitCount)*4;
$size = (floor($this->bmpWidth/(8/$this->bmpBitCount)) + $size) * $this->bmpHeight + 54;
$size += $palsize;
$offset = 54 + $palsize;
// Bitmap 头
$this->bmpHead = "BM";
$this->bmpHead .= $this->fwrite2pack($size);
$this->bmpHead .= $this->fwrite2pack(0);
$this->bmpHead .= $this->fwrite2pack($offset);
$this->bmpData = $this->bmpHead . $this->bmpBody;
}
function show() {
if (is_null($this->bmpData)) $this->makebmp();
header("Content-type:image/bmp");
echo $this->bmpData;
return $this;
}
function save($filename) {
$fp = fopen($filename,"wb");
fwrite($fp,$this->bmpData);
fclose($fp);
return true;
}
function fread2unpack($bit=4) {
$bit = intval($bit);
switch($bit) {
case "1":
$b = unpack("a",fread($this->fp,1));break;
case "2":
$b = unpack("s",fread($this->fp,2));break;
case "4":
$b = unpack("l",fread($this->fp,4));break;
}
if (isset($b[1])) return $b[1];
else return fread($this->fp,$num);
}
function fwrite2pack($data,$bit=4) {
$bit = intval($bit);
switch($bit) {
case "1":
$b = pack("a",$data);break;
case "2":
$b = pack("s",$data);break;
case "4":
$b = pack("l",$data);break;
default:
return $data;
}
return $b;
}
}[/code]
作者: netyum 发布时间: 2009-09-23
顶
作者: tdhfgg 发布时间: 2009-09-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28