- Added an option to show a close button in the
CameraViewController
. SeeCameraViewControllerOptions. showCancelButton
,CameraViewControllerOptions.cancelButtonConfigurationClosure
andCameraViewController.cancelBlock
for more details. - Added full support for right-to-left languages.
- Fixeed an issue where the flash icon would not be visible while the camera was in video mode.
- Fixed an issue where all Objective-C bridged
SpriteModel
s were of typePESDKSpriteModel
instead of their concrete subclasses. - Fixed an issue with the toolbar having the wrong size while the keyboard was active on an iPhone X.
- Fixed an issue where focus would not work in the camera after switching from back to front camera.
- Fixes an issue with the transform tool not rotating correctly.
- Fixes an issue where an overlay would not be applied when selecting the 'Normal' blend mode.
- Fixes an issue with the size of rotated stickers on iOS 10.
- Overlays and blur handle transparency correctly now.
TextFontToolControllerOptions.fontSelectorViewConfigurationClosure
andTextFontToolControllerOptions.handleButtonConfigurationClosure
work as expected now.- Fixes an issue with undoing brush strokes.
- Fixes an issue where the undo or redo buttons would be active although there was nothing to undo/redo.
- Fixes a bug where video recording would take a long time to stop on older devices.
- Fixes a rare crash with the license checker on iOS 9.
- Added a check that verifies that no two assets have the same identifier.
- Added a
Photo
class that wraps different types of image data. AddedPhotoEditViewController(photoAsset:configuration:menuItems:photoEditModel:)
andPhotoEditPreviewController(photoAsset:photoEditModel:)
and deprecated all previous initializers of both classes in favor of those. Please take a look at the API documentation for thePhoto
class, as using it correctly can have a huge impact on the memory footprint of the SDK. - Added
accessibilityIgnoresInvertColors
where needed. - PNG support, see
PhotoEditViewControllerOptions.outputImageFileFormat
for more details. - Added
PESDK.renderPipelineBlock
which can be used to modify each stage of the render pipeline.
- The top screen edge system gesture is now deferred to avoid conflicts with the transform tool.
- The touchable area for
leftButton
andrightButton
in the toolbar is wider now. - Removed all server calls for enterprise licenses.
- Fixed invalid license check in
BrushColorToolController
andTextOptionsToolController
. - Improved performance and memory usage.
- Fixed a bug where
FrameToolControllerOptions.cellConfigurationClosure
would not be called.
- Fixed a crash when narrowing the text bounding box while zoomed in on the image.
- Added haptic feedback for supported devices.
- Added class replacement support for
StickerImageView
,FrameImageView
,SpriteLabel
,Painting
andCanvasView
.
- Made the
BrushSpriteModel
initializers public.
- Fixed a bug where custom fonts would not be loaded.
- Fixed an issue where sticker and sticker category thumbnails would sometimes have lower resolution.
- Added the possibility to change a sticker's brightness, contrast and saturation. Take a look at
Sticker.allowBrightnessAdjustment
,Sticker.allowContrastAdjustment
,Sticker.allowSaturationAdjustment
andStickerAction.brightness
,StickerAction.contrast
,StickerAction.saturation
for more details. - iPhone X support for
CameraViewController
. - Added
TextToolControllerOptions.dimmingViewConfigurationClosure
.
Font
expects anURL
instead of aString
now.
- Fixed a misplaced title view on iOS 9 when embedding the
PhotoEditViewController
inside aUINavigationController
. StickerToolController
displays the currently selected sticker category as its title again.- The color picker's saturation and brightness picker updates as expected now when saturation is set to 0 and the user drags the hue picker.
ColorPickerViewController
andFontSelectorViewController
didn't calladdChildViewController(_:)
anddidMove(toParentViewController:)
for their containedSpriteEditController
, resulting in layout issues.
- Fixed a bug where static frames would not be shown.
- Made
PhotoEditViewController.init(photo:data:configuration:menuItems:photoEditModel:)
public to enable subclassingPhotoEditViewController
. - Fixed new warnings generated by Xcode 9.1 beta.
- Fixed a bug where undo and redo would not work correctly when drawing out of bounds within the brush tool.
- Full support for iOS 11 and Swift 4.
- Added rotation gesture support to
FrameToolController
(disabled by default). - Added serialization format v3.0.0, which can be used to serialize and deserialize edits across all platforms.
- Added support for the iPhone X to
PhotoEditViewController
.
- Completely refactored the sprite handling code. Sprites (stickers, text, brush and frames) are now directly rendered on top of the image instead of rendering a view snapshot. This results in better looking images, better performance and more robust code.
- Completely refactored
PhotoEditViewController
and allPhotoEditToolController
subclasses. We make heavy use of composition and container view controllers now, leading to better support for customizations and custom user interfaces. - All view controllers and views can be replaced by a custom subclass using
PESDK.replaceClass(_:with:)
for even better customization options. - Undo and redo is now supported by all tools. The sticker, text and brush tools continue to have a local undo/redo stack in addition to the global undo/redo stack.
- Fixed an issue where the selected crop rectangle would change after tapping the apply button in the transform tool.
- Fixed an issue where focus would change its appearance and position after transform.
- Fixed an issue where the color saturation and brightness picker would sometimes not update while dragging the hue picker.
- The
PhotoEditViewController
can now be pushed onto a navigation controller that uses a translucent navigation bar. - Fixed various layout issues with the transform and frame tools.
- Fixed a crash when quickly switching between a sticker and text.
- Removed the transparent color from the default color palette for text color and brush color.
- The
ToolbarController
class has been removed. An instance ofPhotoEditViewController
can now be used directly.
- Fixed a layout issue in tool controllers when zooming is disabled.
- Fixed a memory issue while deserializing.
- Fixed an issue in the transform tool where the selected crop rectangle would sometimes not match the actual crop rectangle.
- Fixed an issue with the image renderer emitting a warning.
- Serialization version 2.0.0 has been deprecated in this release and will not be supported by future versions of the SDK. Please use PhotoEditor SDK 8.0 with serialization version 3.0.0 instead.
PhotoEditViewController
has a new property calledhasChanges
, which istrue
if a user applied any changes to a photo.StickerToolControllerOptions
has a new property calleddefaultStickerCategoryIndex
that can be used to specify the index of the initially selected sticker category.- All
UICollectionViewCell
subclasses can be replaced with custom subclasses usingConfiguration
'sreplaceClass(_:replacingClass:moduleName:)
method.
TransformToolController
now sends a.transformStraightenAngleChange
analytics event for changes of the straighten angle.TransformToolController
now includes.cropRect
,.straightenAngle
and.aspectRatio
attributes in its.applyChanges
analytics event.- When adding or removing a sticker a
.stickerAdd
or.stickerRemove
analytics event is sent with the associated sticker as a.sticker
attribute. Those events are also sent when adding or removing a sticker by tapping the undo/redo buttons. - When adding or removing text a
.textAdd
or.textRemove
analytics event is sent with the associated text as a.text
attribute. Those events are also sent when adding or removing text by tapping the undo/redo buttons. TextOptionsToolController
now includes.text
,.font
,.textColor
,.backgroundColor
and.alignment
attributes in its.applyChanges
analytics event.
CameraViewControllerOptions
includes aincludeUserLocation
property now that istrue
by default. It can be used to stop the camera from asking for the user's location.
LoggerProtocol
is now aclass
protocol because loggers are required to be reference types in the current implementation.
- Fixed several smaller bugs regarding deserialization.
- Sometimes the cropping area would be resized while modifying the straighten angle.
- Memory is not copied twice anymore during painting fragment restoration.
- The project compiles with Xcode 9 now.
- The camera tags photos with their location now. This only works when using
Data
instances instead ofUIImage
instances to pass the photo around because those strip EXIF data. SeeCameraViewController.dataCompletionBlock
for more details. - We added a default confirmation dialog when dismissing the editor with changes pending. This can be changed or disabled by setting
PhotoEditViewControllerOptions.discardConfirmationClosure
.
- The preview image is now automatically resized when a slider overlays the preview at the bottom, so that is always completely visible.
- We replaced the gaussian blur used in the focus tool with a lens blur like effect for much better looking photos. This does not work on the following older devices where we continue to use a gaussian blur due to performance issues:
- iPad mini 1st, 2nd and 3rd gen
- iPad 2nd and 3rd gen
- iPhone 4S
- iPod touch
- Fixed various issues with the serialization and deserialization features.
- Fixed an issue with different color spaces used for the preview and the thumbnails in the filter tool.
- Stickers now use anti-aliasing.
- The icon of the 'No Frame' cell in the frame tool is now tinted with the cell's
tintColor
to better match other cells. - The label of the 'Magic' cell in the main menu is now tinted with the cell's
tintColor
when highlighted to better match other cells. - The
Slider
now sends a.touchUpInside
event after a.touchDown
event has been sent without dragging in between. - When adding a frame to a photo it would sometimes not completely cover the preview image (by about 1 px).
- When selecting a sticker with its
tintMode
set to.none
and then dismissing theStickerOptionsToolController
, the color option would be visible for a split second during the dismissal animation. - The
BoxGradientView
andCircleGradientView
now only draw themselves while visible, resulting in a minor performance improvement. - Sprites didn't have the correct position for a split second when opening the frame tool.
- Sprites would be rotated in the wrong direction when the photo has been flipped.
- Text bounding box resizing would be inverted if the image has been flipped and rotated.
- Added the ability to zoom using a pinch gesture within the
CameraViewController
.
- The icon of the 'No Overlay' option in the overlay tool was not using its @2x and @3x variants.
- Fixed a bug with the new filters and adjustments.
- Fixed interface rotation support.
- The SDK has been renamed from
imglyKit
toPhotoEditorSDK
and all class prefixes have been renamed fromIMGLY
toPESDK
. Likewise the CocoaPod has been renamed toPhotoEditorSDK
. - We now ship the framework as a DMG file and include the dSYM file and bcsymbolmaps for better debugging. To integrate the dSYM into your final app, please follow the updated manual integration guide.
- The
PESDK.shared
singleton has been removed. All of its properties are now static properties on thePESDK
class. - The default progress view must be set using the static
PESDK.progressView
property instead of theConfiguration
closure. - The integrated fonts have been changed.
- The
AdjustToolController
has been improved for much better looking and faster adjustments. - We were able to significantly decrease the size of our filter's lookup images while also improving the filter's performance.
- All asset names have been changed to a consistent naming scheme.
- The overall look and feel of the
FrameToolController
has been improved. - Custom stickers are now added by setting
Sticker.all
, custom fonts are added by settingFontImporter.all
, custom frames are added by settingFrame.all
and custom overlays are added by settingOverlay.all
instead of using theConfiguration
class.
- Serialization and deserialization has been added. Because of this many classes (e.g.
Sticker
,Frame
) now require anidentifier
. For more information please see the documentation. - The
OverlayToolController
tool has been added, which can be used to add overlays to a photo. Please see the documentation for more information. - A custom logger with varying log levels was added. See documentation for more information.
- The
Sticker
class now supports.colorized
as itstintMode
. See the API documentation for more information. - A 3:2 crop aspect has been added to
TransformToolController
's defaults. - An Emoticon and a Shapes sticker set has been added.
TextFontToolControllerOptions
now has afontSelectorViewConfigurationClosure
property and ahandleButtonConfigurationClosure
property for better customization.StickerToolControllerOptions
now has astickerPreviewSize
property to adjust the size of the stickers in the preview.
- The Toy sticker set has been removed.
- The button to show/hide the font selector view within the
TextFontToolController
now respects the view'stintColor
. - Full accessibility support has been restored.
- With the color picker expanded you can now tap anywhere above it to dismiss the color picker.
- We restored iOS 8 compatibility in this release. Please note that this only means that the framework can be integrated into a target with iOS 8 as its deployment target. However most classes and especially all view controllers are not available on iOS 8. We strongly advise that you disable any editing functions for users running iOS 8.
- We replaced the set of included fonts with much better looking fonts.
- Fixed a crash when adding text. This was introduced by the Swift 3.1 compiler, see SR-4393 for more details.
- Fixed an issue with the
forceCropMode
setting.
- This version is compiled with Swift 3.1 and can be used with Xcode 8.3. It does not contain any other changes.
- Fixed a scaling issue regarding backdrops.
- Sticker and text overlays have a bigger touch area so that they are easier to grab.
- Fixed a rare crash in
CameraViewController
that occurred when disabling focus lock while deallocating the controller.
- Added a
discardConfirmationClosure
property toPhotoEditViewControllerOptions
that is called when tapping the cancel button while changes are applied to the image. - Zooming is now enabled in all tools except for the focus tool.
- The overlay buttons (i.e. undo, redo, etc.) in the sticker, text and brush tool have been moved to the bottom.
StickerTintMode.tint
has been renamed toStickerTintMode.solid
.StickerTintMode.ink
has been renamed toStickerTintMode.colorized
.- When adding long text the created label breaks the text into multiple lines if the font size would be too small otherwise.
IMGLYSetLocalizationDictionary
has been replaced byPESDK.localizationDirectory
.IMGLYSetLocalizationBlock
has been replaced byPESDK.localizationBlock
.IMGLYSetBundleImageBlock
has been replaced byPESDK.bundleImageBlock
.
DefaultProgressView
was not positioned correctly when used in an iPad Split View environment.- The menu collection views were not positioned correctly when used in an iPad Split View environment.
- Fixed warnings that are generated by SwiftLint 0.16.1.
- Moved the overlay image generation to a background queue, so that the progress view appears immediately when the user taps the save button.
- Fixed an ambiguous constraints warning in
CameraViewController
. - Fixed an issue where the loading progress view would disappear while presenting the editor.
- Added an option to change the default color of newly added text (see
TextToolControllerOptions.defaultTextColor
). - A progress view is displayed while generating the preview image now.
- Tinting of stickers can be enabled on a per sticker basis (see
Sticker.tintMode
). - Crop Aspect Ratios can be rotated by tapping on an already selected crop aspect (see
CropAspect.isRotatable
).
- Changed the default icon of the transform tool.
- The magic tool displays a selected state when active.
- The
.straighten
option has been removed from the default options ofTextOptionsToolController
andStickerOptionsToolController
. - The
.flip
option has been removed from the default options ofTextOptionsToolController
. - The alignment, bring to front, straighten and flip buttons within
TextOptionsToolController
were moved from an overlay into the menu. - When resizing text the bounding box of the text becomes wider along with the font size.
- While the
BrushColorToolController
is active the user can continue to paint in the canvas. - Editing text works by just single tapping on an already selected label instead of long pressing.
- The delete button within the brush tool was moved to the top, the bring to front button was moved from an overlay into the menu.
- The flip, straighten and bring to front buttons within
StickerOptionsToolController
were moved from an overlay into the menu.
- Fixed a crash that occurred when opening the transform tool very quickly after presenting the editor.
- Fixed an issue with the brush tool that occurred when opening the brush very quickly after presenting the editor.
- Fixed an issue where the progress view would not disappear when tapping the save button.
- Fixed an issue regarding the frame tool and rotated images.
- Fixed a bug where a crop would sometimes be applied although the user tapped the cancel button.
- When changing a text the changes are reflected in the label while typing.
- Fixed a crash in
CameraController
.
- Support for wide color images. More information is available here.
- Added redo support and optimized undo support. Each time the sticker, text or brush tool is openend, a new undo/redo stack is created and local changes within those tools can be un- and redone. The
PhotoEditViewController
also has support for undo and redo and performs all undo or redo operations of the tools mentioned above combined, either step by step or tool by tool (seePhotoEditViewControllerOptions.undoStepByStep
).
M_PI
has been replaced by.pi
,FLT_EPSILON
has been replaced by.ulpOfOne
- Adding a new sticker from within the
StickerOptionsToolController
now opens the already instantiatedStickerToolController
that was passed toPhotoEditViewController
instead of creating a new instance. - The blur radius specified in the
FocusToolController
is now relative to the smaller side of the image instead of an absolute value, which means that the final output image looks like the preview image.
- Fixed a crash that occurred when setting
CameraViewControllerOptions.showFilters
tofalse
.
- Fixed a crash in
CameraViewController
. - The
photoActionButtonConfigurationClosure
closure was not called initially. - Changing the
tintColor
of the button to take a photo works now.
- Added default intensities for blend modes.
- Changed some
enum
s to lower case to match Swift 3.0 naming conventions.
- Fixed a memory leak in
CameraViewController
. - Fixed a memory leak in
FrameToolController
. - Fixed a scaling issue for backdrop images.
- Fixed the Podspec so that the resource bundle is not added twice to projects that use CocoaPods to integrate the SDK.
- A new API to integrate the SDK into your analytics. See
AnalyticsClient
andPESDK.shared.analytics
for more details. - Added an option to set a backdrop image (
backdropImage
), a blend mode (backdropBlendMode
) and an intensity (backdropIntensity
) for it toPhotoEditModel
.
- Fixed a bug regarding image orientation that occurred when saving an unedited image. The image that was passed to
PhotoEditViewController
is now passed back to the delegate untouched when saving and image without any modifications.
- Dynamic frames, which are generated during runtime and adjust to the image based on a given set of rules, similar to 9-patch images. See
CustomPatchFrameBuilder
for more information.
- Frames participate in the bring-to-front behavior so that stickers, text and brush can be moved behind or in front of frames.
- Licensing has been improved to support multiple bundle identifiers within one license.
- Licensing
- Stickers can be grouped into individual categories and their color can be changed by the user.
- New initializers for
PhotoEditViewController
:init(data: Data)
,init(data: Data, configuration: Configuration)
andinit(data: Data, menuItems: [MenuItem], configuration: Configuration)
which allow passing an image as data in which case EXIF information can be preserved. PhotoEditModel
is a Swiftstruct
now. When using Objective-C you can useIMGLYBoxedPhotoEditModel
instead where needed.
- The crop UI has been completely revised and supports arbitrary rotations now.
- Updated the UI of the focus tool so that the user can change the width of the focus gradient.
- Updated the overall look and feel of the UI.
- Custom fonts can be added to the SDK.
- Many performance improvements.
- Asset datasources support remote sources out of the box now.