Tengo algunos archivos JPEG capturados desde una Nintendo 3DS a través de Miiverse y me gustaría optimizarlos para la web.
Las imágenes son 2D pero se almacenan como JPEG estereoscópico, por lo que cada archivo termina conteniendo la misma imagen dos veces. Para reducir a la mitad la cantidad de almacenamiento que necesito, sería bueno eliminar la segunda imagen. Si importo uno de los archivos a GIMP, puedo ver que exportarlo con su configuración de calidad original da como resultado aproximadamente la mitad del tamaño del archivo. El único problema con este proceso (lo automatizaría y usaría ImageMagick) es que seguramente resultará en una degradación de la calidad de la imagen. Entonces, ¿hay alguna forma de lograr la extracción de imágenes 2D sin pérdidas? Solo compatible con Linux.
Aunque la conversión a PNG reduce el tamaño y no tendría pérdidas, no lo reduce a la mitad. PNG8 tampoco es una opción, ya que necesito más de 256 colores. Por cierto, también querré eliminar los datos EXIF, pero eso se puede hacer fácilmente con exiv2
.
Aquí hay un bash
script que extrae pares estéreo izquierdo-derecho de mpo
archivos usandoexiftool
. Dependiendo de la fuente del archivo, la imagen correcta puede almacenarse dentro de una etiqueta diferente.
#!/usr/bin/env bash para i en *.mpo; hacer j="${i#*/}" k="${j%.mpo}" # extraer imágenes de la izquierda exiftool -trailer:all= "$i" -o "${k}.left.jpg" exiftool -TagsFromFile "$i" "${k}.left.jpg" # extraer imágenes correctas si exiftool "$i" | grep "MP Imagen 3" ; después # Samsung NX 45mm f/1.8 2D/3D Exiftool "$i" -mpimage3 -b > "${k}.derecha.jpg" Exiftool -TagsFromFile "$i" "${k}.right.jpg" más #Fujifilm Real 3D W3 Exiftool "$i" -mpimage2 -b > "${k}.right.jpg" Exiftool -TagsFromFile "$i" "${k}.right.jpg" fi hecho
He encontrado la solución a mi problema.
Las imágenes JPEG comienzan con FF D8 FF
, por lo que la solución para un archivo individual es simplemente buscar la segunda aparición de esto usando un editor hexadecimal y eliminarlo, junto con todo lo que viene después. Escribir un script para automatizar este proceso debería ser sencillo, e incluso podría dividir las imágenes en dos archivos separados con facilidad; podría ser útil si su imagen realmente tiene dos perspectivas.
Sin detenerme a pensarlo demasiado, estoy usando esto para extraer la primera imagen:bbe -b '/\xFF\xD8\xFF\xE1/:' -e 'D 2' -o outputFile inputFile
Funciona. Estoy feliz. Robado de esta respuesta .
exiftool input.jpg -MPImage2 -b > output.jpg
Si importo uno de los archivos a GIMP, puedo ver que exportarlo con su configuración de calidad original da como resultado aproximadamente la mitad del tamaño del archivo.
Que debería ser ya que estás haciendo exactamente eso.
Las imágenes son 2D pero se almacenan como JPEG estereoscópico, por lo que cada archivo termina conteniendo la misma imagen dos veces.
No, no lo hace.
Contiene dos imágenes diferentes desde diferentes puntos de vista.
Serán similares pero no iguales.
El único problema con este proceso (lo automatizaría y usaría ImageMagick) es que seguramente resultará en una degradación de la calidad de la imagen.
Tiene dos imágenes y la única forma de hacerlo es extraer una u otra del archivo.
Entonces, ¿hay alguna forma de lograr la extracción de imágenes 2D sin pérdidas? Solo compatible con Linux.
Además de leer y guardar en JPEG, no tiene pérdidas.
No puede fusionar con sensatez las dos imágenes distintas, ya que se toman desde dos puntos de vista diferentes e introduciría una serie de artefactos relacionados con el paralaje al tratar de fusionarlos.
kevin chen