Générateur de vignettes JPEG le plus rapide pour Linux

9

Je recherche le convertisseur d'image en ligne de commande le plus rapide pour Linux qui peut lire une image JPEG, la réduire à 1366x768 au maximum et écrire une image JPEG de qualité 50. Quelque chose comme ça, mais beaucoup plus rapide que ImageMagick:

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

J'ai également essayé ceci:

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

J'aimerais donc avoir un programme, de préférence écrit en C, qui intègre djpeg, une version de pnmscale de meilleure qualité et cjpeg.

Je viens de trouver swiggle (un programme C utilisant libjpeg), j'ai désactivé certaines de ses fonctionnalités dont je n'ai pas besoin dans le code source, et j'ai:

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

Avez-vous une autre suggestion? Je suppose que la plupart des convertisseurs d'images utilisent libjpeg, il serait donc difficile d'obtenir des résultats beaucoup plus rapides que swiggle.

pts
la source
1
Je suppose que le plus rapide utiliserait CUDA ou OpenCL (qui utilisent la puissance de votre GPU basé sur NVidia ou AMD). Je pense que OpenCV utilise maintenant CUDA en plusieurs parties. Vous pourriez être en mesure de concocter quelque chose si vous êtes à portée de main avec c
Matt H
Je suis d'accord avec Matt. Si ce sont des images énormes (et si cela prend 12 secondes, je suppose qu'elles ne sont pas petites), alors CUDA / OpenCL ferait le travail. Ou obtenez un meilleur PC.
Apache
Les images ne sont pas trop grandes (4000x3000 est le maximum) - la conversion prend 12 secondes pour un ensemble d'images de plusieurs dizaines d'images.
pts

Réponses:

13

La bibliothèque la plus rapide que j'ai utilisée jusqu'à présent est certainement EPEG . Il ne peut créer que des pouces à partir de fichiers JPG, mais il les crée très rapidement:

$ 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

J'ai utilisé cette bibliothèque pour créer des vignettes pour une grande quantité d' images vraiment grandes.

Sebastian Stumpf
la source
2
github.com/mattes/epeg ... consultez également cette fourchette.
matte
1
Voir aussi github.com/fawick/speedtest-resize pour une référence de différentes bibliothèques
nh2
2

J'ai résolu ce problème en téléchargeant swiggle (une miniature JPEG en ligne de commande + un générateur de galerie d'images HTML) et en modifiant sa source selon mes besoins. Voir les mesures de vitesse dans la question (moins de 10% plus rapide que djpeg + pnmscale + cjpeg).

pts
la source