Resizing Images with ImageMagick
Rather than use the
bc statements from the original script,
let's make ImageMagick do the work by having this workflow:
Convert image to resized image and save as temp file.
identifyto get new dimensions of temp file.
Create new filename based on geometry.
Rename temp file to new filename with geometry specified.
It turns out it's a lot less work, because mathematics are no longer required, which is a good thing!
The hardest part is to create the new filename, which involves more lines of code than the conversion itself. It involves figuring out the filename suffix, chopping the filename up and building a new one that inserts the new image geometry in the middle.
Here's the result (it's long):
#!/bin/sh convert=/usr/bin/convert identify=/usr/bin/identify resize=$1 source=$2 if [ -z "$resize" -o -z "$source" ] ; then echo "Usage: $0 resize sourcefile"; ;exit 1 fi if [ ! -r $source ] ; then echo "Error: can't read source file $source" ; exit 1 fi # let's grab the filename suffix filetype=$(echo $source | rev | cut -d. -f1 | rev) tempfile="resize.$filetype" # temp file name # create the newly sized temp version of the image $convert $source -resize $resize $tempfile # figure out geometry, the assemble new filename geometry=$($identify $tempfile | cut -d\ -f3 ) newfilebase=$(echo $source | sed "s/$filetype//") newfilename=$newfilebase$geometry.$filetype # rename temp file and we're done mv $tempfile $newfilename echo \*\* resized $source to new size $resize. result = $newfilename exit 0
That's it. It's not incredibly complicated if you go through it step by step. In fact, go back to the four-step algorithm I presented earlier. That's almost exactly duplicated in the comments within the script.
The only nuance is the sequence for
newfilename assembly, which just
strings together a series of variables to have their values tucked
Let's give it a whirl and see what happens:
sh resize.sh 50% pvp.jpg ** resized pvp.jpg to new size 50%. result = pvp.485x153.jpg
I'm skeptical, so let's test the new image file by using
identify to get its dimensions:
$ identify pvp.485x153.jpg pvp.485x153.jpg JPEG 485x153 485x153+0+0 8-bit DirectClass 44.7kb
Perfect. More important, look at how the image size has shrunk as a result of it being scaled down 50%:
$ ls -l pvp.jpg pvp.485x153.jpg -rw-rw-r-- 1 taylor taylor 45751 Oct 9 04:14 pvp.485x153.jpg -rw-r--r-- 1 taylor taylor 130347 Sep 5 08:20 pvp.jpg
A definite win and a pretty handy script to keep around.
Of course, better positional parameter checking and a quick check to ensure that the resize parameter isn't something crazy would be good coding, but it's not a bad script that serves a very useful purpose.
So that's it. In my next article, I plan to take a look at adding embossing—text that's superimposed over a graphic—as an easy way to watermark sets of photos from the command line. Until then, cheerio!
Dave Taylor has been hacking shell scripts for over thirty years. Really. He's the author of the popular "Wicked Cool Shell Scripts" and can be found on Twitter as @DaveTaylor and more generally at www.DaveTaylorOnline.com.
Fast/Flexible Linux OS Recovery
On Demand Now
In this live one-hour webinar, learn how to enhance your existing backup strategies for complete disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible full-system recovery solution for UNIX and Linux systems.
Join Linux Journal's Shawn Powers and David Huffman, President/CEO, Storix, Inc.
Free to Linux Journal readers.Register Now!
- Download "Linux Management with Red Hat Satellite: Measuring Business Impact and ROI"
- Back to Backups
- A New Version of Rust Hits the Streets
- Google's Abacus Project: It's All about Trust
- Secure Desktops with Qubes: Introduction
- Seeing Red and Getting Sleep
- Fancy Tricks for Changing Numeric Base
- Secure Desktops with Qubes: Installation
- Working with Command Arguments
- CentOS 6.8 Released
Until recently, IBM’s Power Platform was looked upon as being the system that hosted IBM’s flavor of UNIX and proprietary operating system called IBM i. These servers often are found in medium-size businesses running ERP, CRM and financials for on-premise customers. By enabling the Power platform to run the Linux OS, IBM now has positioned Power to be the platform of choice for those already running Linux that are facing scalability issues, especially customers looking at analytics, big data or cloud computing.
￼Running Linux on IBM’s Power hardware offers some obvious benefits, including improved processing speed and memory bandwidth, inherent security, and simpler deployment and management. But if you look beyond the impressive architecture, you’ll also find an open ecosystem that has given rise to a strong, innovative community, as well as an inventory of system and network management applications that really help leverage the benefits offered by running Linux on Power.Get the Guide