PHP 将2个或更多图像合并为一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 将2个或更多图像合并为一个相关的知识,希望对你有一定的参考价值。

<?php

function mergeImages($images) {
	$imageData = array();
	$len = count($images);
	$wc = ceil(sqrt($len));
	$hc = floor(sqrt($len/2));
	$maxW = array();
	$maxH = array();
	for($i = 0; $i < $len; $i++) {
		$imageData[$i] = getimagesize($images[$i]);
		$found = false;
		for($j = 0; $j < $i; $j++) {
			if ( $imageData[$maxW[$j]][0] < $imageData[$i][0] ) {
				$farr = $j > 0 ? array_slice($maxW, $j-1, $i) : array();
				$maxW = array_merge($farr, array($i), array_slice($maxW, $j));
				$found = true;
				break;
			}
		}
		if ( !$found ) {
			$maxW[$i] = $i;
		}
		$found = false;
		for($j = 0; $j < $i; $j++) {
			if ( $imageData[$maxH[$j]][1] < $imageData[$i][1] ) {
				$farr = $j > 0 ? array_slice($maxH, $j-1, $i) : array();
				$maxH = array_merge($farr, array($i), array_slice($maxH, $j));
				$found = true;
				break;
			}
		}
		if ( !$found ) {
			$maxH[$i] = $i;
		}
	}
	
	$width = 0;
	for($i = 0; $i < $wc; $i++) {
		$width += $imageData[$maxW[$i]][0];
	}
	
	$height = 0;
	for($i = 0; $i < $hc; $i++) {
		$height += $imageData[$maxH[$i]][1];
	}

	$im = imagecreatetruecolor($width, $height);
	
	$wCnt = 0;
	$startWFrom = 0;
	$startHFrom = 0;
	for( $i = 0; $i < $len; $i++ ) {
		$tmp = imagecreatefromjpeg($images[$i]);
		imagecopyresampled($im, $tmp, $startWFrom, $startHFrom, 0, 0, $imageData[$i][0], $imageData[$i][1], $imageData[$i][0], $imageData[$i][1]);
		$wCnt++;
		if ( $wCnt == $wc ) {
			$startWFrom = 0;
			$startHFrom += $imageData[$maxH[0]][1];
			$wCnt = 0;
		} else {
			$startWFrom += $imageData[$i][0];
		}
	}
	
	
	return $im;
}

$im = mergeImages(array('1.jpg', '2.jpg'));

header('Content-type: image/jpg');

imagejpeg($im);

?>

以上是关于PHP 将2个或更多图像合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

iOS 将 2 个或多个音频文件合并(混合)为 wav 格式

如何将此方法转换为更快地使用 LockBits 并且它将比较 3 个或更多图像?

合并三个或更多图像 -- PHP

MySQL,在执行 SELECT DISTINCT 查询之前合并 2 个或更多表?

在 MS Access 中加入 3 个或更多表而不重复条目

如何在 PHP 中以 2 个或多个连续空格分割字符串