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

yipeiwu_com6年前PHP代码库
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" style="line-height:6pt"> <?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>


很有趣吧,呵呵..

相关文章

PHP ajax 异步执行不等待执行结果的处理方法

短地址生成应用中,要根据长地址生成网页快照,这个生成时间非瞬发,不可预估。 所以前台方面采用的方案一般为先展示生成的短地址,再定期AJAX轮查网页快照是否生成完毕。 So,PHP代码这里...

如何让PHP编码更加好看利于阅读

写出优秀的程序代码是一门艺术,要想如此,就必须在一开始就养成良好的编程习惯。良好的编程习惯不仅有助于项目初期的设计(如模块化),还可以使你编写的代码更易于理解,从而使代码的维护工作更轻松...

解析PHP中empty is_null和isset的测试

代码如下:复制代码 代码如下:<?php$a;$b = false;$c = '';$d = 0;$e = null;$f = array();首先是empty的var_dump输...

使用Zttp简化Guzzle 调用

Zttp 是 Adam Wathan 为了让代码更富表现力以及简化常见用例而写的一个 Guzzle 的封装。 这是使用 Zttp 去 Post 一个自定义头部内容请求的一个例子:...

php实现随机生成易于记忆的密码

本文实例讲述了php实现随机生成易于记忆的密码。分享给大家供大家参考。具体实现方法如下: 这里通过预定义一些单词,让php随机从这些单词中选择进行组合生成密码 function ra...