Howto: Linux convert an image between different formats from command prompt

last updated in Categories , , , , , ,

Q. How do I convert images from a shell prompt? For example convert an image in the JPEG format to PNG or vise versa?


A. You need to use the convert command which is a member of the ImageMagick suite of tools. Use it to convert between image formats as well as
=> Resize an image
=> Blur an image
=> Crop an image
=> Despeckle an image
=> Dither an image
=> Draw on an image
=> Flip an image
=> Join an image
=> Re-sample, and much more.

Task: Convert an image in the JPEG format to PNG

Type the command as follows:
$ convert input.jpg output.png

Task: Resize the image

Resize and convert an image in the JPEG format to PNG
$ convert -resize 50% input.jpg output.png

You can also create a complex effect such as:
$ convert -size 360x85 xc:transparent -font Bookman-DemiItalic -pointsize 72 -draw "text 25,60 'nixCraft'" -channel RGBA -gaussian 0x6 -fill YellowGreen -stroke RosyBrown -draw "text 20,55 'nixCraft'" nixCraft.png



Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

6 comment

  1. Hi ,

    I have converted *.bmp to *.ps, but the *.ps image appears to be small and displayed at the end of the page. How to delete the empty spaces and make it fit to the page with a full resolution.

    I had a similar problem with ps2pdf but i used ps2pdf -dEPSCrop *.ps , i got good result

    Similarly how to do with bmp to ps conversion? or is there any way to convert bmp to pdf directly with full size fit?

  2. how do you convert all the files in the folder from .jpg to .png BUT keep the same names apart from the different exstension.
    I tried
    convert *.jpg *.png
    but of course I get a lot of png files with no names just *-0.png etc

    1. This response is a year old, but perhaps someone else might find this useful. The core concept is that you’re doing the same command over multiple files i.e., a for loop. It should look something like this.

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

    Still, have a question? Get help on our forum!