¿Cómo giro muchas fotos digitales 180 grados en una sola operación?

Tengo varios miles de imágenes tomadas con una GoPro que están al revés.

Estoy buscando una manera, una aplicación realmente, que pueda voltearlos a todos, 180 grados, en una sola operación.

He mirado todas las opciones en el propio software de GoPro, pero no encuentro esto solo para imágenes fijas. Puedes rotar mientras haces un video, pero quiero mantener las imágenes individuales.

Estoy en Windows.

jpegtran es el camino a seguir. puede rotar y/o voltear archivos JPEG sin pérdidas, y es fácil llamar desde un script porque es una aplicación CLI.

Respuestas (13)

Recomendaría cualquiera de las aplicaciones de esta lista en JPEGclub.org , que desarrolla y mantiene software para Independent JPEG Group. Tienen un código gratuito llamado jpegtranque puede hacer algunas transformaciones básicas (como la rotación) sin volver a codificar la imagen.

La rotación de imágenes de forma "ingenua" (representar un mapa de bits, reorientar el mapa de bits y volver a guardar) puede dar como resultado un aumento de los artefactos JPEG y archivos más grandes con datos menos útiles.

La lista anterior contiene software que se sabe que lo hace "de la manera correcta". Otro software también puede (quizás usando una base de código diferente), pero desafortunadamente ImageMagick no es uno de ellos. Pero, a partir de agosto de 2016, hay 87 opciones diferentes para muchas plataformas informáticas diferentes, incluido Windows.


Nota de los comentarios: el OP usó este ciclo basado en esta respuesta:

FOR %f IN (.\Src\*.*) DO jpegtran.exe -rotate 180 %f .\Rotated\%~nxf

con buenos resultados.

Tenga en cuenta que la rotación sin pérdidas solo funciona si cada dimensión de cada imagen es un múltiplo de 16 píxeles, 8 si no se utiliza el submuestreo de croma. De lo contrario, se perderán los píxeles sobrantes o la imagen se rellenará con un borde. Por ejemplo, ¡1080 no es un múltiplo de 16!
Secundo la recomendación de jpegtran; aún mejor, si le importa mantener la miniatura y la Orientationetiqueta de EXIF ​​consistentes, puede considerar exiftrancuál está inexplicablemente ausente de la lista de JPEGclub, pero no tiene pérdidas. Mi comando (en Linux) para esto sería exiftran -i -1 *.jpgo find . -name '*.jpg' -print0 | xjobs -0 -l 10 exiftran -i -1; esto necesitará adaptarse para el shell de Windows.
@Toby Buena adición. Muchos (¿la mayoría?) de los programas enumerados también conservarán y actualizarán los metadatos, razón por la cual recomiendo uno de ellos en lugar de solo jpegtrandirectamente.
¡Gracias! Usé jpegtran en Windows. El rotar 180 es exactamente lo que necesitaba. Puse el comando de lote exacto en la pregunta para referencia futura.
@ Johns-305 Me alegro de haber podido ayudar. En la edición de la pregunta, consulte meta.photo.stackexchange.com/questions/1601/…
@mattdm ¿Debería editar la Respuesta marcada entonces? ¿Cuál es la forma correcta de comunicar la solución real?
@ Johns-305 Marcar la casilla de verificación "aceptado" como lo ha hecho comunica que la respuesta funcionó para usted, no es necesario hacer más. Si desea agregar más detalles, puede agregarlos como comentarios aquí (también como lo hizo) . Si es una adición simple, está bien editar la respuesta; si se trata de un cambio complicado, puede publicarlo como su propia respuesta.

En Windows puede hacerlo sin ningún software adicional en DOS operaciones. Seleccione los archivos que desea girar en el Explorador de archivos, haga clic con el botón derecho y haga "girar a la derecha" (oa la izquierda) dos veces. Se hará sin pérdidas si la imagen lo permite (por ejemplo, las dimensiones no son "divertidas").

¿Qué son las dimensiones "divertidas"? ¿Por qué las dimensiones de una foto impedirían la rotación sin pérdidas?
Después de leer ¿Las rotaciones de "Windows Photo Viewer" son sin pérdidas? , Entiendo ahora. Ambas dimensiones deben ser un múltiplo de 8 para rotar sin pérdidas.
Esta es la mejor respuesta. Me uní al sitio solo para votar esto.

Podrías usar ImageMagick con la rotateopción :

convert image.jpg -rotate 180 result.jpg

Debería poder aplicar este comando a varios archivos, según su entorno.

Sin embargo, tenga en cuenta que esto volverá a codificar el jpeg, perdiendo calidad.

