首页 > 编程语言 >假设每次截图有个命令 shotimg ,每次只能处理最大1w高 1w宽的图,现在有一张4w*4w的图需要截图,php递归怎么写

假设每次截图有个命令 shotimg ,每次只能处理最大1w高 1w宽的图,现在有一张4w*4w的图需要截图,php递归怎么写

时间:2024-05-07 09:33:31浏览次数:18  
标签:分割 截图 1w 递归 4w targetSize

为了让这个函数更加灵活以支持任意大小的图片和不同的分割大小,我们可以将函数的参数稍作调整,使其接受目标分割尺寸(targetSize)作为参数,而不是硬编码为10000。同时,我们可以使用整数除法(//)来确保分割的尺寸是整数,并且使用模数运算符(%)来检查是否需要进行最后一次不完全的分割。

以下是修改后的函数:

function splitAndProcessImage($imagePath, $outputDir, $startX = 0, $startY = 0, $width, $height, $targetSize) {
    // 检查当前区域是否小于或等于目标分割尺寸
    if ($width <= $targetSize && $height <= $targetSize) {
        // 处理这个区域
        // 调用shotimg命令或其他截图逻辑
        // 示例:shell_exec("shotimg --region {$startX},{$startY},{$width},{$height} {$imagePath} {$outputDir}/output_{$startX}_{$startY}_{$width}_{$height}.png");
        echo "Processing region {$startX},{$startY},{$width},{$height}\n";
    } else {
        // 计算水平和垂直方向上的分割数量
        $horizontalSplits = ceil($width / $targetSize);
        $verticalSplits = ceil($height / $targetSize);

        // 遍历所有子区域
        for ($i = 0; $i < $horizontalSplits; $i++) {
            $subWidth = ($i == $horizontalSplits - 1) ? $width - $i * $targetSize : $targetSize;
            for ($j = 0; $j < $verticalSplits; $j++) {
                $subHeight = ($j == $verticalSplits - 1) ? $height - $j * $targetSize : $targetSize;

                $subStartX = $startX + $i * $targetSize;
                $subStartY = $startY + $j * $targetSize;

                // 递归调用处理子区域
                splitAndProcessImage($imagePath, $outputDir, $subStartX, $subStartY, $subWidth, $subHeight, $targetSize);
            }
        }
    }
}

// 使用示例
$imagePath = 'path/to/your/large/image.png';
$outputDir = 'path/to/output/directory/';
$targetSize = 10000; // 你可以根据需要设置这个值
$width = 60000; // 假设图片宽度为6w
$height = 60000; // 假设图片高度为6w
splitAndProcessImage($imagePath, $outputDir, 0, 0, $width, $height, $targetSize);

在这个修改后的版本中,函数会递归地将图片分割成多个不超过$targetSize的小块,并处理这些小块。注意,在计算子区域的宽度和高度时,我们使用了三元运算符来检查是否是最后一次分割(即最后一个子区域),以确保能够处理那些可能小于$targetSize的剩余部分。

来自文心一言的回答

标签:分割,截图,1w,递归,4w,targetSize
From: https://www.cnblogs.com/anniu1122/p/18176524

相关文章

  • .NET服务端网页截图
    一.引入PuppeteerSharpnuget包;二.服务端网页截图方法publicclassWebPageUtil{///<summary>///服务端网页截图///</summary>///<paramname="url">网页URL</param>///<paramname="sleepS......
  • 厉害了!这个工具帮助你生成朋友圈转发截图
    大家好,我是Java陈序员。在日常的工作生活中,我们经常会遇到应付各类强制要求转发朋友圈的行为,或者是朋友圈集赞的行为。今天,给大家介绍一个工具,可以帮助你生成朋友圈转发截图。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项......
  • 性能测试——压测工具locust——初步分析截图
           ......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-38-如何截图-下篇
    1.简介这个系列的文章也讲解和分享了差不多三分之一吧,突然有小伙伴或者童鞋们问道playwright有没有截图的方法。答案当然是:肯定有的。宏哥回过头来看看确实这个非常基础的知识点还没有讲解和分享。那么在这个契机下就把它插队分享和讲解一下。Playwright提供了一个截屏的API:page.......
  • Random 项目总结 -06 定时器、 随机数,截图,生成WORD报告 (result完整)
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Xml;usingMsword=Microsoft.Office.......
  • GPG4win 使用笔记
    简介:Gpg4win是一套文件或email加密解密的安全方案。Gpg4win-asecuresolutionforfileandemailencryption.Gpg4win(GNUPrivacyGuardforWindows)isFreeSoftwareandcanbeinstalledwithjustafewmouseclicks安装:首先,从GPG4win官方网站下载安装程序 ht......
  • 【GUI软件】小红书按关键词采集笔记详情,支持多个关键词,含笔记正文、转评赞藏等,爬了102
    一、背景介绍1.1爬取目标熟悉我的小伙伴都了解,我之前开发过2款软件:【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!【GUI软件】小红书详情数据批量采集,含笔记内容、转评赞藏等,支持多笔记同时采集!现在介绍的这个软件,相当于以上2个软件的结合版,即根据关键词爬取......
  • linux puppeteer 截图提示缺少chrome-linux/chrome error while loading shared libra
    puppeteer/.local-chromium/linux-1002410/chrome-linux/chrome:errorwhileloadingsharedlibraries:libXdamage.so.1:cannotopensharedobjectfile:Nosuchfileordirectory按照错误对照进行安装执行,缺啥安啥......
  • C# 截图并保存为图片
    在winform开发中,有时会用到截图并保存为图片的时候,这里列了三种保存图片的可能情况。将窗体截图保存成图片的方式是:Bitmapbit=newBitmap(this.Width,this.Height);//实例化一个和窗体一样大的bitmapGraphicsg=Graphics.FromImage(bit);g.CompositingQuality=Compos......
  • 实用指南:使用Pytest Allure测试框架添加用例失败截图
    前言在我们进行软件测试的过程中,我们提交的测试报告缺少一些详细的附件,尤其是用例失败时候的截图,更方便我们去查看具体的情况,我们在进行测试时会使用allure+pytest来生成测试报告,本文我们就来介绍一下在allure测试报告中添加用例失败截图。钩子函数准备我们可以使用pytest_run......