[Magick-announce] Announcing ImageMagick 6.0.0
yarrow at studio.imagemagick.org
yarrow at studio.imagemagick.org
Thu Apr 15 07:03:51 PDT 2004
* * * please redistribute widely * * *
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.
For a list of sites where you can download ImageMagick 6.0.0 go to
http://www.imagemagick.org/www/download.html
For a general overview of ImageMagick go to
http://www.imagemagick.org
-------------------------------------------------------------------------------
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 thread-
safe 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 ImageMagick 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.
More information about the Magick-announce
mailing list