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使用str_replace替换多维数组的实现方法分析

本文实例讲述了php使用str_replace替换多维数组的实现方法。分享给大家供大家参考,具体如下: 在php中,如果使用str_replace替换数组中的字符串,只能替换一维的数组,...

使用PHP遍历文件夹与子目录的函数代码

使用PHP遍历文件夹与子目录的函数代码

我们要使用的函数有 Scandir,它的作用是列出指定路径中的文件和目录,就像 Dir 一样。 > 与更强力的 Glob() 函数,作用是以数组的形式返回与指定模式相匹配的文件名...

PHP实现加密的几种方式介绍

PHP中的加密方式有如下几种 1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str ...

解析php file_exists无效的解决办法

方法1 :据官方手册上描述若php教程的safe mode相关的设置过于苛刻,就会出现这样的情形:尽管文件真实存在也被误报,认为文件不存在。 由于服务器端的php.ini我们无法操纵,当...

Apache下禁止php文件被直接访问的解决方案

Apache下禁止php文件被直接访问的解决方案

  一开始,我想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效。RewriteEngin...