首页 > 编程语言 >php多张图片拼接成长图

php多张图片拼接成长图

时间:2023-09-18 10:45:35浏览次数:34  
标签:image 多张 imageObj imgItem 拼接 result path php data

 

$pic_list = array(
    'images/temp/5.png',
    'images/temp/6.png',
    'images/temp/7.png',
    'https://www.baidu.com/image/202309/202309180921113826.jpg',
);


function mergeImage($imgUrls, $saveLocalPath)
{
    $result = ['code' => 400, 'msg' => '参数错误', 'data' => []];
    if (empty($imgUrls) || !is_array($imgUrls)) {
        return $result;
    }

    ini_set('memory_limit', '256M');
    ini_set('memory_limit', '-1');

    // 因为上传的图片可能有大有小,所有我们这里定义一个统一的宽度,保证拼接的时候图片会比较美观
    $maxWidth = 1000;//设置画布的最大宽
    // 处理后图片数据的集合
    $imgObjList = array();
    // 拼接后图片最终的高度
    $imgHeight = 0;
    foreach ($imgUrls as $img) {
        $path = $img;
        // 判别图像文件的类型
        $image = exif_imagetype($path);
        // 将图像类型常量转换成图片文件的MIME类型
        $mime_type = image_type_to_mime_type($image); //获取文件真实的mime类型
        if ($mime_type == 'image/png') {
            // 由文件或 URL 创建一个新图象。
            $imageObj = imagecreatefrompng($path);
        } else if ($mime_type == 'image/jpeg') {
            $imageObj = imagecreatefromjpeg($path);
        } else {
            $imageObj = imagecreatefromjpeg($path);
        }
        // 获取图像的宽度
        $imgWidth = imagesx($imageObj);
        // 用最大宽度 除以 图片真实宽度,得到宽度比例
        $rate = $maxWidth / $imgWidth;
        // 获取图像的高度
        $oldHeight = imagesy($imageObj);
        // 用图像真实高度 乘以 宽度比例 等于 修改后的图像高度
        $newHeight = floor($oldHeight * $rate);
        // 累加计算拼接后图像高度
        $imgHeight += $newHeight;
        $data = [];
        $data['maxHeight'] = $newHeight;
        $data['obj'] = $imageObj;
        // 插入图像信息
        $imgObjList[] = $data;
    }
    // 根据最终高度和宽度得到空白画布
    $imageBk = imagecreatetruecolor($maxWidth, $imgHeight);
    // 为真彩画布创建白色背景
    $color = imagecolorallocate($imageBk, 255, 255, 255);
    imagefill($imageBk, 0, 0, $color);
    // 设置透明
    imageColorTransparent($imageBk, $color);
    $imageY = 0;
    foreach ($imgObjList as $imgItem) {
        // 拼接图片,
        imagecopyresampled($imageBk, $imgItem['obj'], 0, $imageY, 0, 0, $maxWidth, $imgItem['maxHeight'], imagesx($imgItem['obj']), imagesy($imgItem['obj']));
        $imageY += $imgItem['maxHeight'];
    }

    $upload_path = $_SERVER['DOCUMENT_ROOT'] . $saveLocalPath;//保存的文件路径绝对路径

    if (!is_dir($upload_path)) {
        mkdir($upload_path, 0755, true);
    }

    $file_path = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $saveLocalPath;//返回的文件路径
    $newFileName = uniqid() . '.png';
    $newImgLink = $saveLocalPath . $newFileName;//文件地址

    // 输出合成图片
    if (imagejpeg($imageBk, "." . $newImgLink)) {
        $result['code'] = 200;
        $result['msg'] = '保存成功';
        $result['data']['imagePath'] = $newImgLink;
        $result['data']['imageAbsolutePath'] = $file_path . $newFileName; //完整的路径;
        $result['data']['time'] = date('Y-m-d H:i:s');
    } else {
        $result['code'] = 0;
        $result['msg'] = '保存失败';
    }
    return $result;
}

$rest = mergeImage($pic_list, '/images/rest/');

 

