<?php
//图片合并
class imageMix
{
public $bg_w = 250; // 背景图片宽度
public $bg_h = 250; // 背景图片高度
/**
* 组合图片
* @param $image_set
* @param $image_number
*/
public function imageSynthesis($image_set, $image_number)
{
// 背景图片
$background = imagecreatetruecolor($this->bg_w, $this->bg_h);
// 为真彩色画布创建白色背景,再设置为透明
$color = imagecolorallocate($background, 202, 201, 201);
//区域填充
imagefill($background, 0, 0, $color);
//将某个颜色定义为透明色
imageColorTransparent($background, $color);
//随机从set中取出指定数量的图片
shuffle($image_set);
$pic_list = array_slice($image_set, 0, $image_number);
$pic_count = count($pic_list);
$lineArr = array(); // 需要换行的位置
$space_x = 3;
$space_y = 3;
$line_x = 0;
$p = sqrt($image_number);//3
$i = sqrt($image_number) + 1;//4
$j = sqrt($image_number) - 1;//2
switch ($pic_count) {
case $pic_count:
$start_x = 5; // 开始位置X
$start_y = 5; // 开始位置Y
$pic_w = intval($this->bg_w / $p) - 4.1; // 宽度
$pic_h = intval($this->bg_h / $p) - 4.1; // 高度
$lineArr = $this->getNumArray($image_number);
$line_x = 5;
break;
}
foreach ($pic_list as $k => $pic_path) {
$kk = $k + 1;
if (in_array($kk, $lineArr)) {
$start_x = $line_x;
$start_y = $start_y + $pic_h + $space_y;
}
$pathInfo = pathinfo($pic_path);
switch (strtolower($pathInfo['extension'])) {
case 'jpg':
case 'jpeg':
$imagecreatefromjpeg = 'imagecreatefromjpeg';
break;
case 'png':
$imagecreatefromjpeg = 'imagecreatefrompng';
break;
case 'gif':
default:
$imagecreatefromjpeg = 'imagecreatefromstring';
$pic_path = file_get_contents($pic_path);
break;
}
$resource = $imagecreatefromjpeg($pic_path);
// $start_x,$start_y copy图片在背景中的位置
// 0,0 被copy图片的位置
// $pic_w,$pic_h copy后的高度和宽度
imagecopyresized($background, $resource, $start_x, $start_y, 0, 0, $pic_w, $pic_h, imagesx($resource), imagesy($resource)); // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度
$start_x = $start_x + $pic_w + $space_x;
}
header("Content-type: image/jpg");
imagejpeg($background);
imagegif($background, "./hero_gam.png");
}
/**
* 计算换行的位置
* @param $image_number
* @return array
*/
function getNumArray($image_number)
{
$image_num = sqrt($image_number);
if (floor($image_num) == $image_num) {
$arr = [];
for ($i = $image_num - 1; $i > 0; $i--) {
$arr[] = $image_number - ($image_num * $i) + 1;
}
return $arr;
} else {
echo "false";
}
}
}
$obj = new imageMix();
$image_set = array(
'./images/1.jpg',
'./images/2.jpg',
'./images/3.jpg',
'./images/4.jpg',
'./images/5.jpg',
'./images/6.jpg',
'./images/7.jpg',
'./images/8.jpg',
'./images/9.jpg',
'./images/10.jpg',
'./images/11.jpg',
'./images/12.jpg',
'./images/13.jpg',
'./images/14.jpg',
'./images/15.jpg',
'./images/16.jpg',
'./images/17.jpg',
'./images/18.jpg',
'./images/19.jpg',
'./images/20.jpg',
'./images/21.jpg',
'./images/22.jpg',
'./images/23.jpg',
'./images/24.jpg',
'./images/25.jpg',
'./images/26.jpg',
);
$image_number = 25;
$obj->bg_w=300;
$obj->bg_h=300;
$res = $obj->imageSynthesis($image_set, $image_number);