重庆世界花最新消息:Cropping multiple images the same way (short tutorial) ? Linux Tutorial Blog

来源:百度文库 编辑:九乡新闻网 时间:2024/04/19 15:49:18

Sometimes you'll want to crop the same area from multiple images(think of taking the contents of the same window from a load ofscreenshots). Of course, you could fire up your favourite image editorto select and crop over and over, but, as usual, there is a better way.This short tutorial describes an efficient way to do this for atheoretically infinite amount of images.

Difficulty: Basic - Medium

Note: I strongly recommend making a backup of the imagesyou're using for this tutorial before messing with them. Some actions inthis tutorial will overwrite the image files, so if you make a mistakeyou may lose valuable data.

This tutorial assumes basic Linux knowledge, like starting a program, opening a terminal and working with a terminal.

The tools we'll be using are GIMP and mogrify (from the ImageMagicksuite), so make sure that you have them installed. We'll use GIMP tographically select the area to be cropped and the mogrify tool toautomate the cropping, saving us a lot of work. Let's start with theselecting:

Getting the right cropping values using GIMP

In 5 steps:

1. Open up GIMP.
2. Open one of the images in GIMP.
3. Using the Rectangle Select Tool (hotkey "R"), select the area you want to be cropped.
4. Note the X, Y, Width and Height values GIMP gives you (have a look atthe picture, you can find them in the GIMP main window).
5. Close GIMP (or leave it open if you plan to use it again soon).

We now have the values we need to tell the mogrify utility what tocrop. Let's go on and write a line that'll execute mogrify in such a waythat it'll crop all our images!

Cropping the images

Now we'll start working in the terminal. Open up your favourite oneand cd to the directory where the images are located. Note that Istrongly recommend having only the images that are to becropped in the directory, nothing more. It saves you a lot of trouble.Well then, let's start with the mogrify command. The syntax for croppingis as follows:

[rechosen@localhost ~]$ mogrify -crop {Width}x{Height}+{X}+{Y} image.png

Now don't be scared, the {Width}, {Height} and so on simply are theplaces where you should put the values you got from GIMP! Note that Iuse a png file as an example, while mogrify is able to handle over 100image file types. You don't have to use png files with it. Anyway, ifI'd fill in the values from the screenshot, the mogrify command wouldlook like this:

[rechosen@localhost ~]$ mogrify -crop 643x393+7+83 image.png

The logic behind this system is the following: crop an area of 643 by393 pixels, starting at 7 pixels from the left and 83 pixels from thetop of the image. Got it? Ok then. The above command would overwriteimage.png with a cropped version. But this still manipulates just asingle image. The easiest way to make mogrify modify all images is justthis:

[rechosen@localhost ~]$ mogrify -crop 643x393+7+83 *.png

The asterisk makes bash fill in all png files in the currentdirectory, and mogrify will handle them all happily. After a (hopefullyshort) wait, all the images will have been cropped. If you want to cropimages of an other format, just change "*.png" to, for example, "*.jpg"or "*.gif".

You might want to give the cropped images other names, so that theoriginal images will not be overwritten and it will be clear whichimages have been cropped and which haven't. This is more complex, buthey, we're working on Linux! Everything is possible if you take the timeto write it.

Renaming the cropped images

In order to give the cropped images other names, we'll use a bash loop. This time, we'll use the convertutility. It is from the same family as mogrify, but it makes it easierfor us to output to an other filename. I won't explain the whole loop,as most of it is bash knowledge, but I will tell you which things youcan/should alter to get the right results. There are loops for twocases, just pick the one of which you like the file naming the most.

  • Case 1: You want the output files to be named like this: originalfile.png => cropped_originalfile.png (again, you can insert any of the over 100 supported image formats here, I just like png). The loop should be like this:

    [rechosen@localhost ~]$ for file in *.png; do convert -crop {Width}x{Height}+{X}+{Y} $file cropped_$file; done

    You should replace "png" with the extension you want (think of jpg, gif, png (of course) and so on), and the "{Width}", "{Height}" etc with the values you got from GIMP. You may also replace "cropped_" with any prefix you like.

  • Case 2: You want the output files to be named like this: originalfile.png => originalfile_cropped.png (or originalfile.jpg => originalfile_cropped.jpg, you name it). In that case, you should use the following loop:

    [rechosen@localhost ~]$ for file in *.png; do convert -crop {Width}x{Height}+{X}+{Y} $file ${file%.png}_cropped.png; done

    Again, replace "png" with the extension you want (watch it, there are 3 instances of it) and the "{Width}", "{Height}" etc with the values you got from GIMP. You can also replace "_cropped" with any suffix you like.

    Note that you can, in this case, easily modify the output format: if you want to output the cropped images in jpg format, you can just replace the third instance of "png" with "jpg", no matter what format your input files are. The convert utility will detect it and change the image format automatically.

Final words

Well, I hope this small tutorial helped you. If you want some (more)help with any of these things, feel free to place a comment. Thanks forreading and God bless!