#1 coolcool1265
image.class.rar部分代码如下:
class Image {
/**
* 图片文件句柄
*
* @var image
*/
var $image;
/**
* 图片类型
*
* @var imagetype
*/
var $image_type;
var $image_quality=90;
var $true_color = false;
/**
* 装载图像
*
* @param string $filename 文件完整路径
* @return void
*/
function load($filename) {
@ini_set('memory_limit', '128M');
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}else{
return false;
}
if(function_exists("imagecopyresampled") && function_exists("imagecreatetruecolor") && $this->image_type != IMAGETYPE_GIF){
$this->true_color = true;
}
}
function setQuality($q){
if($q>0)
$this->image_quality = $q;
}
/**
* 返回扩展名
*
* @return string 扩展名
*/
function getExtension(){
if( $this->image_type == IMAGETYPE_JPEG ) return 'jpg';
elseif( $this->image_type == IMAGETYPE_GIF ) return 'gif';
elseif( $this->image_type == IMAGETYPE_PNG ) return 'png';
}
/**
* 将图形对象保存成文件
*
* @param string $filename 文件名
* @param int $image_type 文件类型
* return volid
*/
function save($filename) {
$image_type = $this->image_type;
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$this->image_quality);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
}
/**
* 将图像输出到数据流
*
* @param int $image_type 文件类型
* @return void
*/
function output() {
$image_type = $this->image_type;
if( $image_type == IMAGETYPE_JPEG ) {
header('Content-Type: image/jpeg');
imagejpeg($this->image,NULL,$this->image_quality);
} elseif( $image_type == IMAGETYPE_GIF ) {
header('Content-type: image/gif');
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
header('Content-type: image/png');
imagepng($this->image);
}
}
/**
* 获得图像宽度
*
* @return int 图像宽度
*/
function getWidth() {
return imagesx($this->image);
}
/**
* 获得图像高度
*
* @return int 图像高度
*/
function getHeight() {
return imagesy($this->image);
}
/**
* 等比例缩小到指定高度
*
* @param int $height 指定高度
*/
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
/**
* 缩小到指定尺寸
*
* @param int $w 指定宽度
* @param int $h 指定高度
*/
function resizeTo($w=0, $h=0) {
if($w>0 && $h>0) return $this->resize($w,$h);
else if($w>0) return $this->resizeToWidth($w);
else if($h>0) return $this->resizeToHeight($h);
}
/**
* 指定最大宽度和最大高度
* @param int $w 最大宽度
* @param int $h 最大高度
*/
function resizeScale($w=0,$h=0){
if($w == 0 && $h>0){
return $this->resizeToHeight($h);
}
if($h == 0 && $w>0){
return $this->resizeToWidth($w);
}
if($w == 0 && $h==0){
return false;
}
$maxwidth = $w;
$maxheight = $h;
$width = $this->getWidth();
$height = $this->getHeight();
$RESIZEWIDTH = $RESIZEHEIGHT = false;
if($maxwidth && $width > $maxwidth){
$widthratio = $maxwidth/$width;
$RESIZEWIDTH=true;
}
if($maxheight && $height > $maxheight){
$heightratio = $maxheight/$height;
$RESIZEHEIGHT=true;
}
if($RESIZEWIDTH && $RESIZEHEIGHT){
if($widthratio < $heightratio){
return $this->resizeToWidth($w);
}else{
return $this->resizeToHeight($h);
}
}elseif($RESIZEWIDTH){
return $this->resizeToWidth($w);
}elseif($RESIZEHEIGHT){
return $this->resizeToHeight($h);
}
}
/**
* 等比例缩小到指定宽度,并切成方形
*
* @param int $v 指定宽度/高度
*/
function square($v){
$width = $this->getWidth();
$height = $this->getHeight();
$left = 0;
$top = 0;
if($width>$height){
$this->resizeToHeight($v);
$left = ceil(($v/$height * $width - $v)/2);
}else{
$this->resizeToWidth($v);
$top = ceil(($v/$width * $height - $v)/2);
}
$this->cut($v,$v,$left,$top);
}
/**
* 等比例缩小到指定宽度
*
* @param int $width 指定宽度
*/
function resizeToWidth($width) {
if($width>=$this->getWidth()) return;
$ratio = $width / $this->getWidth();
$height = $this->getHeight() * $ratio;
$this->resize($width,$height);
}
/**
* 维持宽高比缩小指定比例
*
* @param int $scale 指定比例
*/
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getHeight() * $scale/100;
$this->resize($width,$height);
}
/**
* 改变图像尺寸
*
* @param int $width 指定宽度
* @param int $height 指定高度
*/
function resize($width,$height) {
if($this->true_color){
$newim = imagecreatetruecolor($width, $height);
imagecopyresampled($newim, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
}else{
$newim = imagecreate($width, $height);
imagecopyresized($newim, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
}
imagedestroy($this->image);
$this->image = $newim;
}
/**
* 裁剪图像
*
* @param int $width 指定宽度
* @param int $height 指定高度
*/
function cut($width,$height,$left = 0,$top = 0){
if($this->true_color){
$new_image = imagecreatetruecolor($width, $height);
}else{
$new_image = imagecreate($width, $height);
}
imagecopy($new_image, $this->image, 0, 0, $left, $top, $width, $height);
imagedestroy($this->image);
$this->image = $new_image;
}
/**
* 截取从某纵向位置开始指定高度的图像
*
* @param int $top 指定位置
* @param int $height 指定高度
*/
function vcut($top,$height){
$width = $this->getWidth();
$height = $this->getHeight()-$top+$height;
if($height<200) return;
if($this->true_color){
$new_image = imagecreatetruecolor($width, $height);
}else{
$new_image = imagecreate($width, $height);
}
imagecopy($new_image, $this->image, 0, 0, 0, $top, $width, $height);
imagedestroy($this->image);
$this->image = $new_image;
}
}
2010-11-30 23:00:56