1

我有 1600 张图片,每张 256 像素。这些图像已在 Photoshop 中从 10240 像素 x 10240 像素的图像切片到图块中。问题是,Photoshop 已将它们命名为 image_0001.png、image_0002.png...

我想将它们重命名为可用的文件名,例如 image_x_y.png x 是该行中的图块编号,y 是该列中的图块编号...

以及如何自动重命名这些图像的想法,或者如果不是,我如何通过 php 传递这些图像,以便我可以访问 image.php?x=2&y=1 等...

提前致谢

编辑:我无权回答我自己的问题,但是,每次更新都需要重命名。不理想...

<?php
$x=$_GET['x'];
$y=$_GET['y'];
$image=(($y-1)*40)+$x;
if ($image<10){
$image="0".$image;
}
$url="tiles/" . $image . ".jpg";

header("Location:" . $url);
?>
4

6 回答 6

1

您不必重命名它们,只需计算每次访问的“线性 ID”。

所以,假设你有一组 40 * 40 的文件,在 image.php 你会有类似的东西

$fileid = $x * 40 + y;
$filename = sprintf("image_%04d.png",$fileid);
// send the file with name $filename

你需要什么配方取决于它是如何切片的,也可以是$y * 40 + x

主要优点是如果您的图像被更新,它将可以使用,而无需重命名文件的中间步骤。

于 2013-07-09T10:55:56.107 回答
1

您可以打开包含文件的目录,然后创建一个循环来访问所有图像并重命名它们,例如:

<?php

if ($handle = opendir('/path/to/image/directory')) {
    while (false !== ($fileName = readdir($handle))) {
        //do the renaming here
        //$newName = 
        rename($fileName, $newName);
    }
    closedir($handle);
}
?>

有用的功能:

rename(), readdir(), readdir(), str_replace(),preg_replace()

希望这可以帮助!

于 2013-07-09T10:55:34.597 回答
1

尝试这个 :

$dir = "your_dir";
$i = 0;
$j = 0;
$col = 5;
foreach(glob($dir . '/*') as $file) 
{ 
    rename($file, "image"."_".$j."_".$i);
    $i++;
    if($i % $col == 0)
    {
        $j++;
    }
} 
于 2013-07-09T11:06:48.013 回答
0

如果您确定转换文件的例程始终以相同的顺序命名结果图像,即左上角 = 0001 ...... 右下角 = 0016

然后编写一个快速的 CLI 脚本来遍历并重命名所有图像应该相当简单。

或者,如果您要多次使用相同的图像转换器,那么让您的 image.php?x=1&y=2 脚本锻炼要提供的文件可能会更简单,那么您每次获得新图像时都不需要重命名.

于 2013-07-09T10:59:11.303 回答
0

- 使用您的图像读取源文件夹(http://php.net/manual/de/function.readdir.php

- 将每个图像名的部分放在“_”和“.”之间

- 将其 ($image_nr) 解析为整数

-请执行下列操作:

$y = floor($image_nr/40);
$x = $image_nr%40;

最后将每个图像以新名称放在目标目录中

于 2013-07-09T10:59:31.053 回答
0

我还没有测试过,但你可以尝试使用这个:

$imagesInARow = 10240/256; //=> 40
$rows = 1600 / $imagesInARow; //=> 40

$imageIndex = 1;
for($i = 1; $i <= $rows; $i++) { // row iteration
    for($j = 1; $j <= $imagesInARow; $j++) { // columns iteration
        rename('image_'. str_pad($imageIndex, 4, '0', STR_PAD_LEFT).'.png',
               "image_{$i}_{$j}.png");
        $imageIndex ++;
    }
}
于 2013-07-09T11:06:21.110 回答