Batch converting PNG to JPG in linux

20
2014-04
  • humble coffee

    Does anyone know a good way to batch-convert a bunch of PNGs into JPGs in linux? (I'm using Ubuntu).

    A png2jpg binary that I could just drop into a shell script would be ideal.

  • Answers
  • evilsoup

    Your best bet would be to use Imagemagick

    I am not an expert in the actual usage, but I know you can pretty much do anything image related with this!

    An example is:

    convert image.png image.jpg
    

    and it will keep the original as well as creating the converted image. As for batch. I think you need to use the Mogrify tool (from the same command line when in imagemagick). Keep in mind that this overwrites the old images.

    The command is:

    mogrify -format jpg *.png  
    
  • Matt Ryall

    The convert command found on many Linux distributions is installed as part of the ImageMagick suite. Here's the bash code to run convert on all PNG files in a directory and avoid that double extension problem:

    for img in *.png; do
        filename=${img%.*}
        convert "$filename.png" "$filename.jpg"
    done
    
  • Kevin Cox

    I have a couple more solutions.

    The simplest solution is like most already posted. A simple bash for loop.

    for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
    

    For some reason I tend to avoid loops in bash so here is a more unixy xargs approach, using bash for the name-mangling.

    ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
    

    The one I use. It uses GNU Parallel to run multiple jobs at once, giving you a performance boost. It is installed by default on many systems and is almost definitely in your repo (it is a good program to have around).

    ls -1 *.png | parallel convert '{}' '{.}.jpg'
    

    The number of jobs defaults to the number of processes you have. I found better CPU usage using 3 jobs on my dual-core system.

    ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
    

    And if you want some stats (an ETA, jobs completed, average time per job...)

    ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
    

    There is also an alternative syntax if you are using GNU Parallel.

    parallel convert '{}' '{.}.jpg' ::: *.png
    

    And a similar syntax for some other versions (including debian).

    parallel convert '{}' '{.}.jpg' -- *.png
    
  • Teddy

    The actual "png2jpg" command you are looking for is in reality split into two commands called pngtopnm and cjpeg, and they are part of the netpbm and libjpeg-progs packages, respectively.

    png2pnm foo.png | cjpeg > foo.jpeg
    
  • max

    my quick solution for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done

  • Jeffrey Aylesworth

    For batch processing:

    for img in *.png; do
      convert "$img" "$img.jpg"
    done
    

    You will end up with file names like image1.png.jpg though.

    This will work in bash, and maybe bourne. I don't know about other shells, but the only difference would likely be the loop syntax.


  • Related Question

    Batch convert multiple PDF to Image on Mac
  • Questioner

    What would be the quickest way to convert a bunch of pdf files to jpeg files? I know I can open Preview and Save As image, but that could take a long time.


  • Related Answers
  • James Polley

    Automator as a "Render PDF Pages to Images" action. Under Snow Leopard, there's a wizard that pops up when you run Automator asking you to choose a template. The second template is "Application":

    Applications are self-running workflows. Any files or folders dropped onto an Application will be used as input to the workflow.

    So:

    • Open Automator
    • Choose "Application"
    • Drag the "Render PDF Pages to Images" action onto the workflow
    • This action produces random filenames, so follow it with "Rename Finder Items" (choose "Make sequential" from the dropdown list
    • Then add a "Move Finder Items" to have the output files moved to the Desktop
    • Save your new application somewhere
    • Drag files onto it
    • Enjoy.
  • John T

    How about pdf2jpg?

    PDF2JPG is a droplet based application for converting any number of files you drop on it into either JPG or PNG format, also allows you to select compression level when converting to JPG. This application requires that you have the ImageMagick libraries installed from Fink. Information on installing ImageMagick and, if needed, Fink as well.