### ImageMagick 6.0.0: News

ImageMagick Studio LLC announces the release of ImageMagick 6.0.0.

ImageMagick 6.0.0 is a robust collection of tools and libraries offered under a usage license to read, write, and manipulate an image in many image formats (over 89 major formats) including popular formats like TIFF, JPEG, PNG, PDF, PhotoCD, and GIF. With ImageMagick you can create images dynamically, making it suitable for Web applications. You can also resize, rotate, sharpen, color reduce, or add special effects to an image or image sequence and save your completed work in the same or differing image format. Image processing operations are available from the command line, or from the C, C++, Perl, Java, PHP, Python, or Ruby programming languages. A high-quality 2D renderer is included, which provides a subset of SVG capabilities. ImageMagick's focus is on performance, minimizing bugs, and providing stable APIs and ABIs.

Here are just a few examples of what ImageMagick can do:

- Convert an image from one format to another (e.g. TIFF to JPEG)
- Resize, rotate, sharpen, color reduce, or add special effects to an image
- Create a montage of image thumbnails
- Create a transparent image suitable for use on the Web
- Turn a group of images into a GIF animation sequence
- Create a composite image by combining several separate images
- Draw shapes or text on an image
- Decorate an image with a border or frame
- Describe the format and characteristics of an image

ImageMagick is copyrighted by ImageMagick Studio LLC, a nonprofit organization dedicated to making software imaging solutions freely available. ImageMagick is available for free, may be used to support both open and proprietary applications, and may be redistributed without fee.

While the API in 6.0.0 is 100% compatible with 5.5.7, thanks to Anthony Thyssen the command line processing has improved significantly as detailed here:

          http://www.cit.gu.edu.au/~anthony/graphics/imagick6/cmdline/

Other major improvements in ImageMagick 6.0.0 include

