首页 > 开发 > PHP > 正文

用GD生成生成缩略图的两个选择和区别

2024-05-04 22:59:37
字体:
来源:转载
供稿:网友

php的gd扩展提供了两个函数来缩放图像:
imagecopyresized(dest, src, dx, dy, sx, sy, dw, dh, sw, sh);
imagecopyresampled(dest, src, dx, dy, sx, sy, dw, dh, sw, sh);

imagecopyresized( )函数在所有gd版本中有效,但其缩放图像的算法比较粗糙,可能会导致图像边缘的锯齿。gd 2.x中新增了一个imagecopyresampled( )函数,其像素插值算法得到的图像边缘比较平滑(但该函数的速度比imagecopyresized()慢)。

来看一个例子,我们将这个图缩小四倍:
<?php

 $src 
imagecreatefromjpeg('php.jpg');

 
$width imagesx($src);
 
$height imagesy($src);
 
$x $width/2$y $height/2;
 
$dst imagecreatetruecolor($x,$y);
 
imagecopyresized($dst,$src,0,0,0,0,$x,$y,$width,$height);
 
//imagecopyresampled($dst,$src,0,0,0,0,$x,$y,$width,$height);

 
header('content-type: image/jpeg');
 
imagejpeg($dst,'',100);
?>

原图:


使用
imagecopyresized()函数生成的结果:



使用imagecopyresampled()函数生成的结果:




很明显可以看到两个函数生成的图像效果是不一样的,imagecopyresampled()函数生成的结果比较平滑,效果较好。

顺便贴一个效果,用ascii表示图像。imagecolorat()有一个很有趣的用处,它可以循环检查
图像中的每一个像素的颜色,然后对该颜色数据进行操作。
源代码:
<html>
<body bgcolor="#000000" > <?php 
 $im 
imagecreatefromjpeg('test1.jpg'
);
 
$dx imagesx($im
);
 
$dy imagesy($im
);
 for(
$y 0$y $dy$y
++) {
     for(
$x=0$x $dx$x
++) {
         
$col imagecolorat($im$x$y
);
         
$rgb imagecolorsforindex($im,$col
);
         
printf('<font color=#%02x%02x%02x>*</font>'
,
                 
$rgb['red'],$rgb['green'],$rgb['blue'
]);
     }
     echo 
"<br>/n"
;
 }
 
imagedestroy($im
);
?>
</body></html>


很有趣吧,呵呵..
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表