分享
 
 
 

图像缩小及格式转换

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

<?php

/**

*

* 对图像进行缩小,也可对png, gif, jpeg, wbmp格式的图像进行转换

* 需要GD库的支持才可以,若要进行gif图像的输出需要GD2.0.28或更高版本才支持(或<gd1.6也支持)

* gif的动画转了之后动画变成静画,不知为什么!

*

* @date 2004.08.16

* @author zhouxh@im.ac.cn

*

*/

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;

}

*/

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有