PHP实现图片马赛克(打码)
原创 52cxy 11-24 08:58 阅读数:405

图片实现马赛克:

/** 图片马赛克
* @param  String  $src 原始图片路径
* @param  Stirng  $dst 生成后的图片
* @param  int    $x1   起点横坐标
* @param  int    $y1   起点纵坐标
* @param  int    $x2   终点横坐标
* @param  int    $y2   终点纵坐标
* @param  int    $size 打码大小,数字越大越模糊
* @return boolean
*/
function imageMosaics($src, $dst, $x1, $y1, $x2, $y2, $size){

	// 推断原图是否存在
	if(!file_exists($src)){
		return false;
	}

	// 获取原图信息
	list($width, $height, $type) = getimagesize($src);

	// 推断区域是否超出图片
	if($x1 > $width || $x1 < 0 || $x2 > $width || $x2 < 0 || $y1 > $height
		|| $y1 < 0 || $y2 > $height || $y2 < 0){
		return false;
	}

	if($type == 1) $srcImgData = imagecreatefromgif($src);
	elseif($type == 2) $srcImgData = imagecreatefromjpeg($src);
	elseif($type == 3) $srcImgData = imagecreatefrompng($src);
	else return false;

	// 打马赛克
	for($i = $x1; $i < $x2; $i = $i+$size){
		for($j = $y1; $j < $y2; $j = $j+$size){
			$color = imagecolorat($srcImgData, $i+round($size/2), $j+round($size/2));
			imagefilledrectangle($srcImgData, $i, $j, $i+$size, $j+$size, $color);
		}
	}

	// 生成图片
	if($type == 1) imagegif($srcImgData, $dst);
	elseif($type == 2) imagejpeg($srcImgData, $dst);
	elseif($type == 3) imagepng($srcImgData, $dst);

	return is_file($dst)? true : false;
}


测试代码:

$src = 'src.jpg';
$dst = 'dst.jpg';

$flag = imageMosaics($src, $dst, 0, 0, 100, 100, 4);


共0条评论
我要评论