Puede usar xnview en Windows, que tiene algunos procesamientos en modo por lotes y también, para una rotación simple de imágenes, tiene la opción de rotar imágenes en función de los datos EXIF.

Seleccione todas las imágenes (¡incluso las correctamente orientadas! Sabrá que ya están bien orientadas), "girar en función de exif" y lo hará (sin recalcular el jpg, por lo que no perderá calidad).

Como dicen en http://newsgroup.xnview.com/viewtopic.php?t=1420 :

Para hacer esto, seleccione todas sus imágenes y seleccione "Herramientas> Transformaciones JPG sin pérdida" (o la lista desplegable del símbolo 'Transformaciones JPG sin pérdida' en la barra de herramientas). En el cuadro de diálogo, marque el botón con "EXIF" y luego presione "Ir". XnView rotará permanentemente las imágenes según el indicador de orientación EXIF.

Y para la próxima vez, si tiene una GoPro lo suficientemente reciente, también puede verificar su función: https://gopro.com/support/articles/what-is-auto-image-rotation

¿La GoPro realmente guarda los datos de orientación EXIF ​​correctos? La Hero4/Session tiene un sensor de orientación, pero no creo que ninguno de los modelos más antiguos lo tenga.

Asumiendo que sus fotos están en formato JPEG, soy bastante partidario de JPEGCrops , una herramienta simple y gratuita para el procesamiento por lotes de imágenes sin pérdidas.

Puede recortar a relaciones de aspecto específicas y/o rotar.

FSViewer es un programa útil que puede hacer eso.

Abra la carpeta donde están las imágenes, seleccione todo lo que desea rotar, presione F4 y vaya a la pestaña 'Conversión por lotes' en la ventana que se abre. Haga clic en 'Opciones avanzadas' en la parte inferior derecha, vaya a la pestaña 'Rotar'. Marque 'Voltear / Rotar', luego 'Rotar', luego seleccione '180' a continuación y presione Aceptar. Establezca dónde desea que se guarden y presione 'Convertir'.

Editar: una forma más rápida y sencilla es simplemente seleccionar todas las imágenes que desea y presionar dos veces 'Girar a la derecha y guardar' en la barra de herramientas. Debería ser no destructivo para archivos JPEG.

¿Puedo sugerir el modo por lotes de Irfanview, que solo se ejecuta en Windows? Irfanview también es bueno para ediciones simples, pero no es GIMP.

Una vez instalado, seleccione "Archivo | Conversión por lotes/Renombrar". A partir de ahí, se vuelve un poco complicado, debe seleccionar todos los archivos, debe especificar una carpeta de destino y debe hacer clic en el botón Avanzado para ver las opciones avanzadas. Puede rotar +/-90°, pero para hacer 180° deberá elegir una rotación fina en el extremo derecho e ingresar 180°. Tenga en cuenta que también puede cambiarles el tamaño, cambiar la calidad de JPEG y cambiarles el nombre.

También puede hacerlo bastante rápido permaneciendo en la GUI y usando el teclado. Abra cualquier archivo en la carpeta de imágenes. Pulse 'R' dos veces para girar dos veces. Luego presione Ctrl-S para guardar. Aparecerán dos ventanas, una con el cuadro de diálogo de archivo típico y otra para la compresión JPEG (si el formato predeterminado de GoPro es JPEG). Me aseguraría de que el factor de calidad sea al menos del 90 %. Luego guarde el archivo; debería poder presionar la tecla Tabulador o Alt-S para guardar. Es posible que aparezca un cuadro de diálogo del tipo "¿Está seguro?" (es posible que pueda desactivarlo). Luego, simplemente presione la barra espaciadora para avanzar al siguiente archivo en la carpeta. Si tiene más de 50 archivos, el lote puede ser más rápido. Diez archivos, solo hago lo anterior.

La clave de Irfanview es que es como Blender, no te pregunta si quieres Guardar si modificas una imagen.

Eso hará una rotación con pérdida, ya que los gira y luego vuelve a guardar el JPEG, por lo que está perdiendo calidad. En IrfanView, es mejor utilizar la función "Rotación JPEG sin pérdidas" (Shift+J). Tenga en cuenta que puede usar la vista en miniatura para seleccionar todas sus imágenes y luego rotarlas todas a la vez.
@RocketFeathers: Irfanview es la herramienta más fácil para hacer esto sin pérdidas en un entorno de Windows. Pero como dice vclaw, es mucho mejor usar "JPEG Lossless Rotation" para hacerlo. Edite su respuesta para reflejar eso y la votaré.
"no te pregunta si quieres Guardar si modificas una imagen". - Esto se puede cambiar en Opciones > Propiedades/Configuraciones... > Solicitar guardar los cambios al salir del programa.