- MagickWand API, a higher level C interface to the ImageMagick methods.
- Increased stability. The library was checked and cross-checked with splint and valgrind to eliminate security vulnerabilities and common programming mistakes as well as ensure no memory leaks.
- A new -fx option to apply a mathematical expression to an image list from the command line.
- Algorithms were improved to reduce processing requirements resulting in a significant speed-up over previous releases.
- All regression tests pass at Q8, Q16, and Q32 on a variety of platforms including Linux, Solaris, FreeBSD, Mac OS X, and Windows.
- The composite methods have been corrected to precisely conform to the SVG standard.
- New image comparison utility, `compare'.
- Better support for CMYK image workflow.
- New string handling methods to help prevent potential buffer overflow problems.
- Error reporting has more detail to help identify the cause of a particular problem.

Other significant changes since the ImageMagick 5.5.7 release, include:

Bug fixes:

- Configure files in your current directory, at MAGICK_HOME, or at ~/.magick are read in addition to the ones in the system directory (.e.g you can specify your private font files in ~/.magick/type.mgk).
- A semaphore was being reset while not under a spinlock.
- Configure script fix ensures that -lfpx is not supplied to the C compiler during subsequent tests since this fails on some systems.
- Fix for East and West gravity computations.
- System error reports (errno) associated with an exception are now correctly obtained from the existing context when the exception was thrown rather than the context of the reporting method.
- JNG encoder fix. Files were being written with incorrect alpha sample value in the header. These can be repaired by reading them into ImageMagick 6.0.0 and rewriting them.
- BMP reader fix to avoid unnecessary rejection of some old uncompressed Windows 2.X and OS/2 BMPs.
- XPM fix to module registration.
- PSD fix for index calculation when QuantumDepth > 8.
- Validate that geometry specifications (unrecognized symbols are rejected).
- SGI fix to save compression type while writing.
- The reported image magick string is now always that of the original input file (it was sometimes being reported as the format produced by an intermediate delegate program).
- Fixes to color profiling of CMYK images.
- Memory leak fixed in DrawClipPath().
- Arc drawing is fixed.
- Fixed possible infinite loop in Windows thread locking.
- Scaling of colors was slightly incorrect for 16-bit BMP, AVI, DIB, and TIM datastreams.
- Fixed any/all memory leaks identified by valgrind.

Performance improvements:

- Texture tiling is now 7X faster.
- Image processing speed improvements due to an improved pixel cache algorithm.

Utilities enhancements:

- Added the -tint option: applies a color vector to each pixel in the image. The length of the vector is 0 for black and white and at its maximum for the midtones. The vector weighting function is f(x)=(1-(4.0*((x-0.5)*(x-0.5)))).
- Added support for dealing with image channels. In addition to the -fx option you can use -channel to operate on a particular channel for -level, -gamma, -threshold, and -negate. Additional channel operators will be added in the next release.
- For Unix, 'identify -list configure' lists configure and build parameters.
- Error messages have been enhanced to display greater detail. Use -debug Exception to trace the exact location within the ImageMagick source of a particular error.
- Added -orient option to set the image orientation.
- Improvements to the image profiling and clipping (new -clip-path option).
- Added 'Save' option to animate program menu.
- The -define option is added in order to support supplying additional options to coders without needing to add additional command line options or structure members.
- The output of 'identify -verbose' now displays EXIF data (if present).
- The -sampling-factor option now accepts as many HxV pairs as there are JPEG components. Omitted ones default to 1x1.
- Wildcard filename handling is enhanced to work with a subimage specification (e.g. '*.miff[2]').
- Added new image comparison utility `compare' (e.g. compare -metric PSNR image reconstructed difference).
- Added -separate to the convert program to separate a channel from an image and return a grayscale image.
- New postfix command line operation. See http://www.cit.gu.edu.au/~anthony/graphics/imagick6/cmdline/. There is legacy support so existing scripts do not break.
- Added new -annotate option for the convert and mogrify program (e.g. -annotate +100+100 'Some text', -annotate 30x30+100+100 'Some text').
- Added -top, -delete, -insert, and -swap as options to the convert program to enhance image list manipulation.
- Added the -radial-blur option to the convert and mogrify programs.
- Added -family, -stretch, -style, and -weight to the convert program. These options are used in conjunction with -font to specify font attributes.
- Added the -splice option to splice the background color into an image.
- Added the -posterize option to reduce the image to a limited number of color levels.
- Added explicit option grouping to the convert command. Option grouping overrides the default behavior and applies any options to images between the parentheses, for example:

            convert \( 1.png 2.png -append \) \( 3.png 4.png -append \) \
              +append image.png

          returns

            +---+---+
            | 1 | 3 |
            +---+---+
            | 2 | 4 |
            +---+---+
        * Added -fx `expression' as a new special effects operator:

               convert u.png v.png -fx 'expression' result.png

          The syntax is `-fx 'expression'', and will work with the current image
          sequence in memory, with the resulting image replacing that sequence.
          Typically the source image sequence is only one or two images.

          For example, extract the matte channel of the image (this is the negative
          to what is commonly thought of as the alpha channel mask of the image)

                convert drawn.png -fx 'a' +matte matte.png

          Mathematic operators include

            constants:          MaxRGB, Opaque, Transparent, Pi
            standard operators: +, -, *, etc.
            math function name:
                abs(), acos(), asin(), atan(), cos(), exp(), log(), ln(), max(),
                min(), rand(), sin(), sqrt(),  tan()
            color names:        red, cyan, black, etc.
            symbols:
                u = first image in sequence
                v = second image in sequence
                i = current columns offset
                j = current row offset
                p = pixel to use (absolute or relative to current pixel)
                w = width of this image
                h = height of this image
                r = red value (from RGBA), of a specific or current pixel
                g = green   ''
                b = blue    ''
                a = alpha   ''
                c = cyan value of CMYK color of pixel
                y = yellow    ''
                m = magenta   ''
                k = black     ''
                intensity = pixel intensity

          The image source can be specified using an image index, starting
          at zero for the first image, (eg: `u[3]' is the fourth image in the
          image sequence).  A negative image index counts images from the end
          of the current image sequence, so  `u[-1]' refers to the last image
          in the sequence.

          Without an index `u' or `v' represent the first and second.  image of
          the sequence.  If no image is specified the `u' image is used.

          For example to reduce the intensity of the red  and green channels by
          50%, use

                convert image.png -channel red,green -fx 'u/2.0' image.jpg

          The pixels are processed one at a time, but a different pixel of a image
          can be specified with a `pixel' index.  For example...

                p[-1].g      Green value of pixel to the immediate left of current

                p[-1,-1].r   Red value, diagonally left and up from current pixel

          To specify an absolute position, use braces, rather than brackets

                p{12,34}.b   is the blue pixel at position 12,34

          The other symbols specify the value you wish to retrieve.

          A pixel outside the boundary of the image has a value dictated by the
          -virtual-pixel setting.

          The -channel setting can be used to specify the output channel of the
          result.  If no channels have been set the default is just the RGB
          (or CMYK) channels.  The alpha channel will be left as is.

          For example, suppose you want to replace the red channel of alpha.png
          with the average of the green channels from the images alpha.png and
          beta.png:

            convert alpha.png beta.png -channel red -fx '(u.g+v.g)/2' gamma.png

          Note that all the original images in the current image sequence are
          replaced by the updated `alpha.png' image.
        * Added the -evaluate method option to the convert program.  Use it to
          apply an an arithmetic, relational, or logical operator to an image.
          These operations can be used to lighten or darken an image, to increase
          or decrease constrast an an image, or to produce the "negative" of an
          image.

Coder additions/improvments:

- The META coder supports wide characters for the IPTC and 8BIM formats.
- The XTRN coder now supports wide characters.
- The MAGICK coder provides access to a large number of images (derived from XFig) suitable for use as patterns, or as test images.
- The PATTERN coder now returns an image pattern tiled to size.
- Reading and writing compressed SVG (SVGZ) is now supported.
- The TXT coder now observes depth when writing.
- The JPEG coder now estimates the original JPEG quality and sampling factors and uses these values when writing a JPEG image unless overwridden with the -quality option.
- The JPEG-2000 coder now supports all Jasper library arguments (e.g. -define jp2:rate=0.5).
- Added CIELab color support for TIFF and PSD images.
- The TIFF coder now outputs colormapped images with 1, 2, and 4 bits per sample in order to provide much smaller file sizes for images with very few colors.
- Added support for the Cineon, Dot, and SCR image formats.
- The WPG coder now renders embedded WMFs.
- The PS3 coder is completely re-written to work much better and support more features (see ChangeLog).
- Added EPT2 and EPT3 image types which embeds Postscript level II and Postscript level III repectively.
- The XC image format now accepts a CMYK color specification (e.g. -size 100x100 xc:'cmyk(100,100,100,50)'.
- Modified the AVI coder to support MJPG compression.
- Added a resample element to the MSL coder.

Code/structure enhancements:

- Improved handling of image profiles, including ICC, IPTC, EXIF and XMP. Profiles are now conveniently stored in a hashmap structure. The color_profile and iptc_profile members of the Image structure are still maintained for backwards compatibility, however, we encourage you to use the new PutImageProfile(), GetImageProfile(), and DeleteImageProfile() methods.
- Error handling has been improved and validated through testing. Some errors were being lost, unnecessarily ignored, or reported as something else entirely.
- The number of error text messages to be maintained has been reduced by consolidating similar messages.
- The memory allocator methods have been replaced with similar methods in order to eliminate warnings with GCC 3.3, avoid accidentally casting away const. The previously-used functions remain in the library for the purpose of compatibility.
- <magick/xwindow.h> no longer depends on magick_config.h defines.
- The text string localization code has been replaced with a simpler version written by Bill Radcliffe.
- Added key,value "define" APIs for internal use.
- New MAGICK_CONFIGURE_PATH environment variable allows the user to specify the search path for configuration (.mgk) files.

API enhancements:

- The Wand API is a new high level interface to the ImageMagick library. Feel free to review or use the API now but keep in mind the interface may change between now and the release date. See http://www.imagemagick.org/www/api.html for details. Note that the ImageMagick DrawContext methods have been moved to the Wand API. The methods had a caveat at the beginning of the source module mentioning the API was not complete and to not rely on it. Now you can!
- API definitions is no longer dependent on types which vary in size (e.g. off_t) depending on large file compilation options. This means that applications may now be compiled without any special large file options and still work properly with the library.
- Thrown exceptions (ExceptionInfo structure) now include source file, source line, method name, and current system error number.
- Added the InheritException() method to support inheriting exceptions from one structure to another.
- Added the ReplaceImageInList() method to replace an image in an image list.
- Added the DrawPeekGraphicContext() method to access the current DrawInfo structure in the drawing context stack.
- New GetMagickList() method to conveniently return the list of supported image formats.
- GetImageDepth() now returns an integral value between 1 and QuantumDepth and is no longer limited to the values 8, 16, and 32.
- SetImageDepth() supports setting the image depth to any integral value between 1 and QuantumDepth.
- GetImageChannelDepth() supports retrieving the modulus depth for a specified channel.
- GetImageChannelExtrema() supports retrieving the extrema for the specified channel.
- GetImageChannelMean() supports retrieving the mean and standard deviation for the specified channel.
- Added option methods to properly parse options and/or return their enumerated types.
- SetImageChannelDepth() supports setting the modulus depth for a specified channel.
- ProfileImage is updated to handle alpha channels and grayscale images.
- CompositeImage() now supports CopyCyanCompositeOp, CopyMagentaCompositeOp, CopyYellowCompositeOp, and CopyBlackCompositeOp, composition operators.
- Added support for returning the image histogram in the C, C++, PerlMagick, and MagickWand API's.
- The semaphore.h header is no longer installed or included in the API headers since these methods are private interfaces.
- Added new TrimImage() method.
- New map option, P, for padding pixels and O, for opacity when calling the ConstituteImage(), ExportImagePixels(), and ImportImagePixels() methods.
- Cache views grow dynamically now (suggested by Andrew Reid).
- Added EvaluateImageChannel() method to the API. Use it to apply an an arithmetic, relational, or logical operator to an image. These operations can be used to lighten or darken an image, to increase or decrease constrast an an image, or to produce the "negative" of an image.
- Added CombineImages() to combine several grayscale images into a single image (e.g. convert -channel RGB image.R image.G image.B -combine logo.png).
- The next/previous members of the configuration list such as the font, color, and image format list are deprecated. Instead use the new uniform Get????InfoList() method. For example, use GetColorInfoList() to get a ColorInfo structure for each color ImageMagick knows about. This change was thought necessary because the next/previous pointers could change in a threaded environment causing dangling pointers in some situations.

PerlMagick fixes/improvements:

- Adjusted a number of method option names so that they match the documentation.
- PerlMagick options use the new ImageMagick "options" API. This prevents options from getting out of sync with their enumerated types.
- Memory leak fixed.
- Added efficient method for retrieving a group of pixels (e.g. $image->GetPixels(x=>0,y=>10,height=>1)).
- Reading files (e.g. GIF) via a file descriptor is fixed.
- Get EXIF data with $im->Get('%[EXIF:*]').

Build improvements:

- Configure only configures for C & C++ languages.
- Configure now does a better job of figuring out how to build a threadsafe library across multiple operating systems.
- Configure incorporates a new mmap() test.
- Configure/build fixes for IBM's AIX operating system.
- New -method-prefix configure option to add a unique prefix for all Magick API methods.
- Updated autoconf to v2.59 and automake to v1.7.9.

Windows-specific improvements:

- Truetype fonts are now found under Windows 98.
- Added a Visual C++ workspace for ImageMagickObject.
- The static install package now uses the "uninstalled" configuration so that it does not depend on the Windows registry in order to run. This allows files from the static install package to be copied to another computer without running an installer.
- The executable search path is extended at run-time to include the directory where the CORE DLLs reside in order to ensure that they are found.
- Adding the -t option to VisualMagick configure enables building all of the coders into one library in order to save build time and simplify linkage.
- The XTRN coder now supports wide characters.
- IMDisplay displays a checkerboard pattern behind transparent images.
- Support is provided for issuing log messages to the Windows standard logging system.
- Updated version of LCMS used for Windows build to version 1.11.
- ImageMagick now compiles using Visual Studio .NET 2003.
- Updated TIFF library to V3.6.1, LCMS version to 1.12, FreeType version to 2.1.5, JBIG-KIT to version 1.5, libpng to version 1.2.5, libwmf to version 0.2.8.2, and zlib to version 1.2.1.
- Support for raw camera formats such as CRW.

VMS-specific improvements:

- Patch to get ImageMagick working under OpenVMS again.

License

- There is a new ImageMagick license (see http://www.imagemagick.org/www/Copyright.html). It is a Apache-style rather than BSD-style license to address the frequently-asked-questions about what the license permits you to do. It makes it more clear, in plain English, that ImageMagick is free and that you can do pretty much whatever you want with ImageMagick as long as you don't claim you wrote it.

We would like to give special thanks to several people who have contributed to ImageMagick, including:

Alexandra Christini - Validation, packaging, and release of ImageMagick

                            6.0.0 source and binaries.
    Kyle Shorter          - PerlMagick enhancements and bug fixes.
    Glenn Randers-Pehrson - Utilities, PNG, MNG, test scripts, documentation
                            enhancements.
    Lars Skyum            - PS3 coder and image profile enhancements.
    Anthony Thyssen       - ImageMagick 6.0.0 command line improvements and
                            validation suite.

Thanks to the folks at GraphicsMagick for numerous bug reports and fixes.

And the many folks that contributed patches and enhancements as described in http://www.imagemagick.org/www/Changelog.html.

"Image manipulation software that works like magick"