wyrihaximus/tile-stitcher

🗺️ 瓦片拼图工具

dev-main 2024-09-06 05:43 UTC

README

Continuous Integration Latest Stable Version Total Downloads Type Coverage License

安装

要使用 Composer 安装,请使用以下命令,它将自动检测最新版本并将其与 ^ 绑定。

composer require wyrihaximus/tile-stitcher

使用方法

拼图工具需要两个东西

  • 瓦片尺寸,它假设它们都是相同的大小
  • 要拼合的瓦片文件列表
<?php

declare(strict_types=1);

use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\ImageManager;
use WyriHaximus\TileStitcher\Coordinate;
use WyriHaximus\TileStitcher\Dimensions;
use WyriHaximus\TileStitcher\FileLoader;
use WyriHaximus\TileStitcher\Stitcher;
use WyriHaximus\TileStitcher\Tile;

$tiles = [
    new Tile(
        new Coordinate(69, 69),
        new FileLoader('map/69_69.png'),
    ),
    new Tile(
        new Coordinate(70, 69),
        new FileLoader('map/70_69.png'),
    ),
];

$stitcher = new Stitcher(
    new ImageManager(
        new Driver(),
    ),
);

$image = $stitcher->stitch(
    'image/png',
    Map::calculate(
        new Dimensions(512, 512),
        ...$tiles,
    ),
);

file_put_contents('output/two_tile.png', $image);

结果

Two tile stitched image

高级

加载器

这个包的主要目标是取瓦片并将它们拼合成一个,因此所有与I/O相关的操作都没有在这个包中。然而,我们不能忽视这样一个事实,我们需要从某处加载瓦片图像。由于某些地图可能非常大,因此我们包含了 LoaderInterface 来执行读取I/O。这个包中包含了一个 FileLoader,以提供最基本实现。(并且,嗯,不发布一个完全功能的包 😅。)

例如,这是一个使用 react/filesystem 的实现

use React\Filesystem\Node\FileInterface;

use function React\Async\await;

final readonly class ReactFileLoader implements LoaderInterface
{
    public function __construct(private FileInterface $file)
    {
    }

    public function load(): string
    {
        return await($this->file->getContents());
    }
}

这是一个使用 Flysystem 解锁S3和一系列不同存储系统的示例

use League\Flysystem\Filesystem;

final readonly class FLysystemFileLoader implements LoaderInterface
{
    public function __construct(private Filesystem $filesystem, private string $path)
    {
    }

    public function load(): string
    {
        return $this->filesystem->read($this->path);
    }
}

待办事项

  • Map::calculateMap 方法以计算结果地图图像的大小
  • Switcher::stitch 方法以将 Map 拼合成图像
  • 从渲染输出参数中拾取所需的图像格式,现在仅为PNG
  • 支持指向目录并使用可调用来解析坐标拾取所有图像
  • 切换到抽象层进行图像操作
  • 通过提供加载器接口并以MIME类型输出结果图像来减少此包中的直接I/O
  • 自动调整瓦片大小以符合所需的瓦片大小

许可

MIT 许可证 (MIT)

版权所有 (c) 2024 Cees-Jan Kiewiet

特此授予任何获得此软件及其相关文档文件(以下简称“软件”)副本的任何人免费使用软件的权利,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许获得软件的人进行上述操作,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的副本或主要部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,源于、因之或与此软件或软件的使用或其他交易有关。