标签:image,多张,imageObj,imgItem,拼接,result,path,php,data
From: https://www.cnblogs.com/fyiyy/p/17710981.html

相关文章

  • DVWA靶场环境搭建+Phpstudy配置
    1、DVWA介绍在近些年网络安全的高速发展中,初学者已经很难找到一个网站进行渗透了,曾几何时,一个漏洞,一个工具就可以在网上找到很多有漏洞的网站去体验,当然渗透一个未经授权的系统是非法的。因此,为了能够较为真实地学习Web渗透的各种技术,就需要找一个专门用于学习的Web演练平台,人们......
  • PHP入门-搭建运行环境
    在系统装好后,推荐将电脑的命名一个言简意赅的短小名称,这样在Linuxshell或Windows命令行下,看着更舒服,特别是输入的内容较长时,效果会更明显。最近被安排接手PHP项目,由于没接触过,所以做个记录整理,便于以后查看。不管做什么开发,搭建环境是第一步。1. XMAPP 是Apache+MySQL+PHP+PE......
  • 【php基础】PHP表单验证03
    PHP获取表单·$_GET数组获取GET方式提交的内容·$_POST数组获取POST方式提交的内容·$_COOKIE数组获取COOKIE·$_REQUEST数组获取GET|POST|COOKIE 示例:1、GET数组获取GET方式提交的内容HTML表单:<!DOCTYPEhtml><html><head><title>GE......
  • 【php基础】正则表达式04
    1、正则表达式的介绍2、正则表达式的语法一、正则表达式的介绍正则表达式的介绍·正则表达式,又称规则表达式,通过一种特殊的语言来挑选符合条件的数据·在代码中简写,regex、regexp、RE·计算机科学的一个概念,通常被用来检索、替换那些符合某个模式(规则)的......
  • 【php基础】php连接mysql数据库及基本操作02
    一、php连接mysql数据库<?php$servername="localhost";$username="root";$password="root";$dbname="mysql";//创建连接$conn=newmysqli($servername,$username,$password,$dbname);//检测连接i......
  • apache下php获取不到Authorization
    主要情况为apache配置文件httd.conf缺少相关配置。在配置文件中找到IfModuledir_module标签,在其中添加SetEnvIfAuthorization.+HTTP_AUTHORIZATION=$0 <IfModuledir_module>DirectoryIndexindex.phpindex.htmlSetEnvIfAuthorization.+HTTP_AUTHORIZATION=......
  • PHP实现页面间的链接和背景图片设置
    在PHP中实现页面间的链接非常简单,你可以使用HTML的<a>标签来创建链接。下面是一个示例代码,当用户点击按钮后,将跳转到下一个页面:<!--第一个页面--><!DOCTYPEhtml><html><head><title>第一个页面</title></head><body><buttononclick="window.locati......
  • 从 getResult 原则请求创建 PHP 并行处理
    在PHP中并行处理可以采用多种方法。对于PHP8和Symfony6环境,以下是一些可能的选项:使用SymfonyProcess组件:SymfonyProcess组件提供了对进程的抽象和管理工具,可以方便地启动和管理并行进程。你可以使用该组件,将需要处理的数据拆分成多个小的任务,然后并行地执行这些任务。......
  • 跨平台的PHP开发IDE-PhpStorm 2023 mac+win版
    PhpStorm2023是一款专门为PHP开发人员设计的集成开发环境(IDE)。→→↓↓载PhpStorm2023mac/win它提供了丰富的功能,包括代码编辑、调试、版本控制、自动完成、代码检查、测试等,可以帮助开发人员更高效地编写和维护PHP代码。此外,它还支持多种框架,包括Symfony、Laravel、Yii、Zen......
  • CKEDITOR 展示word中复制的内容和多张图片
    从word中复制全部内容(包括文字、多图片),并在富文本框内展示(CKEDITOR)CKEDITOR.instances["editor"].on('instanceReady',function(elem){console.log(elem.editor.element);elem.editor.on("paste",function(e){console.log(e);......