<?php
/**
 * Smarty plugin
 *
 * @package Smarty
 * @subpackage PluginsModifier
 */
function smarty_modifier_gray($srcFile) {
	// 文件不存在
	if (! file_exists ( $srcFile )) {
		return $srcFile;
	}
	
	// 生成路径
	$pathArr = explode ( '/', $srcFile );
	$dir_path = "";
	$filename = $pathArr [count ( $pathArr ) - 1];
	for($i = 0; $i < count ( $pathArr ) - 1; $i ++) {
		$dir_path .= $pathArr [$i] . '/';
	}
	$newfilename = $dir_path . 'G-' . $filename;
	// 已生成
	if (file_exists ( $newfilename )) {
		return $newfilename;
	}
	
	$ImgInfo = getimagesize ( $srcFile );
	$imgWidth = $ImgInfo [0]; // 图片宽
	$imgHeight = $ImgInfo [1]; // 图片高
	
	$oldIm = null;
	
	switch ($ImgInfo [2]) {
		case 1 : // gif
			$oldIm = ImageCreateFromGIF ( $srcFile );
			break;
		case 2 : // jpg
			$oldIm = ImageCreateFromJpeg ( $srcFile );
			break;
		case 3 : // png
			$oldIm = ImageCreateFromPNG ( $srcFile );
			break;
		default :
			return $srcFile; // 不支持此格式
			break;
	}
	
	$newImg = imagecreatetruecolor ( $imgWidth, $imgHeight );
	for($i = 0; $i < $imgWidth; $i ++) {
		for($j = 0; $j < $imgHeight; $j ++) {
			$rgb = ImageColorAt ( $oldIm, $i, $j );
			
			$r = ($rgb >> 16); // 取得红色分量
			$g = ($rgb & 0x00ff00) >> 8; // 取得绿色分量
			$b = $rgb & 0x0000ff; // 取得蓝色分量
			
			$t = floor ( ($r * 3 + $g * 6 + $b) / 10 ); // 转成灰度
			$color = ImageColorAllocate ( $newImg, $t, $t, $t );
			imagesetpixel ( $newImg, $i, $j, $color );
		}
	}
	
	imagejpeg ( $newImg, $newfilename, 100 );
	imagedestroy ( $newImg );
	return $newfilename;
}
?>