[ EDITAR # 1 por OP: Resulta que esta pregunta está bastante bien respondida por el creador / mantenedor de exiftool Phil Harvey en un hilo duplicado en el foro de ExifTool ]
[ EDITAR # 2 por OP: De ExifTool Preguntas frecuentes : No se garantiza que ExifTool elimine completamente los metadatos de un archivo al intentar eliminar todos los metadatos. Ver "Limitaciones del escritor".]
Me gustaría buscar en mis viejos discos duros fotos que no estén en mi disco de respaldo actual. Los formatos incluyen jpg, png, tif, etc., así como varios formatos sin formato (diferentes modelos y fabricantes de cámaras).
Solo estoy interesado en la unicidad de la imagen en sí y no en la unicidad debido a las diferencias en, por ejemplo, los valores de las etiquetas exif, la presencia / ausencia de una etiqueta exif en sí misma, miniaturas incrustadas, etc.
Aunque no espero encontrar ninguna corrupción / podredumbre de datos entre diferentes copias de imágenes idénticas, me gustaría detectar eso, así como las diferencias debido al cambio de tamaño y los cambios de color.
[ Editar # 3 por OP: Para aclarar: un pequeño porcentaje de falsos positivos es tolerable (se concluye que un archivo es único cuando no lo es) y los falsos negativos son altamente indeseables (se concluye erróneamente que un archivo es un duplicado). ]
Mi plan es identificar la unicidad basada en md5sums después de eliminar todos y cada uno de los metadatos.
¿Cómo puedo quitar los metadatos?
Será exiftool -all= <filename>
suficiente?
fuente
file
no podrá descubrir formatos de imagen RAW yfind
solo funcionará en extensiones (puede ser útil describir mejor lo que tiene)find $dir -type f -regextype posix-extended -regex ".*\.(jpg|png|<...>|cr2|raw|raf|orf)"
where<...>
significa un montón de otros sufijos.convert image.jpg - | md5sum
(ImageMagick) le dan sumas MD5 apropiadas.Respuestas:
jhead
tiene la capacidad de eliminar metadatos que no son imágenes de los archivos JPEG. La página del manual dice:fuente
Iría con ImageMagick para la mayoría de las imágenes. Esto se debe a que las diferentes implementaciones de la biblioteca producirán diferentes resultados comprimidos, ImageMagick puede realizar una unificación de compresión.
Los tipos comunes son fáciles porque el sistema operativo tiene bibliotecas para leerlos y escribirlos. Entonces:
Esto asegurará que tenga las imágenes escritas de la misma manera. Y luego puedes realizar:
Para los formatos RAW, creo que la única forma es hacer lo que Phil dice, y por lo tanto:
Y luego la suma de comprobación sería la misma. Solo necesita cruzar los dedos para que los formatos de imagen más exóticos se puedan crear con una sola implementación (o tener un formato de archivo rígido).
Descargo de responsabilidad : Esto funcionará para comparar las sumas de verificación entre ellos. Si almacena las sumas de verificación y luego vuelve a ejecutarlas
-strip
después de una actualizaciónzlib
olibjpeg
puede terminar con sumas de verificación completamente diferentes. Necesita construir las sumas de verificación para cada imagen cada vez. Dadas las preocupaciones sobre la calidad de la imagen, es aconsejable ejecutar esto solo una vez .fuente
-quality
), todas las apuestas están desactivadas.-strip
. Para ver esto, ejecuteexiftool -a -G1 -s <filename>
en archivos creados conmogrify -strip
yexiftool -all=
. Para confirmar, correexiftool -a -G1 -s <original-filename> | grep JFIF
. Las ejecuciones futuras del script de alguna manera tendrían que tener esto en cuenta si la versión JFIF fuera diferente.Con el
imagemagick
paquete y no solo para archivos JPEG , simplemente puede:Del manual :
Mucha más información y advertencias aquí .
Nota: Esto es similar a @grochmal pero mucho más directo y simple.
fuente
exiftool -all= *.jpg
a quitar datos jpg.Una posible solución que me vino a la mente. Evita el tema de los metadatos. Se supone que los archivos terminan con la imagen en sí, que todos los metadatos se encuentran al comienzo del archivo.
Vamos a referirnos a la unidad de respaldo actual como la unidad dorada.
Para imágenes en el disco de oro:
Para imágenes en los discos viejos :
La Clase P contendrá imágenes que se encuentran en la unidad de disco de oro, pero que tienen exifdatos diferentes, o tienen corrupción / podredumbre de datos en los bytes iniciales de la imagen.
Cuando termine, examine la CLASE P de forma interactiva y compárelos con sus compañeros en el disco de oro.
Ver EDITAR # 3 a OP.
La asignación a las CLASES U y D debe ser 100% precisa.
El tamaño de CLASE P depende del tamaño de fragmento M, ya que los primeros bytes M + N de un archivo casi seguro contienen algunos datos de imagen (y todos los metadatos)
fuente
Si las unidades antiguas contienen principalmente duplicados (incluidos los metadatos), utilice dos pasos para encontrar los únicos como se define en el OP (que considera que dos archivos son duplicados incluso si difieren en los metadatos):
Utilice md5sums de archivos intactos sin tirar para identificar qué archivos de las unidades antiguas son únicos (en este sentido alternativo) de la unidad de copia de seguridad actual, asignándolos a CLASE uU (sin tirar-Único) o CLASE D (upilcate). CLASE D será 100% precisa. CLASE uU debe ser pequeño (por supuesto) y contener una mezcla de verdaderos duplicados (en el sentido OP) y verdaderos únicos.
Al trabajar con el pequeño conjunto de archivos, es decir, manejable, en CLASS uU, use md5sums y varias técnicas de eliminación para diseñar un método de comparación de archivos que sea útil para los propósitos establecidos en OP.
fuente
Esto es un poco viejo, pero sí, exiftool funciona muy bien.
Mostrar metadatos de
Mostrar metedata para todos los archivos * .jpg
Nota: La extensión distingue entre mayúsculas y minúsculas .
Igual que el anterior, pero incluye subdirectorios.
Eliminar todos los metadatos
Eliminar todos los metadatos de todos los archivos * .jpg en el directorio actual
Igual que el anterior, pero incluye subdirectorios.
Eliminar todos los metadatos GPS de archivos * .jpg en el directorio actual
fuente