Con las ventanas, puede marcarlas todas en el explorador, luego hacer clic con el botón derecho y elegir rotar en el sentido de las agujas del reloj. Haga esto dos veces y sus imágenes ahora estarán correctamente orientadas.

¿Conoces GIMP? Existe un complemento llamado BIMP que le permite realizar la misma operación en un conjunto de imágenes, utilizando una interfaz gráfica. Puede instalarlo fácilmente utilizando el instalador oficial de Windows.

También puede volver a guardarlos en otro formato o con una relación de compresión diferente para evitar una gran pérdida de calidad.

Consejo profesional: lo logré :D

Creo que quisiste decir "Descargo de responsabilidad" en lugar de "Consejo profesional": p ¡Pero gran software! He necesitado operaciones por lotes en GIMP de vez en cuando y he recurrido a escribir código matlab en su lugar. Tendré en cuenta tu herramienta para la próxima vez :)

ImageMagick es un conjunto de herramientas de línea de comandos que operan en imágenes, y puede combinar esas herramientas con comandos básicos de shell de Unix para aplicar el mismo comando a un conjunto de archivos. Hay muchos buenos ejemplos en ¿Cómo rotar todas las imágenes en un directorio con imagemagick? .

Um... y si el OP está en Windows y no usa Cygwin...? :) Es posible que desee agregar "y archivos por lotes de Windows" o expandir la respuesta para indicar que ImageMagick no es necesariamente una solución exclusiva de UNIX, solo una de línea de comandos.
Lo probaré esta tarde. Hay binarios de Windows disponibles.

Yo personalmente uso Adobe Lightroom. Las imágenes se pueden rotar y editar por lotes fácilmente, simplemente seleccione las imágenes que desea rotar, haga clic con el botón derecho y seleccione la opción para transformar las imágenes rotando 180 grados.

Si trabaja constantemente con miles de imágenes que requieren procesamiento por lotes, especialmente si es más complejo que rotar, como ajustar el color o la exposición, entonces LR es probablemente una inversión sólida.

No me gusta que Lightroom sea de código cerrado, cueste dinero y no se ejecute en sistemas Linux. Sin embargo, he encontrado que las funciones superan con creces lo que está disponible de forma gratuita.

Podría usar LiveBlox y construir una canalización para permitir la rotación de la imagen. La versión de demostración en http://liveblox.org tiene un bloque de rotación, por lo que permitirá que esto se haga.

Hay un tutorial https://www.youtube.com/watch?v=kY0e5msQuiU que muestra cómo cambiar el tamaño de la imagen por lotes, solo necesita reemplazar el tamaño fijo con el rotador para hacer la rotación.

Esto le permitiría trabajar en cada imagen con un solo clic.

$ por F en *jpg; convert -rotate 180 $F "$(nombre base $F .jpg)_R.jpg" && echo "Terminado $F"; hecho

Explicación: *para F en la parte .jpg del comando asigna el nombre de archivo a una variable, que se puede recuperar más tarde para cambiar el nombre del archivo a [nombre de archivo original}_R.jpg

el "do convert -rotate 180" le dice a la computadora que le gustaría convertir sus imágenes, girándolas 180 grados.

La parte "$(basename $F .jpg)_R.jpg" del comando indica el nuevo nombre de archivo.

El && le dice a la computadora que viene un comando adicional, pero que la computadora solo puede ejecutar el comando si el comando anterior (rotación y cambio de nombre) fue exitoso.

echo "Done $F" le dice a la computadora que le diga ("echo" para usted) que cada archivo se ha rotado con éxito. La subparte $F del comando está recuperando la variable de nombre de archivo inicial, por lo que la salida probablemente dirá algo como "Done file1.jpg"

Y uno necesita sh/csh/bash para que esta pieza funcione.

Posiblemente funcione, pero sin una explicación, no es una buena respuesta. Por favor explique en qué contexto esta solución si aplica.
¿Es esta una expansión de la respuesta de null usando ImageMagick?
Esto no funciona como se esperaba si ya hay *_R.jpgarchivos en el directorio.
Gracias por la aclaración, no estoy seguro de si instalar un shell de UNIX en Windows es un enfoque práctico, pero no lo es menos.
pts, puede cambiar el _R.jpg a lo que quiera (como "_rotated.jpg"). Tiene razón en que esto será problemático si ya tiene archivos _R.jpg en el directorio.