Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rillieux/photoselectandcrop
This package integrates a UIImagePickerController into a SwiftUI app. Obtain 1) a copy of the original image, 2) a scaled and / or cropped version of it, 3) a CGFloat and 4) CGPoint. The CGFloat and CGPoint represent the scale and position of the original image used to make the processed version.
https://github.com/rillieux/photoselectandcrop
crop-image imagepicker imagepickercontroller ios swiftui
Last synced: 7 days ago
JSON representation
This package integrates a UIImagePickerController into a SwiftUI app. Obtain 1) a copy of the original image, 2) a scaled and / or cropped version of it, 3) a CGFloat and 4) CGPoint. The CGFloat and CGPoint represent the scale and position of the original image used to make the processed version.
- Host: GitHub
- URL: https://github.com/rillieux/photoselectandcrop
- Owner: Rillieux
- License: mit
- Created: 2021-06-19T07:06:50.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-10-26T10:37:27.000Z (about 1 year ago)
- Last Synced: 2024-10-14T19:40:22.597Z (about 1 month ago)
- Topics: crop-image, imagepicker, imagepickercontroller, ios, swiftui
- Language: Swift
- Homepage:
- Size: 778 KB
- Stars: 101
- Watchers: 4
- Forks: 21
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Photo Select and Crop
=====================This Swift Package integrates a UIImagePickerController into a SwiftUI app and allows a user to select, scale and position an image to be cropped and saved as a conatct's photo, similar to the stock iOS Contacts app. To accomplish this, the project uses a `composeImageAttributes()` function to send four variables via bindings to the parent view:
1) a copy of the original `UIImage`,
2) a scaled and / or cropped `UIImage` version of it,
3) a `CGFloat`, and
4) a `CGPoint`.The `CGFloat` and `CGPoint` represent the scale and position of the original image used to make the processed version.
> :point_up: By saving the original image and scale and position markers and passing them to the `ImageMoveAndScaleSheet` view, if the user taps the "Change photo" button, the original photo is scaled and positioned to allow subsequent adjustments.
>## Implementation
Add an ImagePane view to your parent view like this:
`ImagePane(image: image, isEditMode: $isEditMode, renderingMode: renderingMode, colors: colors)`
Using CoreData, one might do the following. Define two entities: `Contact` and `ProfileImage`, where `Contact` has a `To One` relationship to `ProfileImage`. The `ProfileImage` entity should have properties that can be mapped to the variables provided to the `ImageDisplay` struct after the user has selected an image from their library.
Then, an `ImageAttributes` class should be initialized with the properties from the Core Data entity. This `ImageAttributes` class is then passed to the `ImagePane` as in the above code. For the nil case, a second `ImageAttributes` struct is initialzed, this time with a default image named `avatar` which was saved to the project's Image Assets folder.
An `ImageAttributes` object can easily be defined as a placeholder.
With an SF Symbol: `let placeholderAperture = ImageAttributes(withSFSymbol: "camera.aperture")`
With an image from the Assets folder: `let placeholderAvatar = ImageAttributes(withImage: "avatar")`
Examples of working apps using this Package can be found at: https://github.com/Rillieux/Contacts (using CoreData), and https://github.com/Rillieux/PhotoSelectAndCropDemo (a basic working implementation which does not cover persistence).