Script para obtener imágenes en una carpeta con dimensiones impresas en un archivo .txt

Script para obtener imágenes en una carpeta con dimensiones impresas en un archivo .txt

Como dice el título, ¿existe un script para Win 7 para imprimir en un archivo .txt todas las imágenes (JPG, PNG, GIF, etc.) dentro de una carpeta junto con el "nombre de archivo" y la "dimensión de píxeles"?
Lo intenté diren la línea de comando pero solo muestra el nombre, el tamaño del archivo, etc.


Solución con ExifTool

En mi opinión, la mejor oferta, con el comando ya codificado en el nombre del archivo .exe, ¡es totalmente un script de arrastrar y soltar para usarlo donde quieras!

Actualizar
Para mayor comodidad, modifiqué ligeramente el nombre del archivo en línea del exe a este

ExifTool(-FileName -Imagesize -r -T -w+! %0finfo.txt -ext jpg --ext exe .).exe

De esta manera, reduje al mínimo la salida .txt a una sola línea por imagen ( -T) y agregué una opción recursiva ( -r) para que también pueda procesar subcarpetas.


Solución con ImageMagick

He colocado debajo mi solución con ImageMagick, es bastante rápida y simple, pero normalmente requiere la biblioteca instalada.

Respuesta1

UsandoExifHerramienta(ejecutable portátil renombrado aexiftool.exe):

exiftool -ImageSize -r .

AquíTamaño de la imagenes el nombre de la etiqueta que le interesa y se imprimiráAncho de imagen x Alto de imagen. El -rmodificador hace que procese archivos de forma recursiva en subdirectorios.

Costumbreformato de cadena de salidaes simple también. Por ejemplo:

exiftool -p "Image Name: \"$FileName\"$/Image Size: $ImageSize$/" -r .

En este caso, los nombres de las etiquetas están precedidos por $. $/imprime una nueva línea.

Nota: Los comandos anteriores deben escribirse en el símbolo del sistema. Para redirigir la salida a un archivo de texto, puede agregarlos > Details.txt.


Si simplemente desea ejecutar el programa y hacer que escriba un archivo de texto con los detalles relevantes de la imagen, puedecambiar el nombre del ejecutablecomo sigue:

ExifTool(-FileName -Imagesize -w+! %0fDetails.txt -ext gif --ext exe .).exe

Esto escribirá toda la salida de la consola ( -w) en un archivo llamadoDetalles.txten el directorio actual. En este caso, la salida consistirá en los nombres y tamaños de las imágenes de todos los GIF en el directorio actual. Más detalles sobre el -wparámetro, incluido el significado de y +, están disponibles en el enlace de documentación anterior.!%0f

Puedeincluirse procesarán más extensiones -ext jpg -ext png, etc., o elimínelas -ext gifpor completo para que lea todos los tipos de archivos admitidos (incluidos los que no sean imágenes y que quizás no desee).

--ext exese usa paraexcluirtodos los EXE (para que el ejecutable del programa no esté incluido en el informe).

-rPor supuesto, se puede agregar para permitir el procesamiento recursivo.

Haylotes¡Puedes hacer más con el programa dado lo ridículamente poderoso que es (y también extensible dado que la fuente completa de Perl está disponible gratuitamente)!

Respuesta2

Ok solución conImagenMagia, simple y rápido (pero normalmente requiere la biblioteca).

Abra la línea cmd en la carpeta que le interese ( Shift+ RightClickdentro de la ventana de su carpeta y seleccione "Abrir ventana de comando aquí"), luego en el símbolo del cmd use esto

identify -format "%f %wx%h\r" *.jpg > info.txt

Solicita %f filenamey %w widthtiene %h heightel formato "WIDTHxHEIGHT"

Más información aquíhttp://www.imagemagick.org/script/escape.php

Respuesta3

Hay unsecuencia de comandos de PowerShella continuación eso debería ser suficiente; simplemente cambie los directorios para lista y salida. Probé en Windows 8.1 y Windows PowerShellISE.

param( $folder = "E:\My Pictures", $outputFile = "E:\details.txt" )
$objShell = New-Object -ComObject Shell.Application
$fileList = @()
$attrList = @{}
$details = ( "Dimensions" )
$objFolder = $objShell.namespace($folder)
for ($attr = 0 ; $attr  -le 500; $attr++)
{
    $attrName = $objFolder.getDetailsOf($objFolder.items, $attr)
    if ( $attrName -and ( -not $attrList.Contains($attrName) ))
    {
        $attrList.add( $attrName, $attr )
    }
}
dir $folder -Recurse -Directory | ForEach-Object{
    $objFolder = $objShell.namespace($_.FullName)
    foreach($file in $objFolder.items())
    {
        foreach( $attr in $details)
        {
            $attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])
            if ( $attrValue )
            {
                Add-Member -InputObject $file -MemberType NoteProperty -Name $("A_" + $attr) -value $attrValue
            }
        }
        $fileList += $file
        $fileList.Count
    }
}
$fileList | Export-Csv $outputFile -Delimiter ','
$fileList | Format-Table

información relacionada