PHP 建立缩略图

1、成比例缩小图像

<?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);

说明:php

ImageCopyResampled() 函数用于重采样拷贝部分图像并调整大小函数

ImageColorAllocateAlpha() 函数用于为一副图像分配颜色 + Alphaspa

ImageAlphaBlending() 函数设定图像的混色模式  blog

 

2、缩小为固定大小的矩形

<?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);

说明:class

该方法会从图像的中心成比例地修剪出尽量大的矩形,须要计算原图和缩略图宽度和高度之比,找出其中较小的值。file

从图像中心减去矩形的通常,得出在原图中的偏移量:($x - ($w * $scale)) / 2 和 ($y - ($h * $scale)) / 2方法

 

参考:im

<PHP Cookbook>3'rd  di

相关文章
相关标签/搜索