- Linux Multimedia Hacks by Kyle Rankin
- Convert from One Image Format to Another
- Tip
- Tile Images
- Add a Border to an Image
- Flip and Flop Images
- Tip
- Convert a bunch of BMP files to JPEG on Linux
- Convert a bunch of BMP files to JPEG on Linux
- Solution 3:
- Solution 4:
- How to convert .bmp images to .jpg
- What is mogrify?
- How to convert .bmp images to .jpg?
- 5 comments, leave yours
- Leave a Comment Cancel reply
Linux Multimedia Hacks by Kyle Rankin
Get full access to Linux Multimedia Hacks and 60K+ other titles, with a free 10-day trial of O’Reilly.
There are also live events, courses curated by job role, and more.
Convert from One Image Format to Another
Use the ImageMagick convert tool to change between image formats .
When you deal with images on a regular basis, it’s often useful to convert them to different image formats. You can use graphical tools such as the GIMP to open files and save them into different formats, but if you deal with a lot of images you might find that process a bit cumbersome. The ImageMagick tool convert solves this problem by providing a command-line interface to image conversion. With convert you can change any ImageMagick-supported image format to any other ImageMagick-supported image format. The full list of supported formats is rather large—you can view the full list in the ImageMagick man page (the man page is ImageMagick, not imagemagick)—but among the supported formats are BMP, CMYK, GIF, JPEG, PBM, PNG, RGB, SVG, TIFF, and XPM.
The ImageMagick tools are commonly used by a number of other frontends, so you are likely to find the convert tool already packaged for your distribution with the rest of the ImageMagick tools. The standard usage of convert is simple: provide an input file and an output file as arguments, and convert will figure out the format based on the file extension. So, to convert a BMP to a PNG, type:
$ convert
image.bmp image.png
One of the advantages to a command line image conversion tool is that it lends itself really well to scripting. For instance, the following command converts an entire directory of BMP files to JPEG—the bit of sed in the command preserves the filenames but changes the extension to .jpg , and the results are fed to convert , which knows from the extension what format to make the new files:
$ for i in *.bmp; do j=`echo $i | sed -e 's/\.bmp/\.jpg/'`; \ convert $i $j; done;
Tip
The backslash at the end of the first line denotes a line break in this book—you can enter everything as one entry.
Tile Images
convert also supports a wide range of image processing functions it can perform as it is converting an image. Even if you don’t want to convert from one image format to another, you can still use convert to process the image into a new file. For instance, the tile argument tells convert to tile the input image into an output image of a size you specify with the -size argument. To take a 16 x 16 JPEG image and tile it across a new 640 x 480 JPEG image, you would type:
$ convert -size 640x480 tile
:image.jpg tiledimage.jpg
Replace image.jpg and tiledimage.jpg with the input file and output files, respectively.
Add a Border to an Image
The -border and -bordercolor arguments let you add a border of specified width and height to an image. The width you specify applies to the left and right of the image, while the height applies to the top and bottom of the image. You can pass a color either in text ( red, blue, white , etc.) or as an RGB value. To add a white border around an image (so it looks like a photographic print), type:
$ convert -border 15x18 -bordercolor white
image.jpg image2.jpg
The first border measurement sets the width of the top and bottom border edges; the second measurement sets the width for the left and right borders.
The color names come from X’s rgb.txt file. To view the contents of this file without having to locate it, use this command:
$ showrgb
255 250 250 snow 248 248 255 ghost white 248 248 255 GhostWhite 245 245 245 white smoke 245 245 245 WhiteSmoke …¶
You can also surround your image with a beveled frame with the — frame and accompanying -mattecolor options. The -frame argument accepts a width and height for the frame itself, plus an optional width for a beveled edge on the outer and inner edge of the frame, respectively. The mattecolor option accepts a hexadecimal RGB value. So, to add a red 25 x 25-pixel red frame to an image with a 5-pixel outer bevel, type:
$ convert -frame 25x25+5x5 -mattecolor "#FF0000"
image.jpg framedimage.jpg
Flip and Flop Images
The -flip and -flop arguments allow you to flip an image up and down or left and right, respectively. The -flop argument will convert the image so it looks like it would in a mirror, and the -flip argument flips it upside down. You can also combine the arguments .
Tip
There are a large number of more advanced imaging effects you can perform using the convert tool. To see all of them, check out the convert man page or type convert —help in the command line.
Get Linux Multimedia Hacks now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.
Convert a bunch of BMP files to JPEG on Linux
The mogrify (answered by hyperslug and referred by cjm ) is also a good option.
Use the mogrify program to resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.
This tool is similiar to convert except that the original image file is overwritten
(unless you change the file suffix with the -format option) with any changes you request.
Let me do a little change to salmonmoose answer:
for i in `ls *.bmp`; do convert $i $i.jpg; done
The above works but generates files named «bmp.jpg». You can get .jpg files with this command:
for i in *.bmp; do convert $ $jpg; done
See man bash for details of the for command. The $ part means the string «$» without the «bmp» substring at the end.
There are other operations to transform the string in «$». «$i» is a shorthand for «$». The ls *.bmp part in salmonmoose answer means «execute ls *.bmp , then the for i part assigns each string separated by spaces to i «. The same is achieved by *.bmp because it matches all file names in the directory.
There is a drawback with for — if the files in your directory have spaces in the name, for example «wedding picture 1.bmp», it will be assigned 3 times to the i var, performing these commands:
convert wedding wedding.jpg convert picture picture.jpg convert 1.bmp 1.bmp.jpg
In my answer also the match «$» fails.
But there is a solution — you can use the find command instead. See man find for details. You should type something like the following (please check the syntax with the man page before trying it):
find -name *.bmp -type f -exec convert '<>' '<>'.jpg \;
(I am not very sure of the name part, and I have some doubt in the -exec part, see man find first)
If you want to join all the images in one .jpg file, you can concatenate them with other filter, as the one mentioned in the first answer.
Convert a bunch of BMP files to JPEG on Linux
The mogrify (answered by hyperslug and referred by cjm ) is also a good option.
Use the mogrify program to resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.
This tool is similiar to convert except that the original image file is overwritten
(unless you change the file suffix with the -format option) with any changes you request.
Solution 3:
Let me do a little change to salmonmoose answer:
for i in `ls *.bmp`; do convert $i $i.jpg; done
The above works but generates files named «bmp.jpg». You can get .jpg files with this command:
for i in *.bmp; do convert $ $jpg; done
See man bash for details of the for command. The $ part means the string «$» without the «bmp» substring at the end.
There are other operations to transform the string in «$». «$i» is a shorthand for «$». The ls *.bmp part in salmonmoose answer means «execute ls *.bmp , then the for i part assigns each string separated by spaces to i «. The same is achieved by *.bmp because it matches all file names in the directory.
There is a drawback with for — if the files in your directory have spaces in the name, for example «wedding picture 1.bmp», it will be assigned 3 times to the i var, performing these commands:
convert wedding wedding.jpg convert picture picture.jpg convert 1.bmp 1.bmp.jpg
In my answer also the match «$» fails.
But there is a solution — you can use the find command instead. See man find for details. You should type something like the following (please check the syntax with the man page before trying it):
find -name *.bmp -type f -exec convert '<>' '<>'.jpg \;
(I am not very sure of the name part, and I have some doubt in the -exec part, see man find first)
If you want to join all the images in one .jpg file, you can concatenate them with other filter, as the one mentioned in the first answer.
Solution 4:
for i in `ls *.bmp`; do convert $i $i.jpg; done
Yes, this will make a bunch of files called filename.bmp.jpg but it’ll do the job.
How to convert .bmp images to .jpg
The articles of ChrisADR They have been very good and have had an incredible acceptance, however, in his first articles he used images .bmp which generally take up much more disk space than images .jpg , which prevented users with slow connections from appreciating the images that complemented their writing, so I had to learn to convert .bmp images to .jpg, and although there are several ways to do it, the simplest was using the tool mogrify of the package ImageMagick .
What is mogrify?
The tool mogrify It is quite interesting from where you look, since it has functionalities specialized in image processing, which allow us to carry out resizing, blurring, cropping, darkening, drawing, flipping, joining, converting processes on an image, among others.
The mogrify tool takes the original image and according to the functionality parameter that we indicate, it overwrites the image with one with the expected result, all this in a very fast and transparent way for the user.
This tool is available in the software suite imagemagick which allows you to create, edit, and compose images from the command line without the need for any graphic application. Official documentation of the use and features of mogrify can be found here. or by executing the command from the console mogrify -help .
How to convert .bmp images to .jpg?
As mentioned above, natively mogrify allows the conversion of images, one of the formats it allows to convert is .bmp to .jpg and vice versa, we can do this for both an image and a batch of them, in addition, with the parameter -format we can tell mogrify not to replace the original images but to create new ones.
In the case of bulk conversion of .jpg to .bmp images just go to the directory where the original images are and execute the following command:
New images will automatically be generated with the name of the original image but with the indicated format and with the respective conversions. Similarly, you can apply this simple procedure to various image formats.
Simple tutorial but that could solve the life of more than one.
The content of the article adheres to our principles of editorial ethics. To report an error click here.
Full path to article: From Linux » Tutorials / Manuals / Tips » How to convert .bmp images to .jpg
5 comments, leave yours
Leave a Comment Cancel reply
Well the article is very good 🙂 thanks for the help and sorry for the extra work 😛 I was using the always reliable Shutter to do the heavy lifting, but I forgot to configure it to convert to .jpeg directly 🙂 All solved and thanks again 😉 Greetings
Sometimes PNG (solid, uniform colors typical of application window shots) is better than JPEG (best for realistic photos). Due to final size and quality losses suffered with .jpeg.
Great mogrify tool, another great tool in the same ImageMagick package is convert:
Both commands do a lot of the same thing, but mogrify tends to crush the original image and convert creates a new image.
This makes resizing all the photos in the camera for later emailing easier to do with mogrify:
with mogrify: mogrify -resize 25% . JPG
with convert into a script: for image in * .JPG; do convert -resize «33% x33%» $ image RES $ image; done
I leave you the options that I have used with convert:
Rotate photos while copying them to a directory: convert -rotate -90 * .JPG rotate / rotate
Give them brightness and contrast by copying the result to a directory: convert -brightness-contrast 20x + 40 rotated shine / shine
Create a PDF with all of them: convert * todo.pdf
Cut a piece of the image: from left: 126 and above: 56 with the dimension width: 912, height: 624
convert -crop 900 × 624 + 126 + 56 C * .png J.png
There are many possibilities, create beveled frames for photos, etc.
Magnificent articles for both, one for a more general audience and the other for vocational computer scientists.
Good place to ask how to solve «Error when interpreting the JPEG graphic file (Not a JPEG file: starts with 0xff 0xff)»
Why do we resist the graphical interface? Could it be that it is very complex to develop it and requires a lot of effort? that something is more difficult does not mean that it is more efficient, sometimes it is better to take the shortest and easiest way if the longest takes many turns