El generador de miniaturas JPEG más rápido para Linux

9

Estoy buscando el convertidor de imágenes de línea de comandos más rápido para Linux que pueda leer una imagen JPEG, reducirla a 1366x768 como máximo y escribir una imagen JPEG de calidad 50. Algo así, pero mucho más rápido que ImageMagick:

$ convert -resize x768 -quality 50 foo42.jpg foo42.th.jpg
# takes 0m16.713s for my test image set

También he intentado esto:

$ <foo42.jpg djpeg | pnmscale -xysize 1366 768 | cjpeg -quality 50 >foo42.th.jpg
# takes 0m12.007s for my test image set, and has lower visual quality than ImageMagick

Por lo tanto, me gustaría tener un programa, preferiblemente escrito en C, que integre djpeg, una versión de mayor calidad de pnmscale y cjpeg.

Acabo de encontrar swiggle (un programa en C que usa libjpeg), deshabilité algunas de sus funciones que no necesito en el código fuente, y obtuve:

$ swiggle -f -H 768 .
# takes 0m11.378s for my test image set, yields high quality results

¿Tienes otra sugerencia? Supongo que la mayoría de los convertidores de imágenes usan libjpeg, por lo que sería difícil obtener resultados mucho más rápidos que swiggle.

pts
fuente
1
Supongo que el más rápido usaría CUDA u OpenCL (que usa la potencia de su GPU basada en NVidia o AMD). Creo que OpenCV ahora usa CUDA en partes. Es posible que pueda preparar algo si es útil con c
Matt H
Estoy de acuerdo con Matt Si esas son imágenes enormes (y si toma 12 segundos, entonces supongo que no son pequeñas), entonces CUDA / OpenCL haría el trabajo. O consigue una mejor PC.
Apache
Las imágenes no son demasiado grandes (4000x3000 es el máximo): la conversión tarda 12 segundos para un conjunto de imágenes de varias docenas de imágenes.
pts

Respuestas:

13

La biblioteca más rápida que he usado hasta ahora es definitivamente EPEG . Solo puede crear pulgares a partir de archivos JPG, pero los crea muy rápido:

$ identify worldmap.jpg
worldmap.jpg JPEG 6400x3200 6400x3200+0+0 DirectClass 8-bit 6.85727mb 0.840u 0:02

Imagemagick:

$ time convert -resize 1536x768 -quality 50 worldmap.jpg im_thumb.jpg
# 2.93s user 0.23s system 85% cpu 3.718 total

EPEG:

$ time epeg -w 1536 -h 768 -q 50 worldmap.jpg epeg_thumb.jpg
# 0.31s user 0.01s system 79% cpu 0.404 total

Usé esta biblioteca para crear pulgares para una gran cantidad de imágenes realmente grandes.

Sebastian Stumpf
fuente
2
github.com/mattes/epeg ... mira este tenedor también.
mate
1
Consulte también github.com/fawick/speedtest-resize para obtener un punto de referencia de varias bibliotecas
nh2
2

He resuelto este problema descargando swiggle (una miniatura de línea de comandos JPEG en miniatura + generador de galería de imágenes HTML) y modificando su fuente para mis necesidades. Vea las mediciones de velocidad en la pregunta (menos del 10% más rápido que djpeg + pnmscale + cjpeg).

pts
fuente