Gerador de miniaturas JPEG mais rápido para Linux

9

Estou procurando o conversor de imagem de linha de comando mais rápido para Linux que pode ler uma imagem JPEG, reduzi-la para no máximo 1366x768 e gravar uma imagem JPEG de qualidade 50. Algo assim, mas muito mais rápido que o ImageMagick:

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

Eu também tentei isso:

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

Então, eu gostaria de ter um programa, de preferência escrito em C, que integre djpeg, uma versão de qualidade superior do pnmscale e cjpeg.

Acabei de encontrar swiggle (um programa em C usando libjpeg), desabilitei algumas das funcionalidades que não preciso no código-fonte e tenho:

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

Você tem outra sugestão? Eu acho que a maioria dos conversores de imagem usa libjpeg, por isso seria difícil obter resultados muito mais rápidos do que o swiggle.

pts
fonte
11
Eu acho que o mais rápido faria uso do CUDA ou OpenCL (que usam o poder da sua GPU baseada em NVidia ou AMD). Eu acho que o OpenCV agora usa CUDA em partes. Você pode ser capaz de chicote algo para cima Se você é acessível com c
Matt H
Eu concordo com Matt. Se forem imagens enormes (e se demorar 12 segundos, acho que não são pequenas), o CUDA / OpenCL faria o trabalho. Ou obtenha um PC melhor.
Apache
As imagens não são muito grandes (o máximo é 4000x3000) - a conversão leva 12 segundos para um conjunto de várias dezenas de imagens.
pts

Respostas:

13

A biblioteca mais rápida que usei até agora é definitivamente o EPEG . Ele só pode criar miniaturas de arquivos JPG, mas as cria muito rapidamente:

$ 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

Eu usei essa biblioteca para criar miniaturas para uma grande quantidade de imagens realmente grandes.

Sebastian Stumpf
fonte
2
github.com/mattes/epeg ... verifique este garfo também.
mates
11
Consulte também github.com/fawick/speedtest-resize para obter uma referência de várias bibliotecas
nh2
2

Resolvi esse problema baixando o swiggle (uma miniatura JPEG da linha de comando + gerador de galeria de imagens HTML) e modificando sua fonte para minhas necessidades. Veja as medições de velocidade na pergunta (menos de 10% mais rápido que djpeg + pnmscale + cjpeg).

pts
fonte