Ruby - Converting Image Formats
So my streak has been broken, in total I have missed three days of posting. Last week Saturday I was man down after flying from San Francisco to Bermuda and this weekend has been crazy with work and a lack of sleep. It is clear I need to take my own advice and get some rest.
However, tonight I want to share a cool way to convert from one image format to another. RMagick is a binding from Ruby to the ImageMagick and GraphicsMagick image manipulation libraries. ImageMagick is a software suite to create, edit, compose, or convert bitmap images. It can read and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PNG, Postscript, SVG, and TIFF. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.
Now let’s go ahead and convert a PNG to JPG. This is our image:
First make sure you have installed ImageMagick from their website. Next go ahead and install the RMagick gem which is a Ruby binding to ImageMagick.
gem install rmagick
Next we can create a script file to hold our code, the first line will be a require statement to ‘rmagick’. Let’s have a look at the complete code and talk through it.
The code is straightforward; the only thing that tripped me up was when calling RMagick’s read method it returns an array so make sure you call first or use the appropriate index for the image you want.
The code above shows how we read in the image from the disk. To convert this image, you call the write method passing in the new filename including the extension.
After the code has run we are let with a new cat file which is a jpg:
To show you that this works correctly, I went ahead and read the newly created image and print out its format. This is a nice little utility that I have been using to convert quickly between different formats. The cool thing is that Magick supports a bunch of different file formats, so, checkout their site.