其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
图像缩小及格式转换

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

<?php
/**
*
* 对图像进行缩小,也可对png, gif, jpeg, wbmp格式的图像进行转换
* 需要GD库的支持才可以,若要进行gif图像的输出需要GD2.0.28或更高版本才支持(或<gd1.6也支持)
* gif的动画转了之后动画变成静画,不知为什么!
*
* @date 2004.08.16
* @author [email protected]
*
*/
class ResizeImage
{
    
    const
ResizeImageInfo = "本类对图像进行缩小,也可对png, gif, jpeg, wbmp格式的图像进行转换"
;
    
    
//设置目标图像的宽和高
    
private $height = 100
;
    private
$width = 100
;
    
    
//源图像文件和目标图像文件,若只是输出至浏览器则目标图像文件可不设置
    
private $sourceFile = ''
;
    private
$dstFile = ''
;
    
    
//图像类型“image/gif、image/jpeg、image/png...”
    
private $imgType
;
    
    
//源图像句柄和目标图像句柄
    
private $sim
;
    private
$dim
;
    
    
//是否保存图像,用public void saveFlag(boolean $flag)方法设置
    
private $saveFlag = true
;
    
    function
__construct
() {
        if (!
function_exists('imagecreate'
)) {
            throw new
Exception('你的系统不支持GD库'
);
        }
    }
    
    function
__toString
() {
        return
ReSizeImage::ResizeImageInfo
;
    }
    
    
//设置目标图像的宽
    
public function setWidth($width
) {
        if (
$width <= 0
) {
            throw new
Exception('目标图像宽度不能小于0'
);
            return ;
        }
        
$this->width = $width
;
    }
    
    
//设置目标图像的高
    
public function setHeight($height
) {
        if (
$width <= 0
) {
            throw new
Exception('目标图像高度不能小于0'
);
            return ;
        }
        
$this->height = $height
;
    }
    
    
//设置源图像文件
    
public function setSourceFile($file
) {
        if (!
file_exists($file
)) {
            throw new
Exception('源图像文件不存在'
);
            return ;
        }
        
$this->sourceFile = $file
;
    }
    
    
//设置目标图像文件
    
public function setDstFile($file
) {
        
$this->dstFile = $file
;
    }
    
    
//设置是否生成新文件
    
public function saveFile($flag
) {
        
$this->saveFlag = (boolean)$flag
;
    }
    
    
//执行绘图操作,$quality参数表示生成图像的效果,数字越高,效果越好,不过仅用于jpeg类型的图像
    
public function draw($quality = 95
) {
        
$sourceImgInfo = @getimagesize($this->sourceFile
);
        if (!
is_array($sourceImgInfo
)) {
            throw new
Exception('源图像文件不存在'
);
            return ;
        }
        switch(
$sourceImgInfo[2
]){
             case
1
:
                
$this->imgType="image/gif"
;
                
$this->sim = imagecreatefromgif($this->sourceFile
);
                 break;
             case
2
:
                
$this->imgType="image/jpeg"
;
                
$this->sim = imagecreatefromjpeg($this->sourceFile
);
                 break;
             case
3
:
                
$this->imgType="image/png"
;
                
$this->sim = imagecreatefrompng($this->sourceFile
);
                 break;
             case
15
:
               
$this->imgType="image/wbmp"
;
               
$this->sim = imagecreatefromwbmp($this->sourceFile
);
                 break;
             default:
                 return
'不支持的图像格式'
;
                 break;
        }
        
        
//设置目标图像的实际宽和高
        
$dstWidth = $sourceWidth = $sourceImgInfo[0
];
        
$dstHeight = $sourceHeight = $sourceImgInfo[1
];
        
        if (
$sourceHeight > $this->height && $sourceWidth > $this->width
) {
            if (
$sourceHeight > $sourceWidth
) {
               
$zoom = $this->height / $sourceHeight
;
               
$dstHeight = $this->height
;
               
$dstWidth = $sourceWidth * $zoom
;
            } else {
               
$zoom = $this->width / $sourceWidth
;
               
$dstWidth = $this->width
;
               
$dstHeight = $sourceHeight * $zoom
;
            }
        }
        
        
//建立目标图像的句柄
        
$this->dim = @imagecreatetruecolor($dstWidth, $dstHeight) or imagecreate($dstWidth, $dstHeight
);        
        
        
//将真彩色图像转换为调色板图像
        
imagetruecolortopalette($this->sim, false, 256
);
        
        
//根据源图像颜色的总数并把它分配到目标图像上
        
$palsize = ImageColorsTotal($this->sim
);
        for (
$i = 0; $i<$palsize; $i
++) {
           
$colors = ImageColorsForIndex($this->sim, $i
);
           
ImageColorAllocate($this->dim, $colors['red'], $colors['green'], $colors['blue'
]);
        }
        
        
//进行图像的缩放
        
imagecopyresampled($this->dim, $this->sim, 0, 0, 0, 0, $dstWidth, $dstHeight, $sourceWidth, $sourceHeight
);
        
        
//生成新的目标图像
        
if ($this->saveFlag
) {
            
$imgExt = substr($this->dstFile, strrpos($this->dstFile, '.') + 1
);
            switch(
strtolower($imgExt
)){
                 case
'gif'
:
                     if (!
function_exists('imagegif'
)) {
                         throw new
Exception('你的GD库不支持gif图像的输出'
);
                         return ;
                     }
                    
imagegif($this->dim, $this->dstFile
);
                     break;
                 case
'jpeg'
:
                 case
'jpg'
:
                    
imagejpeg($this->dim,$this->dstFile, $quality
);
                     break;
                 case
'png'
:
                    
imagepng($this->dim, $this->dstFile
);
                     break;
                 case
'wbmp'
:
                   
imagewbmp($this->dim, $this->dstFile
);
                     break;
                 default:
                     return
'目标图像文件为空或者格式不对,无法进行保存'
;
                     break;
             }
             
        
//直接输出目标图像至浏览器
        
} else {
            
header ("Content-type: " . $this->imgType
);
            switch(
$sourceImgInfo[2
]){
                 case
1
:
                    
imagegif($this->dim
);
                     break;
                 case
2
:
                    
imagejpeg($this->dim, $quality
);
                     break;
                 case
3
:
                    
imagepng($this->dim
);
                     break;
                 case
15
:
                   
imagewbmp($this->dim
);
                     break;
                 default:
                     return
'不支持的图像格式'
;
                     break;
             }
        }        
        return ;
    }
    
