[英]pass files through php with rename
我有1600张图片,每张256像素。 这些图像已经在Photoshop中从10240像素x 10240像素的图像切片到瓷砖。 问题是,photoshop将它们命名为image_0001.png,image_0002.png ......
我想将这些重命名为可用的文件名,例如image_x_y.png x是该行中的tile号,y是该列中的tile号...
和想法如何我可以自动重命名这些,或者如果不是我如何通过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);
?>
您可以打开包含文件的目录,然后创建一个循环来访问所有图像并重命名它们,如:
<?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()
希望这可以帮助!
您不必重命名它们,只需在每次访问时计算“线性ID”。
所以,假设你有一个40 * 40的文件集,在image.php你会有类似的东西
$fileid = $x * 40 + y;
$filename = sprintf("image_%04d.png",$fileid);
// send the file with name $filename
你需要什么样的公式取决于切片的方式,也可以是$y * 40 + x
主要优点是,如果您的图像被更新,它将可以在没有重命名文件的中间步骤的情况下使用。
尝试这个 :
$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++;
}
}
如果您确定转换文件的例程总是以相同的顺序命名结果图像,即左上角= 0001 ......右下= 0016
然后编写一个快速的CLI脚本来完成并重命名所有图像应该相当简单。
或者,如果你要再次使用相同的图像转换器,那么制作你的image.php可能更简单吗?x = 1&y = 2脚本锻炼要服务的文件然后你每次获得新图像时都不需要重命名。
- 使用您的图像读取soure文件夹( http://php.net/manual/de/function.readdir.php )
- 在“_”和“。”之间输入每个图像名称的一部分。
-parse它($ image_nr)为整数
-请执行下列操作:
$y = floor($image_nr/40);
$x = $image_nr%40;
最终使用新名称将每个图像放在目标目录中
我没有测试过,但您可以尝试使用它:
$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 ++;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.