Generatore di miniature JPEG più veloce per Linux


9

Sto cercando il convertitore di immagini da riga di comando più veloce per Linux in grado di leggere un'immagine JPEG, ridimensionarla al massimo a 1366x768 e scrivere un'immagine JPEG di qualità 50. Qualcosa del genere, ma molto più veloce di ImageMagick:

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

Ho anche provato questo:

$ <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

Quindi mi piacerebbe avere un programma, preferibilmente scritto in C, che integra djpeg, una versione di qualità superiore di pnmscale e cjpeg.

Ho appena trovato swiggle (un programma C che utilizza libjpeg), ho disabilitato alcune delle sue funzionalità che non mi servono nel codice sorgente e ho:

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

Hai un altro suggerimento? Immagino che la maggior parte dei convertitori di immagini utilizzi libjpeg, quindi sarebbe difficile ottenere risultati molto più veloci dello swiggle.


1
Immagino che il più veloce si avvarrà di CUDA o OpenCL (che sfruttano la potenza della tua GPU basata su NVidia o AMD). Penso che OpenCV ora usi CUDA in alcune parti. Potresti essere in grado di montare qualcosa se sei utile con c
Matt H

Sono d'accordo con Matt. Se quelle sono immagini enormi (e se impiegano 12 secondi, suppongo che non siano piccole), allora CUDA / OpenCL farebbe il lavoro. O ottieni un PC migliore.
Apache,

Le immagini non sono troppo grandi (4000x3000 è il massimo) - la conversione richiede 12 secondi per un set di immagini di diverse dozzine di immagini.
punti

Risposte:


13

La libreria più veloce che ho usato finora è sicuramente EPEG . Può solo creare pollici dai file JPG, ma li crea molto velocemente:

$ 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

Ho usato questa libreria per creare pollici per una grande quantità di immagini molto grandi.


2
github.com/mattes/epeg ... dai un'occhiata anche a questo fork.
Mattes

1
Vedi anche github.com/fawick/speedtest-resize per un benchmark di varie librerie
nh2

2

Ho risolto questo problema scaricando swiggle (una miniatura della riga di comando JPEG + un generatore di gallerie di immagini HTML) e modificando la sua fonte per le mie esigenze. Vedi le misurazioni della velocità nella domanda (meno del 10% più veloce di djpeg + pnmscale + cjpeg).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.