picard musicbrainz mp3tag kid3 easytag linux image image-processing image-manipulation

linux - musicbrainz - jpegtran optimiza sin cambiar el nombre de archivo



mp3tag ubuntu (6)

Necesito optimizar algunas imágenes, pero no cambiar su nombre.

jpegtran -copy none -optimize image.jpg > image.jpg

Sin embargo, esto parece crear un tamaño de archivo de 0. Cuando lo hago con un nombre de archivo diferente, el tamaño sigue siendo exactamente el mismo.


Lo hice en tres líneas:

jpegtran -optimize image.jpg > image.jpg-opt cp image.jpg-opt image.jpg rm image.jpg-opt

Funciona bien.

[edit:] Esto funciona solo para un archivo a la vez.


Otra opción si -outfile no es compatible:

jpegtran -copy none -optimize image.jpg | sponge image.jpg

sponge forma parte de moreutils .


Sin una esponja, otra alternativa con menor acceso a la escritura de HDD o SSD es usar / dev / shm para guardar el archivo temporal y luego sobrescribirlo localmente de inmediato.

jpegtran -copy none -optimize image.jpg > /dev/shm/tmp.jpg && cat /dev/shm/tmp.jpg > ./image.jpg

El concepto se puede adaptar fácilmente a cualquier secuencia de comandos, tal vez con advertencias acerca de que el nombre de archivo temporal no sea el mismo, para evitar colisiones si hay varias instancias ejecutándose al mismo tiempo. Posiblemente sea interesante pensar en algún esquema único de generación de patrones de nombre de archivo, tal vez algo en la línea de ${originalfilename}-jpgtrantmp-$$ .


Yo uso este script. Funciona perfectamente. Espero que esto ayude.

https://gist.github.com/iimos/7424025

#! /bin/sh EXTENSIONS="jpe?g" if [ -z "$1" ]; then DIR="`pwd`" else DIR="$1" fi # Optimize JPEG images find "$DIR" -regextype posix-egrep -regex ".*/.($EXTENSIONS)/$" -type f | xargs -I{} jpegtran -optimize -progressive -outfile "{}.optimized" "{}" # Rename xxx.jpg.optimized -> xxx.jpg find "$DIR" -name ''*.optimized'' -print0 | while read -d $''/0'' file; do chown $(stat -c "%U:%G" "${file%.optimized}") "$file" chmod $(stat -c "%a" "${file%.optimized}") "$file" mv -f "$file" "${file%.optimized}"; done

Uso 1:

optimize-images.sh /images/dir

Uso 2:

cd /images/dir optimize-images.sh


qué tal si:

jpegtran -copy none -optimize -outfile image.jpg image.jpg

No soy un experto en shell de ninguna manera, pero creo que con su comando original, tan pronto como se ejecuta, se configura la redirección que sobrescribe su imagen.jpg. Luego, cuando jpegtran intenta leerlo, encuentra un archivo vacío.


jpegtran -copy none -progressive -optimize -outfile filename filename

Para una optimización completa: -copia none le dice a jpegtran que suprima todos los comentarios y otros excesos de equipaje presentes en la fuente jpeg, progresivo genera un jpeg progresivo, -optimize realiza las optimizaciones reales y -outfile establece el nombre del archivo de salida. El último parámetro es el nombre del archivo de entrada: si son iguales, su archivo se optimiza en su lugar.

Edición: es posible que también desee probar mozjpeg, de acuerdo con este artículo sobre herramientas de compresión jpeg sin pérdida http://blarg.co.uk/blog/comparison-of-jpeg-lossless-compression-tools