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  

posted @ 2016-05-05 23:35  nemo20  阅读(412)  评论(0编辑  收藏  举报
访客数:AmazingCounters.com
2016/05/17 起统计