php图片合成(多张图片合成一张)

Posted 张凯::get("新技能")

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php图片合成(多张图片合成一张)相关的知识,希望对你有一定的参考价值。

1.多张图片合成一张比如:

图片合成,可以显示在浏览器上面同时保存到文件夹下面

<?php  
    /** 
    * 图片合并 
    **/  
  
    $pic_list       = array(  
        \'img2.png\',  
        \'img2.png\',  
        \'logo.png\',  
        \'logo.png\',  
        \'logo.png\',  
        \'img2.png\',  
        \'img2.png\',  
        \'img2.png\',  
        \'img2.png\'  
    );  
      
    $pic_list    = array_slice($pic_list, 0, 9); // 只操作前9个图片  
  
    $bg_w    = 150; // 背景图片宽度  
    $bg_h    = 150; // 背景图片高度  
  
    $background = imagecreatetruecolor($bg_w,$bg_h); // 背景图片  
    $color   = imagecolorallocate($background, 202, 201, 201); // 为真彩色画布创建白色背景,再设置为透明  
    imagefill($background, 0, 0, $color);  
    imageColorTransparent($background, $color);   
  
    $pic_count  = count($pic_list);  
    $lineArr    = array();  // 需要换行的位置  
    $space_x    = 3;  
    $space_y    = 3;  
    $line_x  = 0;  
    switch($pic_count) {  
    case 1: // 正中间  
        $start_x    = intval($bg_w/4);  // 开始位置X  
        $start_y    = intval($bg_h/4);  // 开始位置Y  
        $pic_w   = intval($bg_w/2); // 宽度  
        $pic_h   = intval($bg_h/2); // 高度  
        break;  
    case 2: // 中间位置并排  
        $start_x    = 2;  
        $start_y    = intval($bg_h/4) + 3;  
        $pic_w   = intval($bg_w/2) - 5;  
        $pic_h   = intval($bg_h/2) - 5;  
        $space_x    = 5;  
        break;  
    case 3:  
        $start_x    = 40;   // 开始位置X  
        $start_y    = 5;    // 开始位置Y  
        $pic_w   = intval($bg_w/2) - 5; // 宽度  
        $pic_h   = intval($bg_h/2) - 5; // 高度  
        $lineArr    = array(2);  
        $line_x  = 4;  
        break;  
    case 4:  
        $start_x    = 4;    // 开始位置X  
        $start_y    = 5;    // 开始位置Y  
        $pic_w   = intval($bg_w/2) - 5; // 宽度  
        $pic_h   = intval($bg_h/2) - 5; // 高度  
        $lineArr    = array(3);  
        $line_x  = 4;  
        break;  
    case 5:  
        $start_x    = 30;   // 开始位置X  
        $start_y    = 30;   // 开始位置Y  
        $pic_w   = intval($bg_w/3) - 5; // 宽度  
        $pic_h   = intval($bg_h/3) - 5; // 高度  
        $lineArr    = array(3);  
        $line_x  = 5;  
        break;  
    case 6:  
        $start_x    = 5;    // 开始位置X  
        $start_y    = 30;   // 开始位置Y  
        $pic_w   = intval($bg_w/3) - 5; // 宽度  
        $pic_h   = intval($bg_h/3) - 5; // 高度  
        $lineArr    = array(4);  
        $line_x  = 5;  
        break;  
    case 7:  
        $start_x    = 53;   // 开始位置X  
        $start_y    = 5;    // 开始位置Y  
        $pic_w   = intval($bg_w/3) - 5; // 宽度  
        $pic_h   = intval($bg_h/3) - 5; // 高度  
        $lineArr    = array(2,5);  
        $line_x  = 5;  
        break;  
    case 8:  
        $start_x    = 30;   // 开始位置X  
        $start_y    = 5;    // 开始位置Y  
        $pic_w   = intval($bg_w/3) - 5; // 宽度  
        $pic_h   = intval($bg_h/3) - 5; // 高度  
        $lineArr    = array(3,6);  
        $line_x  = 5;  
        break;  
    case 9:  
        $start_x    = 5;    // 开始位置X  
        $start_y    = 5;    // 开始位置Y  
        $pic_w   = intval($bg_w/3) - 5; // 宽度  
        $pic_h   = intval($bg_h/3) - 5; // 高度  
        $lineArr    = array(4,7);  
        $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");  
      
?>  
图片合成

 

2.获取 源图片的高度和宽度

list($width, $height) = getimagesize($file);

以上是关于php图片合成(多张图片合成一张)的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg图片转视频,图片+音频合成视频每秒一张图

如何将2张图片合成1张?

c# 多张图片合成一张图片

怎么把几张图片合成为一张GIF格式的图片?

js多张图片合成一张图,canvas(海报图,将二维码和背景图合并) -----vue

gulp填坑记——gulp多张图片自动合成雪碧图