Core support for displaying, resizing and manipulating images
Version 2.8.0b1:
- Change: Removed support for the old FoxyCart and FoxyCart Bundle modules
- Change: The img view now checks that the skin in a skin image URL is an installed skin
- Change: The Resize Item Images tool now escapes item titles in its progress messages and numbers each item once
- Change: Image resizing and the Resize Item Images tool no longer lower a PHP memory_limit that is set higher than 1024M (Jamroom Core 7.1.0b1+)
- Change: Animated GIF images requested at the "original" size, or when the convert binary is missing, are now served unresized instead of queued
- Change: WebP uploads are now checked to be valid images, get their width and height stored, and the minimum/maximum width settings apply to them
- Change: A stale image cache prune lock (over 15 minutes old) is now only removed - the process ID stored in it is no longer sent a SIGTERM
- Change: HEIC/HEIF uploads are now converted to JPG with the ffmpeg bundled with System Tools 2.3.0b1 instead of tifig (requires Jamroom Core 7.1.0b1)
- Bug Fix: The recycle bin image view (rb_image) did not require an admin user and did not validate the recycle bin id
- Bug Fix: The TinyMCE image upload view now requires a logged in user, a same-site request and an image file allowed by the user's Quota
- Bug Fix: Deleting an image from a form now only accepts an image field of the item
- Bug Fix: The image delete view now uses the same permission and field checks as the form image delete button, and clears the resized image cache
- Bug Fix: When an image could not be resized the original uploaded file was sent instead - the default image is now shown and the error is logged
- Bug Fix: Resized JPEG images were always saved at quality 75 - they now use the "jpeg_quality" setting (default 85); reset the image cache to apply it to cached images
- Bug Fix: On PHP 8 very wide or tall images at small sizes, and image filters with a missing or non-numeric value, caused a fatal error instead of an image
- Bug Fix: An admin image rebuild (rebuild=1) created a separate cached file and did not refresh the image shown by the normal URL
- Bug Fix: The upload minimum and maximum width checks used the width from before the image was rotated for its EXIF orientation (portrait photos could be enlarged)
- Bug Fix: The Resize Item Images tool resized images that are for sale (it only checked the price of file attachments)
- Bug Fix: Freeing disk space by pruning the image cache logged "deleted 1 cached images" whatever was deleted, and never retried with a shorter age
- Bug Fix: Deleting the image cache of an item left its cache link behind when the item and profile ids were in different directory groups
- Bug Fix: Image sizes added by "get_allowed_image_widths" event listeners were only available to the first image shown on a page
- Bug Fix: On PHP 8 an image field with the Form Designer option "multiple|true" caused a fatal error on the update form when the item already had images
- Bug Fix: The upload response for a PNG or GIF converted to JPG still reported the old file extension and size
- Bug Fix: The image conversion view logged a database error for every request with a malformed conversion key
- Bug Fix: The img view answered a request for a missing module or skin image with an empty "200 OK" response instead of a 404
- Bug Fix: The System Check did not warn about missing HEIC support when the PHP Imagick extension was loaded without HEIC support in ImageMagick
- Bug Fix: The first response for a JPEG image with the rounded, cut or reflection filter (PNG output) and the animated GIF "working" image were sent with the wrong Content-Type
- Bug Fix: Animated GIF images written by ImageMagick (and other GIFs with an extension block after each frame's control block) were not detected as animated and were resized to a single frame
- Bug Fix: Resized animated GIF images were stretched instead of cropped for crop sizes
- Bug Fix: The "image cache size" dashboard panel showed "0" for caches of 1 terabyte or more
- Bug Fix: An image form field whose label contains a double quote produced a broken "alt" attribute for the existing image
- Bug Fix: Cached images kept the privacy they were cached with when a profile moved to another quota or its quota's privacy settings changed - the image cache is now cleared for them
- Bug Fix: Image URLs with a zero-padded item id (e.g. /01/) showed the default image instead of the item's image
- Bug Fix: Portrait iPhone HEIC photos were saved sideways when the PHP exif extension was not installed, and HEIC files not created by iOS 11 could not be converted
- Bug Fix: a default image changed by a listener (Gravatar) was cached once and then served for every item
- Developer: imagedestroy() calls replaced by unset() - it has done nothing since PHP 8.0, deprecated in PHP 8.5 and removed in PHP 9
Version 2.7.2:
- Change: Improved HEIC image detection for better conversions with ImageMagick and tifig
- Change: tifig HEIC image conversions now use a timed system call to prevent locking up
Version 2.7.1:
- New: "image_delete" event trigger fired when images are manually deleted in a form
Version 2.7.0:
- New: HEIC / HEIF image conversions to JPG added using PHP ImageMagick support
- New: Added support for WebP images (.webp)
- New: "jpeg_quality" advanced config key added for controlling converted JPG quality setting
- Change: Updated view structure to support new updates in Jamroom Core 6.5.12+
- Change: Updated Image form display to allow more skin customization
- Bug Fix: module "default" item image caching could cause too many cached images in cache/jrImage
- Bug Fix: Watermarking of images for sale may not work correctly
Version 2.6.5:
- Change: Removed "Fast Resizing" global config option due to low quality image conversion
Version 2.6.4:
- Bug Fix: Multiple image upload fields may not show images in correct order when updating
Version 2.6.3:
- New: "form_image_right_container" class added to image form display area
Version 2.6.2:
- Change: Further tweaks and updates to custom default SVG image handling
Version 2.6.1:
- Change: Updates to support changes in PHP 8
- Bug Fix: Custom default SVG images may not always show correctly
Version 2.6.0:
- New: Support added for "item" parameter when using the {jrImage_display} template function
- New: Ability for templates to run image size conversions via a queue entry
- Bug Fix: Custom "default" images for modules may show default SVG instead
Version 2.5.1:
- New: Update to cache default SVG images for modules to speed up rendering
Version 2.5.0:
- New: "Enable Lazy Loading" global config setting to enable image lazy loading
- New: Images shown in forms can now be viewed in a lightbox when clicked
- New: Support added for using SVG files as the default module item image
- New: "image_display_params" event called in {jrImage_display} template function
- Bug Fix: Minimum Image Width may not always resize correctly on upload
- Bug Fix: Some images may not be rotated correctly based on Orientation EXIF flag
Version 2.4.0:
- New: Updated upload_saved event listener to properly handle EXIF Orientation flag on upload
Version 2.3.3:
- Change: Removed unneeded install.php script - internal settings handled in config.php
Version 2.3.2:
- Bug Fix: Changing profile privacy may not reset entire local image cache for profile_id
- Bug Fix: Image resize tool could include images that had already been resized
Version 2.3.1:
- Bug Fix: Image delete Javascript function may not work correctly on page with multiple forms
Version 2.3.0:
- New: iOS 11+ HEIC and HEIF images can be uploaded and will be converted to JPG
- Bug Fix: Cached images may not show in the Documentation module if group permisions were set
Version 2.2.1:
- New: Added 12mb, 16mb, 20mb, 24mb and 32mb options for Max Image File Size
Version 2.2.0:
- New: "Fast Resizing" Global Config added to enable or disable using epeg for JPG image resizing
Version 2.1.2:
- New: 'delete_profile_image_cache_directory' event fired when the cache directory for a profile is deleted
- New: 'delete_image_cache_for_item' event fired when the image cache for an item is deleted
- Bug Fix: Deleting an image from an item form was not always resetting the image cache for the item
- Bug Fix: Existing custom field image may not show in custom Profile and User form fields
Version 2.1.1:
- Bug Fix: Some images correctly resized by epeg binary may report as having encountered an error
Version 2.1.0:
- New: "cached_image" event added that is fired with image full path when a cached image is created
- New: Added "jfi" and "jif" as valid JPEG image extensions
- Change: Small performance optimization when resizing images
- Bug Fix: "Resize Item Images" tool could "hang" due to running out of allowed PHP memory
Version 2.0.11:
- New: "itemprop" HTML attribute can be used in jrImage_display function when called from a template
Version 2.0.10:
- New: Delete button added to images on update forms to make it easy to remove existing images
Version 2.0.9:
- New: jrImage_display function will now let crossorigin="" through as a parameter
Version 2.0.8:
- New: Support added for "fillcolor" parameter to define RGB color for background when using "fill" crop
- Bug Fix: Possible corruption of some JPG images when using the Image Resize Tool
Version 2.0.7:
- Change: Resize Images Tool updated with support for all modules with a DataStore or Attachment support
- Change: Added larger image sizes in the "Max Item Sizes" dropdown select in the Resize Images tool
Version 2.0.6:
- Bug Fix: Image enlargement without a "crop" parameter may not enlarge image
Version 2.0.5:
- New: "get_allowed_image_widths" event trigger added to allow custom image widths
Version 2.0.4:
- New: "item_image_info" event trigger fired with item info before displaying image
- Change: Improved performance when displaying "original" image if allowed in Global Config
- Bug Fix: Some images may not be linked to correctly in the image cache
- Bug Fix: Possible memory error when resizing with watermark or filters on very large images
Version 2.0.3:
- Bug Fix: Some images were not being create correctly in the cache
- Bug Fix: Some uploaded images were not having their height detected correctly
Version 2.0.2:
- Change: caching of module default images improved to use less disk space
Version 2.0.1:
- Bug Fix: Watermark may show on free images if "Only Images for Sale" Quota Config is active
Version 2.0.0
- New: Optimized image cache handling to speed up non-private image requests by up to 50%
- New: Support for "epeg" image resizing to speed up thumbnailing of large JPEG images
- New: "Resize Animated GIFs" global config option to disable resizing of animated GIF images
- New: "Minimum Image Width" global config option to enforce a minimum image width allowed for upload
- New: image crop feature now accepts x-offset and y-offset: crop=16:9 can now be set as crop=16:9:0:0
- New: Support added to display images for items in Recycle Bin that have images
- Change: Updated to support new System Tools module plus functions from System Core 6.1.0
- Change: Resizing of animated GIF images moved to Queue worker
- Change: "default.png" and new "working.png" default images have been updated
- Bug Fix: "original" size for JPEG images were not being handled correctly when embedded
- Bug Fix: some image upload locations that should only allow one image to be uploaded were allowing many
Version 1.5.3:
- Change: In progress lock added to prevent simultaneous resize requests for animated GIF images
- Bug Fix: numeric image size could cause smarty error when using {jrImage_display}
Version 1.5.2:
- Bug Fix: False error "tinymce_imagetools failed to save the adjusted file" if editor was visible on Timeline
Version 1.5.1:
- Bug Fix: PNG transparency being set to black on some images when resizing to "small" size or smaller
Version 1.5.0:
- Change: Image resizing performance increased for large images being resized to small sizes
Version 1.4.15:
- Bug Fix: 'original' sized images could incorrectly have a width attribute set
- Bug Fix: jrImage_is_alpha_png() may return FALSE on some PNG images that have transparency
Version 1.4.14:
- New: Image Editing options now available for images when using the WYSIWYG editor
- New: Form Designer image field now supports multiple images (number allowed defined in options)
Version 1.4.13:
- New: "default_image" event fired before displaying the default image
- New: Image fields added by the Form Designer can have their own default image
- New: Image size 'original' shows original uploaded image if enabled in Global Config
Version 1.4.12:
- Change: Reset Image Cache queue sleeps for a bit to ensure all access is to new cache directory
- Bug Fix: Default Profile Privacy not being checked when checking if a profile is private
Version 1.4.11:
- New: Ability for skin to override a module image by placing image at Skin/img/Module_Name.ext
Version 1.4.10:
- Change: Reset Image Cache tool moved to Queue Worker to better handle large sites
Version 1.4.9:
- Bug Fix: Default user image not over-rideable via ACP upload
- Bug Fix: When default image for the image module is replaced, 'active' setting not being respected
Version 1.4.8:
- Change: "max" form field parameter support to set different max upload amount on a per field basis
Version 1.4.7:
- Custom skin images may not show correctly when re-uploaded in "Images" tab in ACP
Version 1.4.6:
- Change: {jrImage_display} now allows item_id = 0 to display "default" user or item image
Version 1.4.5:
- New: JPG images will be rotated based on EXIF Orientation flag (if present in image EXIF data)
Version 1.4.4:
- New: "Resize Item Images" Tool to limit image sizes and reduce server disk usage
Version 1.4.3:
- Bug Fix: "Convert to JPG" Config option may not work properly with some GIF images
Version 1.4.2:
- New: Updated to work properly with latest Profile Privacy options
Version 1.4.1:
- Change: Internal updates to work with new Active Media System core global config option
Version 1.4.0:
- New: "Watermark Cutoff" Quota setting to disable watermark on images less than XX pixels in width
- New: "Only Images for Sale" Quota setting to only apply watermark to images that are for sale
Version 1.3.2:
- Change: Removed "convert" ImageMagick binary - now uses OS version if installed
Version 1.3.1:
- New: Image Magick "convert" binary included in jrImage/tools directory
- New: System Check listener to verify convert binary is executable
- Change: improved 304 "Not Modified" header support for better browser caching
- Change: Animated GIF images under 56px wide are converted to image of first frame
- Bug Fix: Some animated GIFs were being corrupted when being resized
Version 1.3.0:
- New: Support for resizing Animated GIFs has been added
Version 1.2.5:
- New: support for skipping default cropping adding by using crop="none"
Version 1.2.4:
- New: "module_image" and "skin_image" event triggers fired for module or skin image/img views
- Change: Dashboard panel that shows size of cached images updated so modifier is on separate line
- Bug Fix: "img" and "image" views not working with custom headers set by other modules
Version 1.2.3:
- Bug Fix: Multiple images in same form only showing image delete (if enabled) on first image
Version 1.2.2:
- New: Update to support new custom Dashboard Panels in Jamroom Core 5.2+
Version 1.2.1:
- Bug Fix: using the new ratio crop support could result in resized images showing vertical distortion
version 1.2.0:
- New: new "ratio" crop support for passing in crop values such as 16:9, 4:3, etc.
Version 1.1.6:
- Bug Fix: passing "false" as width param to jrImage_display function not working properly
Version 1.1.5:
- New: "Convert to JPG" Global Config to convert PNG and GIF images to JPG format on upload
Version 1.1.4:
- Change: Update to support new Form Designer plugin format for "image" field
Version 1.1.3:
- New: 304 Not Modified support for images so browsers can show cached images
- New: Support for "jfif" image file extension (JPEG File Interchange Format)
Version 1.1.2:
- New: "Delete Cached Images" global config to control frequency of cache cleanup
Version 1.1.1:
- Bug Fix: rounded and cut filters dropping pixel size parameter for top left corner
Version 1.1.0:
- New: Watermark settings in Quota Config for adding watermarks to images
- New: "fill" crop type to preserve aspect ratio and letterbox the resulting image
Version 1.0.9:
- Bug Fix: Some large images may fail to convert due to not enough PHP memory being allocated
Version 1.0.8:
- Bug Fix: Image override for default image from image tab was not working
Version 1.0.7:
- New: Multiple filter support on same image when parameters are separated by a comma
- Bug Fix: rounded, cut and reflection filters were not working properly
Version 1.0.6:
- Bug Fix: CSS image url not working for overridden images
Version 1.0.5:
- New: "portrait" crop parameter moves the cropping to the upper portion of the image instead of the center
Version 1.0.4:
- New: "img" view for supporting custom images defined in CSS files
Version 1.0.3:
- Expires header on images not working for images that had not been modified in last 100 days
Version 1.0.2:
- Added new "img_src" event trigger - Fired in jrImage_display before returning URL to use in img src parameter.
- Added img URL versioning to prevent browsers from caching changed images.
- Added support to form image display section to show multiple images if the "multiple" form flag is enabled.
Version 1.0.0:
- Initial release