PHP 创建缩略图
一、成比例缩小图像
<?php /* 创建缩略图 */ $file = __DIR__.'/button.png'; $scale = 0.5; // 比例 $image = ImageCreateFromPNG($file); $thumbnail = ImageCreateTrueColor( ImageSX($image) * $scale, ImageSY($image) * $scale ); // 保留透明度 ImageColorTransparent($thumbnail, ImageColorAllocateAlpha($thumbnail, 0, 0, 0, 127) ); ImageAlphaBlending($thumbnail, false); ImageSaveAlpha($thumbnail, true); // 缩小 & 复制 ImageCopyResampled($thumbnail, $image, 0, 0, 0, 0, ImageSX($thumbnail), ImageSY($thumbnail), ImageSX($image), ImageSY($image) ); header('Content-type: image/png'); ImageJpeg($thumbnail); ImageDestroy($image); ImageDestroy($thumbnail);
说明:
ImageCopyResampled() 函数用于重采样拷贝部分图像并调整大小
ImageColorAllocateAlpha() 函数用于为一副图像分配颜色 + Alpha
ImageAlphaBlending() 函数设定图像的混色模式
二、缩小为固定大小的矩形
<?php /* 创建固定大小的缩略图 */ $file = __DIR__.'/button.png'; $w = 50; $h = 20; // 图像 $original = ImageCreateFromPNG($file); $thumbnail = ImageCreateTrueColor($w, $h); // 保留透明设置 ImageColorTransparent($thumbnail, ImageColorAllocateAlpha($thumbnail, 0, 0, 0, 127) ); ImageAlphaBlending($thumbnail, false); ImageSaveAlpha($thumbnail, true); // 缩小 & 复制 $x = ImageSX($original); $y = ImageSY($original); $scale = min($x / $w, $y / $h); ImageCopyResampled($thumbnail, $original, 0, 0, ($x - ($w * $scale)) / 2, ($y - ($h * $scale)) / 2, $w, $h, $w * $scale, $h * $scale ); header('Content-type: image/png'); ImageJpeg($thumbnail); ImageDestroy($image); ImageDestroy($thumbnail);
说明:
该方法会从图像的中心成比例地修剪出尽可能大的矩形,需要计算原图和缩略图宽度和高度之比,找出其中较小的值。
从图像中心减去矩形的一般,得出在原图中的偏移量:($x - ($w * $scale)) / 2 和 ($y - ($h * $scale)) / 2
参考:
<PHP Cookbook>3'rd