jueves, 23 de enero de 2014

[ Shell ] Como ver los exif de una imagen

Exchangeable image file format o Exif gracias a esto podemos ver los metadatos de las imágenes,tales como tamaño,fecha hasta la localización.

De esto ya hemos hablado en alguna ocasión,de los metadatos pero los de los mp3,id3tags, en esta ocasión hablamos de Exif para las imágenes:


Mas informacion

Bien se o pienso que existen muchas herramientas para hacer esto desde la shell de linux,pero  yo cree un script para hacer esto:

Veamos:

Primero instalamos las dependencias:

sudo cpan Data::Dumper

sudo cpan Image::EXIF

Ahora bajamos el script:

#!/usr/bin/env perl
use strict;
use Image::EXIF;
use Data::Dumper;
use warnings;
use feature qw { switch say};
my ($shell,$imagen,$prompt_exif,$exif,$directorio) = ("","","exif> ",undef,"");
# Shell
do {
$prompt_exif = "exif ($imagen)> " if ($imagen);
print $prompt_exif;
given ($shell) {
when (/^use/) {
define_imagen($shell);
}
when ("dump") {
dumpear() if ($imagen);
}
when ("imagen") {
ver_imagen() if ($imagen);
}
when ("camara") {
ver_camara() if ($imagen);
}
when ("ver") {
ver() if ($imagen);
}
when (/^cd/) {
cambiar_directorio($shell);
}
when ("help") {
help();
}
when (/^ls/) {
ls($shell);
}
when ("exit") {
say "";
exit();
}
}
} while (chomp($shell = <STDIN>));
sub cambiar_directorio {
say "";
$directorio = $_[0];
$directorio =~ s/^cd//;
$directorio = trim($directorio);
if (-e $directorio) {
chdir($directorio)
} else {
say "No existe $directorio";
}
}
sub ver {
system ("xdg-open "."'".$imagen."'"." &");
}
sub dumpear {
say "";
my $all = $exif->get_all_info();
print $exif->error ? $exif->errstr : Dumper($all);
say "Press enter";
}
sub help {
say "";
say "Uso :";
say "help <Muestra este menu>\n";
say "exit <Salir>\n";
say "ls <Lista las imagenes disponibles>\n";
say " -d <Lista los dirctorios disponibles>";
say "cd dir <Cambia de directorio>\n";
say "use imagen <Usamos nueva imagen>\n";
say "dump <ver toda la informacion>\n";
say "imagen <Muestra informacion de la imagen>\n";
say "camara <Muestra informacion de la camara>\n";
say "ver <Abre imagen en visor>\n";
say "Press enter";
}
sub ver_imagen {
say "";
my $imagen_info = $exif->get_image_info();
if ($imagen_info) {
foreach (keys $imagen_info) {
print $_ . " : " . $imagen_info->{$_} . "\n";
}
} else {
say "Sin datos";
}
say "Press enter";
}
sub ver_camara {
say "";
my $camara_info = $exif->get_camera_info();
if ($camara_info) {
foreach (keys $camara_info) {
print $_ . " : " . $camara_info->{$_} . "\n";
}
} else {
say "Sin datos";
}
say "Press enter";
}
sub ls {
say "";
my $comando = shift;
if($comando =~ /-[d]$/) {
directorios();
} else {
archivos();
}
}
sub directorios {
my $dir = ".";
opendir(my $recorrer,$dir) || die "Error $! \n";
while (readdir $recorrer) {
if (-d $dir . "/" . $_) {
if ($_ !~ /^\./) {
say $_;
}
}
}
closedir $recorrer;
say "Press enter";
}
sub archivos {
my $dir = ".";
opendir(my $recorrer, $dir) || die "Error :( $! \n";
while(readdir $recorrer){
if (-f $dir . "/" . $_) {
given ($_) {
when (/.*jpg/) {
say $_;
}
when (/.*jpeg/) {
say $_;
}
}
}
}
closedir $recorrer;
say "Press enter";
}
sub define_imagen {
say "";
$imagen = $_[0];
$imagen =~ s/^use//;
$imagen = trim($imagen);
if (-e $imagen) {
$exif = new Image::EXIF;
$exif->file_name($imagen);
} else {
$imagen = "";
say "No existe el archivo";
}
say "Press enter";
}
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
=head LICENSE
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Library General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option) any
later version.
=cut
view raw gistfile1.pl hosted with ❤ by GitHub


Creamos un archivo y pegamos el script en perl,por ejemplo:

vim exif_data.pl


Ahora vamos a moverlo a ejecutarlo así:

perl  exif_data.pl

o así:

chmod +x exif_data.pl

y

./exif_data.pl

Como ven es una shell,asi que solo escriben help:


Vemos las opciones y por ejemplo usamos:

ls

use imagen

imagen



Eso es todo,después añado mas funciones :D

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.