2013-07-09 3 views
1

У меня 1600 изображений, каждый 256 пикселей. Эти изображения были нарезаны в фотошопе с изображения размером 10240 пикселей x 10240 пикселей на плитки. Проблема в том, что фотошоп назвал их image_0001.png, image_0002.png ...передать файлы через php с переименованием

Я хотел бы переименовать их в пригодное для использования имя файла, например image_x_y.png x, являющееся номером плитки в этой строке, y является номером плитки в этой колонке ...

И идеи, как я могу автоматизировать их переименование, или если не могу передать эти изображения через php, так что я могу получить доступ к image.php? x = 2 & y = 1 ect ...

заранее спасибо

EDIT: у меня нет разрешения, чтобы ответить на мой собственный вопрос, но используется это как переименование будет требоваться при каждом обновлении. Не идеально ...

<?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

Я думаю, что изображение_0001 - верхняя левая плитка. Является ли image_0002 «правильным» 0001 или «ниже»? – apartridge

ответ

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

Вам не нужно переименовывать их, просто вычислить «линейный идентификатор» для каждого доступа.

так, предполагая, что у вас есть 40 * 40 набор файлов, в image.php вы бы что-то вроде

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

Что формула вам нужно, зависит от того, как разрезали, может также быть $y * 40 + x

Главное преимущество заключается в том, что при обновлении изображения оно будет готово к использованию без промежуточного этапа переименования файлов.

0

Если вы точно знаете, что рутина, которая конвертируется ваши файлы всегда называется полученные изображения в том же порядке т.е. верхний левый = 0001 ...... Внизу справа = 0016

Тогда он должен быть достаточно просто написать быстрый скрипт CLI, чтобы просмотреть и переименовать все ваши изображения.

Альтернативно, если вы собираетесь использовать тот же самый конвертер изображений снова много раз, может быть проще сделать ваш image.php? X = 1 & y = 2 скрипт разборки, какой файл нужно обслуживать, тогда вам не нужно будет переименовывать каждый раз, когда вы получаете новые изображения.

0

-Распознать папку Souré с изображениями (http://php.net/manual/de/function.readdir.php)

-Положите части каждого ImageName между «_» и»."

-parse него ($ image_nr) как целое

-do следующее:

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

, наконец поместить каждое изображение в каталоге назначения с новым именем

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 ++; 
    } 
} 
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++; 
    } 
} 
Смежные вопросы