    function
__destruct
() {
        @
ImageDestroy($this->sim
);
        @
ImageDestroy($this->dim
);
    }
}
?>
<?php
/*
//例子1:缩小图像后直接输出至浏览器
    $obj = new ReSizeImage();
    $obj->setSourceFile('win.png');
    $obj->saveFile(false);
    $obj->setWidth(250);
    $obj->setHeight(250);
    $obj->draw();
    
//例子2:缩小图像后保存新图像文件为“new.png”
    $obj = new ReSizeImage();
    $obj->setSourceFile('win.png');
    $obj->setDstFile('new.png');
    $obj->setWidth(250);
    $obj->setHeight(250);
    $obj->draw();
    
//例子3:缩小图像后保存新图像文件为“new.jpg”,并设置其quality值为“100”
    $obj = new ReSizeImage();
    $obj->setSourceFile('win.png');
    $obj->setDstFile('new.jpg');
    $obj->setWidth(250);
    $obj->setHeight(250);
    $obj->draw(100);
    
//例子4:捕捉程序中的异常
try {
    $obj = new ReSizeImage();
    $obj->setSourceFile('no.png');
    $obj->saveFile(false);
    $obj->setWidth(250);
    $obj->setHeight(250);
    $obj->draw();
} catch (Exception $ex) {
    echo $ex;
}
*/
?>



相关文章

相关软件