Limpando metadata dos nosos arquivos de imaxes
Usaremos imagemagick un conxunto de ferramentas pra a manipulación dos arquivos de imaxes moi útiles.
Neste caso se usará “mogrify” que permite modificar os metadatos das imaxes.
Instalación
En fedora:
sudo dnf install imagemagick
En arch:
sudo pacman -S imagemagick
En debian:
sudo apt-get update && apt-get install imagemagick
Qué son os metadatos ?
Os metadatos por definición son datos que se definen a si mesmos, no caso dun arquivo de imaxe son datos acerca da información que conteñen. Como por exemplo a xeoposición de onde se tomou a imaxe, esta pode ser unha información útil, mais se a puxeran enriba da imaxe estropearía a propia imaxe, polo que se engade nestos campos.
Estos campos se poden crear “novos” sen seguir un estándar, como si quixeramos engadir “fase luar na que se tomou a imaxe”, esto o teriamos que programar na aplicación que toma a imaxe, mais é un exemplo.
Como consultar os metadatos dunha imaxe?
Esto pódese consultar cunha ferramenta do paquete imagemagick, chamada “identify”.
Tomamos como exemplo esta imaxe, nome do arquivo “img_0031.jpg”:
Vendo os metadatos con identify
$ identify -verbose IMG_0031.jpg
Image: IMG_0031.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Class: DirectClass
Geometry: 1536x2048+0+0
Resolution: 72x72
Print size: 21.3333x28.4444
Units: PixelsPerInch
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
min: 0 (0)
max: 255 (1)
mean: 97.6666 (0.383006)
standard deviation: 50.6356 (0.198571)
kurtosis: 0.864953
skewness: 0.640492
Green:
min: 0 (0)
max: 216 (0.847059)
mean: 132.048 (0.517836)
standard deviation: 50.7752 (0.199118)
kurtosis: 1.12109
skewness: -1.32039
Blue:
min: 0 (0)
max: 233 (0.913725)
mean: 157.405 (0.617275)
standard deviation: 56.0386 (0.219759)
kurtosis: 1.43892
skewness: -1.58746
Image statistics:
Overall:
min: 0 (0)
max: 255 (1)
mean: 129.04 (0.506039)
standard deviation: 52.5433 (0.206052)
kurtosis: 0.691985
skewness: -0.753495
Rendering intent: Perceptual
Gamma: 0.454545
Chromaticity:
red primary: (0.64,0.33)
green primary: (0.3,0.6)
blue primary: (0.15,0.06)
white point: (0.3127,0.329)
Background color: white
Border color: srgb(223,223,223)
Matte color: grey74
Transparent color: black
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 1536x2048+0+0
Dispose: Undefined
Iterations: 0
Compression: JPEG
Quality: 85
Orientation: Undefined
Properties:
date:create: 2014-09-07T15:50:52+02:00
date:modify: 2014-09-07T13:46:40+02:00
exif:ColorSpace: 1
exif:ComponentsConfiguration: 1, 2, 3, 0
exif:Compression: 6
exif:DateTimeDigitized: 2002:12:08 12:00:00
exif:DateTimeOriginal: 2014:09:07 15:46:37
exif:ExifImageLength: 2048
exif:ExifImageWidth: 1536
exif:ExifOffset: 130
exif:ExifVersion: 48, 50, 50, 48
exif:FlashPixVersion: 48, 49, 48, 48
exif:FocalLength: 431/100
exif:InteroperabilityIndex: R98
exif:InteroperabilityOffset: 316
exif:InteroperabilityVersion: 48, 49, 48, 48
exif:ISOSpeedRatings: 0
exif:JPEGInterchangeFormat: 440
exif:JPEGInterchangeFormatLength: 24849
exif:Make: QCOM-AA
exif:Model: QCAM-AA
exif:ResolutionUnit: 2
exif:thumbnail:ResolutionUnit: 2
exif:thumbnail:XResolution: 72/1
exif:thumbnail:YResolution: 72/1
exif:XResolution: 72/1
exif:YCbCrPositioning: 1
exif:YResolution: 72/1
jpeg:colorspace: 2
jpeg:sampling-factor: 2x2,1x1,1x1
signature: ef6f2d0c7d691c2f9b72354b1bf117681c87ac3a9f2276e464864d3c25dcb577
Profiles:
Profile-exif: 25295 bytes
Artifacts:
filename: IMG_0031.jpg
verbose: true
Tainted: False
Filesize: 259KB
Number pixels: 3.146M
Pixels per second: 52.43MB
User time: 0.060u
Elapsed time: 0:01.060
Version: ImageMagick 6.8.6-3 2014-04-08 Q16 http://www.imagemagick.org
Vendo a metadata de maneira gráfica con gwenview
Abrimos a imaxe co gwenview e dámoslle a “mais” na columna da esquerda, na xanela que aparece elexímolos campos que queremos ver da imaxe, estos estarán dispoñibles pra marcar se a imaxe dispón deles.
O peso da imaxen antes é de 256K:
$ du -h IMG_0031.jpg
256K IMG_0031.jpg
Limpando os metadatos da imaxe
Copiei a imaxe e a copia lle chamei “IMG_0031_tratado.jpg”.
Aplico o comando pra limpalos metadatos da imaxe:
$ mogrify -strip IMG_0031_tratado.jpg
Este sería o resultado o arquivo sen modificar e a súa copia cos metadatos eliminados:
$ du -ha
256K ./IMG_0031.jpg
208K ./IMG_0031_tratado.jpg
464K .
Observamos unha reducción de 48 KiB só nesa imaxe, mais se houbera sido tomada por outro teléfono móbil ou cámara dixital, seguramente gañaría máis espazo, xa que soen poñer moita información inecesaria pra o usuario, unha vez fixera a proba cunhas imaxes tomadas por un “nokia express music” ( seguramente o modelo sexa do 2005 ou por ahí ), e as imaxes presentaban moita información nos metadatos, como modelo e marca do móbil no que se sacou a imaxe.
Agora vemos a información metadata que amosa da imaxe tratada:
$ identify -verbose IMG_0031_tratado.jpg
Image: IMG_0031_tratado.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Class: DirectClass
Geometry: 1536x2048+0+0
Resolution: 72x72
Print size: 21.3333x28.4444
Units: PixelsPerInch
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
min: 0 (0)
max: 255 (1)
mean: 97.6667 (0.383007)
standard deviation: 50.6355 (0.198571)
kurtosis: 0.8651
skewness: 0.640484
Green:
min: 0 (0)
max: 216 (0.847059)
mean: 132.048 (0.517836)
standard deviation: 50.7751 (0.199118)
kurtosis: 1.12084
skewness: -1.32032
Blue:
min: 0 (0)
max: 233 (0.913725)
mean: 157.406 (0.617277)
standard deviation: 56.032 (0.219733)
kurtosis: 1.43918
skewness: -1.58741
Image statistics:
Overall:
min: 0 (0)
max: 255 (1)
mean: 129.04 (0.50604)
standard deviation: 52.5409 (0.206043)
kurtosis: 0.692225
skewness: -0.75347
Rendering intent: Perceptual
Gamma: 0.454545
Chromaticity:
red primary: (0.64,0.33)
green primary: (0.3,0.6)
blue primary: (0.15,0.06)
white point: (0.3127,0.329)
Background color: white
Border color: srgb(223,223,223)
Matte color: grey74
Transparent color: black
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 1536x2048+0+0
Dispose: Undefined
Iterations: 0
Compression: JPEG
Quality: 85
Orientation: Undefined
Properties:
date:create: 2014-09-07T15:58:10+02:00
date:modify: 2014-09-07T15:58:10+02:00
jpeg:colorspace: 2
jpeg:sampling-factor: 2x2,1x1,1x1
signature: 64e2d2752edc3656e059b092f0f676205be66af53975699a0755d7eff4ca4307
Artifacts:
filename: IMG_0031_tratado.jpg
verbose: true
Tainted: False
Filesize: 213KB
Number pixels: 3.146M
Pixels per second: 39.32MB
User time: 0.070u
Elapsed time: 0:01.080
Version: ImageMagick 6.8.6-3 2014-04-08 Q16 http://www.imagemagick.org
Bueno en total gañamos como 48KiB de espazo libre, ¿Pouco? quizáis, mais esta imaxe tratada xa non podrá revelar “moitos datos” sobre nos, que en programas como gwenview se poden ver, mais moitos usuari@s non sabe que esta información queda rexistrada nen saben que existe.
Agora ben… Qué pasaría se aplico o “mogrify -strip” a un directorio cuns 4 “e pico” GiB de imaxes? Cal sería o resultado de eliminar esta información inecesaria da miña colección de fondos de pantaia?
A mesma coa que expliquei o uso de .tar.xz.
Pois coa miña copia de seguridade comprimida en .tar.xz ben a salvo, me dispoño a lanzar o comando sobre o directorio dos fondos de pantaia.
Aquí pódese ver o resumo do espazo ocupado polas imaxes do directorio (omito as dúas mil e pico de liñas do listado ):
$ du -cah
...omito as dúas mil e pico liñas do listado...
1,7M ./wallpaper 3158.jpg
1,3M ./wallpaper 3160.jpg
1,4M ./wallpaper 3161.jpg
2,4M ./wallpaper 3162.jpg
4,5M ./wallpaper 3165.jpg
1,1M ./wallpaper 3174.jpg
640K ./wallpaper 3177.jpg
1,4M ./wallpaper 3178.jpg
292K ./wallpaper 3179.jpg
4,5G .
4,5G total
En total son como 4.5 GiB de imaxes .jpg sen comprimir.
Agora executo o comando de limpado de metadatos inecesarios “mogrify -strip” no directorio “WALLPAPERS” cos ficheiros de fondos de pantaia:
$ mogrify -strip ./WALLPAPERS/*
Trala súa execución comprobo canto espacio ocupan agora os ficheiros e este é o grato resultado:
$ du -cah
...Omito as miles de liñas feitas por cada arquivo...
884K ./wallpaper 2170.jpg
428K ./wallpaper 2274.jpg
3,0M ./wallpaper 2278.jpg
2,8M ./wallpaper 2279.jpg
1,2M ./wallpaper 2488.jpg
4,3G .
4,3G total
4,3 GiB ! , en total aforrei uns 200 MiB de espazo limpando información inecesaria das imaxes, sen perdela calidade, sen comprimilas, tan só eliminado a súa metadata, tendo en conta que o peso medio dunha imaxe é de 1 MiB, acabo de facer sitio pra unhas 150 ~ 225 imaxes máis.
Esto foi todo, espero que vos gustara esta entrada e que vos axude a gañar máis espazo en disco e a protexela privacidade dos vosos datos.
Saudos