我有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);
?>
答案 0 :(得分: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()
希望这有帮助!
答案 1 :(得分: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
主要优点是,如果你的图像被更新,它就可以在没有重命名文件的中间步骤的情况下使用了。
答案 2 :(得分: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++;
}
}
答案 3 :(得分:0)
如果您确定转换文件的例程始终以相同的顺序命名结果图像 即左上角= 0001 ......右下= 0016
然后编写一个快速的CLI脚本来完成并重命名所有图像应该相当简单。
或者,如果您要再次使用相同的图像转换器,可能更容易制作您的image.php?x = 1&amp; y = 2脚本锻炼要服务的文件然后您不需要每次重命名你获得新图像的时间。
答案 4 :(得分:0)
- 使用您的图片(http://php.net/manual/de/function.readdir.php)
读取soure文件夹- 在“_”和“。”之间输入每个图像名称的一部分。
-parse it($ image_nr)为整数
- 如下:
$y = floor($image_nr/40);
$x = $image_nr%40;
最终使用新名称
将每个图像放在目标目录中答案 5 :(得分: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 ++;
}
}