PdfBoxProcessor returns HTTP 400 when given an illegal page number.
FfmpegProcessor returns HTTP 400 when given an illegal time.
The -Dcantaloupe.cache.purge VM option accepts an identifier argument to purge all content related to an individual identifier.
Added a RESTful API endpoint to purge individual images from the cache.
A cache=false URL query option can be used in all endpoints to bypass the derivative cache and disable the Cache-Control header per-request.
FilesystemCache supports identifiers longer than the filesystem's filename length limit.
Watermarks have been renamed to overlays.
Added textual overlays.
Overlay images can be located on the filesystem or an HTTP(S) server.
Overlay images are cached in memory for better efficiency.
Added an optional delegate method invocation cache.
Added the ability to redirect to another URL via the authorized?() delegate method.
The delegate script is reloaded on change rather than per-request.
Fixed all processors except JaiProcessor treating scale-to-dimensions requests (w,h) as scale-to-fit (!w,h).
Fixed a bug affecting upscaled crops when using pyramidal images with Java2dProcessor or JaiProcessor.
Worked around a bug in JAI involving downscaling of compressed TIFF tiles, affecting JaiProcessor.
Fixed inability to upscale in JaiProcessor, omitted in error from 3.2.2.
Fixed incorrect scale size computation using flooring instead of rounding.
Fixed a bug in FilesystemCache that could cause an HTTP 500 error when accessing the same uncached info.json resource concurrently.
FilesystemCache cleans up zero-byte files created in certain situations, typically involving failure in the underlying storage.
Fixed a bug that could cause incompletely-written cached images (with any cache) to not get cleaned up properly.
Fixed inability to upscale by pixels.
Fixed an error in response to requests for images less than 3 pixels on a side when sharpening is enabled, in all processors using the Java 2D pipeline.
Fixed an error in JaiProcessor when attempting to scale an image less than 3 pixels on the smallest side.
Fixed a bug in FilesystemCache that caused zero-byte files to be written and an HTTP 500 response when handling concurrent identical requests.
Error responses include a more appropriate Cache-Control header rather than the one set in the configuration.
Trailing slashes in X-Forwarded-Path header values are trimmed off, preventing double-slashes from appearing in generated URLs.
Fixed a bug that caused the resolver selected by the get_resolver() delegate method to not be initielized properly.
Fixed a path-handling bug affecting ImageMagickProcessor and GraphicsMagickProcessor primarily in Windows.
Fixed incorrect image sizes when using FfmpegProcessor with percentage scales above 100%.
Improved support for 16-bit source images in Java2dProcessor, JaiProcessor, GraphicsMagickProcessor, and ImageMagickProcessor.
Java 8 is now required.
Significant efficiency improvements in the Java 2D processing pipeline affecting Java2dProcessor, JaiProcessor, and KakaduProcessor.
All processors that use the Java 2D pipeline (Java2dProcessor, KakaduProcessor, OpenJpegProcessor, PdfBoxProcessor) support selectable upscaling and downscaling filters.
Improved the scale quality of JaiProcessor.
All processors offer configurable sharpening levels.
Applicable processors respect source ICC color profiles.
Added the option to copy EXIF, IPTC IIM, XMP, and/or native TIFF and PNG metadata from source images to derivative images of the same format, for some processors.
Java2dProcessor and JaiProcessor respect the value of an embedded EXIF Orientation tag.
Increased the default Java2dProcessor/JaiProcessor JPEG quality to 0.8 (80).
Added support for a X-IIIF-ID request header, in order to return correct image identifiers in information responses whose requests have passed through a reverse proxy using a different identifier.
Removed the JAI post-processor option for KakaduProcessor and OpenJpegProcessor.
Zero-byte files are deleted when purging or cleaning FilesystemCache.
KakaduProcessor and OpenJpegProcessor display a less inscrutable error message when they are unable to read a source file.
HTTP 415 is returned instead of HTTP 400 when an output format is requested that is valid but unsupported by the current processor.
Colorized the console application log.
Console application log messages with a severity of WARN and above are routed to standard error.
Upgraded a number of libraries.
Fixed a resource leak that would cause landing pages, error pages, and the Control Panel to become inaccessible after a long time running.
Fixed a bug where the watermark wouldn't be added if redactions were enabled and set to use DelegateScriptStrategy but the delegate script was disabled.
Fixed tile sizes in the IIIF Image API 2.x information response when using KakaduProcessor.
HTTP 400 is returned in response to a request for an image that would be zero pixels on a side, even when the zero dimension is not explicit in the request. (For example, a size of 4, for an image that is at least five times wider than it is tall.) (Previously, it was only returned when zero pixels was explicitly requested, and the image returned for implicit zero sizes was incorrect.)
Added the http.host and https.host standalone mode configuration options, defaulting to listen on 0.0.0.0 (all interfaces).
Added support for version 2.1 of the IIIF Image API.
Added support for the square region parameter to all processors.
Added the max size parameter.
Removed the information request Link header for the JSON-LD context.
Added the sizeByConfinedWh and sizeByDistortedWh feature names, supported by all processors.
Added the maxArea property to the profile description, based on the value of the max_pixels configuration key.
Replaced the get_iiif2_service delegate method with extra_iiif2_information_response_keys.
Fixed a broken build in standalone mode.
Added a Control Panel for web-based configuration changes.
Changed the distribution archive to a custom .war file that can be run standalone (as before) or in a Servlet container.
Added the ability to restrict available sizes to those specified in the info.json response in the IIIF Image API 2.0 endpoint.
Added an optional source image cache, which can improve the performance of StreamProcessors, as well as enable FileProcessors to work with StreamResolvers.
Moved JdbcResolver delegate methods to the delegate script.
Moved resolver-related delegate methods to submodules to improve organization.
Changes to the logging configuration are applied immediately without restarting.
Requests for more than max_pixels receive an HTTP 403 response rather than 500.
Upgraded the Amazon S3 client to version 1.10.56.
Upgraded the Restlet framework to version 2.3.7.
Improved the performance of FilesystemCache under load.
A FilesystemCache cache can be safely shared across multiple server instances.
Improved the efficiency of JdbcCache.
Added the -Dcantaloupe.cache.clean startup argument.
Java2dProcessor and JaiProcessor support BigTIFF source images.
Java2dProcessor uses a scale-appropriate source subsampling factor for improved performance at reduced scales.
ImageMagickProcessor and GraphicsMagickProcessor support a custom background color with non-90°-multiple rotations, and use a transparent background for output formats that support it.
IIIF information responses include native image tile sizes (or multiples), if available, and inverse multiple sizes, if not.
The X-Forwarded-For header is respected.
cache.server.resolve_first works with the IIIF Image API 1.1 endpoint.
Redesigned the website.
Moved documentation content to a versioned user manual.
Fixed an HTTP 500 error when an invalid size parameter was used in an IIIF Image API endpoint.
Fixed a bug in Java2dProcessor where an unnecessarily large TIFF pyramid level would be used when scaling by percent.
Changed the JaiProcessor scaler to use nearest-neighbor interpolation in order to work around a bug in JAI.
Added a delegate script method for authorization.
Optimized JaiProcessor for tiled images.
Made some aspects of JaiProcessor's JPEG and TIFF output configurable.
Made Java2dProcessor's TIFF output compression configurable.
Added SyslogAppenders for the application and access logs.
Added support for sizeAboveFull.
Changed the cache structure used by FilesystemCache to better accommodate large numbers of images.
Fixed a SAXParserException in KakaduProcessor that could occur in OpenJDK 8.
Upgraded JRuby to 220.127.116.11.
Upgraded the Restlet framework to 2.3.6.
Fixed FilesystemCache failing to delete incompletely-written images (as due to e.g. a broken connection).
Fixed a Java2dProcessor cropping bug affecting PNG and GIF source formats.
Fixed a JaiProcessor scale-to-fit-inside bug.
Redesigned internal APIs to abstract internal processing operations away from request processing directives and leverage Java NIO, where appropriate.
Added an IIIF Image API 1.1 endpoint, moving the 2.0 endpoint to /iiif/2 to accommodate it.
Added support for SSL/TLS connections over HTTPS.
Most configuration file changes are auto-detected and applied without restarting.
Resolvers can be chosen dynamically using a custom Ruby delegate method.
FilesystemResolver, HttpResolver, and AmazonS3Resolver can use a custom Ruby delegate method.
Added support for custom service profiles in the IIIF Image API 2.0 information endpoint.
Added configuration options to improve downscaling quality with Java2dProcessor and KakaduProcessor.
Enhanced Java2dProcessor's efficiency with tiled source images.
Added multi-resolution TIFF support to JaiProcessor.
Improved the efficiency of KakaduProcessor and FfmpegProcessor.
Improved the robustness of FilesystemCache.
JdbcResolver and JdbcCache use a JDBC connection pool.
JdbcCache uses transactions for nonatomic operations.
Added an option to auto-purge missing (HTTP 404) images from the cache.
Added an option to limit the pixel count of returned images, to prevent overloading the server.
Fixed a bug in KakaduProcessor that caused some images to be blurry.
Made the Content-Disposition header configurable.
Replaced the generate_https_links configuration option with the base_uri option.
Added the cache.server.resolve_first configuration option.
Added a cache.client.enabled key to the config file.
Switched to the Simple HTTP server.
Fixed TIFF reader not being included in the JAR, affecting Java2dProcessor and JaiProcessor.
Sped up TIFF decoding in Java2dProcessor.
Added configurable logging.
Added a configuration option to generate links using the https scheme.
Added memory and VM arguments information to the landing page and startup log.
Added client-side caching.
Added HTTP Basic authentication.
Added a sizes key to information responses.
Renamed ImageIoProcessor to Java2dProcessor.
Java2dProcessor supports pyramidal TIFF.
Improved the thread-safety of FilesystemCache.
Improved the security of FilesystemResolver.
Source images are streamed directly rather than being re-encoded when the
IIIF parameters request a full-size, unmodified image.
Cantaloupe is now distributed as a .zip archive.
Added optional server-side caching.
Added configurable path separators in FilesystemResolver and HttpResolver.
The application version is displayed on the landing page and in a startup log message.