 Questo script PHP che deve essere utilizzato da linea di comando, permette di analizzare una directory per riconoscere e “marcare” le immagini con orientamento verticale da quelle con orientamento orizzontale. In questo modo è possibile separare i due blocchi di file, per esempio per comporre una galleria fotografica omogenea nel layout.
Questo script PHP che deve essere utilizzato da linea di comando, permette di analizzare una directory per riconoscere e “marcare” le immagini con orientamento verticale da quelle con orientamento orizzontale. In questo modo è possibile separare i due blocchi di file, per esempio per comporre una galleria fotografica omogenea nel layout.
Lo script utilizza la funzione PHP getimagesize() per calcolare il rapporto fra altezza e larghezza di una immagine jpg. Se il rapporto è maggiore o uguale a 1 è verticale, altrimenti è orizzontale. (N.B.: le immagini quadrate risulteranno verticali…).
I parametri in ingresso sono 2. Il primo definisce il percorso della directory che contiene le immagini e il secondo indica se si vogliono rinominare i file o copiarli. Al nome dei file viene aggiunta una stringa “_H_” per indicare che l’immagine è orizzontale e “_V_” per le immagini ad orientamento verticale. Queste stringhe possono essere cambiate modificando i valori delle due costanti “PRE_H” e “PRE_V” alle righe 26 e 27 dello script.
Se lo script viene lanciato senza nessun parametro vengono analizzati i file della directory corrente e viene prodotto l’output dell’orientamento per ogni file e di come verrebero modificati i nomi dei file, senza però effettuare alcuna modifica.
Questo è il codice:
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 | #!/usr/bin/php
<?php
/*
 * sortimages.php
 * 
 * Copyright 2015 mario spada <spadamar@spadamar.com>
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 * 
 * 
 */
 
define("PRE_H","_H_");
define("PRE_V","_V_");
 
function getImgMode($filename) {
	$size = getimagesize($filename); 
	$width = $size[0]; 
	$height = $size[1]; 
	$aspect = $height / $width; 
	if ($aspect >= 1) $mode = "vertical"; 
	else $mode = "horizontal";
return $mode;
}  
 
$directory = empty($argv[1]) ? "./" : rtrim($argv[1], '/') . '/';
if (!file_exists($directory))
	die($directory." directory does not exist!");
 
$renameFls = empty($argv[2]) ? 0 : $argv[2];
 
if (!empty($renameFls)){
	if($renameFls == 'rename') {
		$renameFls = 1;
	} elseif($renameFls == 'copy') {
		$renameFls = 2;
	} else {
		$renameFls = 0;
	}
}
 
$images = glob($directory."*.{jpg,JPG,jpeg}", GLOB_BRACE);
 
foreach($images as $image) {
	$path_parts = pathinfo($image);
	$newFln = "";
	$action = " It will change in: ";
	$imgLayout = getImgMode($image);
	if($imgLayout=='horizontal') {
	  $newFln = $directory.PRE_H.$path_parts['filename'].".".$path_parts['extension'];
	} else {
	  $newFln = $directory.PRE_V.$path_parts['filename'].".".$path_parts['extension'];
	}
	if ( $renameFls == 1 ) {
		$res = @rename ( $image , $newFln );
		$action = !$res ? " Error while renaming with: " : " Renamed with: ";
	}
	if ( $renameFls == 2 ) {
		$res = @copy ( $image , $newFln );
		$action = !$res ? " Error while copying in: " : " Copied in: ";
	} 
	echo "File: ".$image." is ".$imgLayout.". ".$action.$newFln."\n";
}
 
?> | 
#!/usr/bin/php
<?php
/*
 * sortimages.php
 * 
 * Copyright 2015 mario spada <spadamar@spadamar.com>
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 * 
 * 
 */  define("PRE_H","_H_");
define("PRE_V","_V_");  function getImgMode($filename) {
 $size = getimagesize($filename); 
 $width = $size[0]; 
 $height = $size[1]; 
 $aspect = $height / $width; 
 if ($aspect >= 1) $mode = "vertical"; 
 else $mode = "horizontal";
return $mode;
}  $directory = empty($argv[1]) ? "./" : rtrim($argv[1], '/') . '/';
if (!file_exists($directory))
 die($directory." directory does not exist!");  $renameFls = empty($argv[2]) ? 0 : $argv[2];  if (!empty($renameFls)){
 if($renameFls == 'rename') {
 $renameFls = 1;
 } elseif($renameFls == 'copy') {
 $renameFls = 2;
 } else {
 $renameFls = 0;
 }
}  $images = glob($directory."*.{jpg,JPG,jpeg}", GLOB_BRACE);  foreach($images as $image) {
 $path_parts = pathinfo($image);
 $newFln = "";
 $action = " It will change in: ";
 $imgLayout = getImgMode($image);
 if($imgLayout=='horizontal') {
 $newFln = $directory.PRE_H.$path_parts['filename'].".".$path_parts['extension'];
 } else {
 $newFln = $directory.PRE_V.$path_parts['filename'].".".$path_parts['extension'];
 }
 if ( $renameFls == 1 ) {
 $res = @rename ( $image , $newFln );
 $action = !$res ? " Error while renaming with: " : " Renamed with: ";
 }
 if ( $renameFls == 2 ) {
 $res = @copy ( $image , $newFln );
 $action = !$res ? " Error while copying in: " : " Copied in: ";
 } 
 echo "File: ".$image." is ".$imgLayout.". ".$action.$newFln."\n";
}  ?>
Un esempio di utilizzo in ambiente Linux rinominando i file jpg della directory “tmp” nella propria home (dove ho messo 10 file verticali e 10 orizzontali di prova):
~$ ./sortimages.php ~/tmp rename
e questo è l’output:
 File: /home/mario/tmp/IMG_5546.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5546.JPG
 File: /home/mario/tmp/IMG_5547.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5547.JPG
 File: /home/mario/tmp/IMG_5549.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5549.JPG
 File: /home/mario/tmp/IMG_5551.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5551.JPG
 File: /home/mario/tmp/IMG_5552.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5552.JPG
 File: /home/mario/tmp/IMG_5553.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5553.JPG
 File: /home/mario/tmp/IMG_5554.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5554.JPG
 File: /home/mario/tmp/IMG_5556.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5556.JPG
 File: /home/mario/tmp/IMG_5558.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5558.JPG
 File: /home/mario/tmp/IMG_5559.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5559.JPG
 File: /home/mario/tmp/IMG_5560.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5560.JPG
 File: /home/mario/tmp/IMG_5561.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5561.JPG
 File: /home/mario/tmp/IMG_5562.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5562.JPG
 File: /home/mario/tmp/IMG_5563.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5563.JPG
 File: /home/mario/tmp/IMG_5564.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5564.JPG
 File: /home/mario/tmp/IMG_5565.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5565.JPG
 File: /home/mario/tmp/IMG_5566.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5566.JPG
 File: /home/mario/tmp/IMG_5571.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5571.JPG
 File: /home/mario/tmp/IMG_5575.JPG is vertical.  Renamed with: /home/mario/tmp/_V_IMG_5575.JPG
 File: /home/mario/tmp/IMG_5576.JPG is horizontal.  Renamed with: /home/mario/tmp/_H_IMG_5576.JPG
 
Potete scaricare il file in formato compresso .zip qui