php 圖片合成

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章