A Photo Editor library with simple, easy support for image editing using paints,text,filters,emoji and Sticker like stories.
- Drawing on image with option to change its Brush's Color,Size,Opacity and Erasing.
- Apply Filter Effect on image using MediaEffect
- Adding/Editing Text with option to change its Color with Custom Fonts.
- Adding Emoji with Custom Emoji Fonts.
- Adding Images/Stickers
- Pinch to Scale and Rotate views.
- Undo and Redo for Brush and Views.
- Deleting Views
- Saving Photo after editing.
- Hassle free coding
- Increase efficiency
- Easy image editing
-
Add the following repository to your
allprojects { ... repositories { ...
block inside your project root levelbuild.gradle
:maven { url "https://maven.pkg.github.com/Kigamba/PhotoEditor" credentials { username = "Kigamba" password = "34c7ebe0cf00321084e5c30e9f088c1f4c36007d" } }
eg.
allprojects { ... repositories { maven { url "https://maven.pkg.github.com/Kigamba/PhotoEditor" credentials { username = "Kigamba" password = "34c7ebe0cf00321084e5c30e9f088c1f4c36007d" } } } }
-
Add the dependencies in gradle file of app module like this
implementation 'ja.burhanrashid52:photoeditor:0.3.3'
or your can also import the :photoeditor module from sample for customization
First you need to add PhotoEditorView
in your xml layout
<ja.burhanrashid52.photoeditor.PhotoEditorView
android:id="@+id/photoEditorView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:photo_src="@drawable/got_s" />
Your can define your drawable or color resource directly using app:photo_src
Your can set the image programmatically by getting source from PhotoEditorView
which will return a ImageView
so that you can load image from resources,file or (Picasso/Glide)
PhotoEditorView mPhotoEditorView = findViewById(R.id.photoEditorView);
mPhotoEditorView.getSource().setImageResource(R.drawable.got);
To use the image editing feature you need to build a PhotoEditor which requires a Context and PhotoEditorView which we have setup in our xml layout
//Use custom font using latest support library
Typeface mTextRobotoTf = ResourcesCompat.getFont(this, R.font.roboto_medium);
//loading font from assest
Typeface mEmojiTypeFace = Typeface.createFromAsset(getAssets(), "emojione-android.ttf");
mPhotoEditor = new PhotoEditor.Builder(this, mPhotoEditorView)
.setPinchTextScalable(true)
.setDefaultTextTypeface(mTextRobotoTf)
.setDefaultEmojiTypeface(mEmojiTypeFace)
.build();
You can customize the properties in the PhotoEditor as per your requirement
Property | Usage |
---|---|
setPinchTextScalable() |
set false to disable pinch to zoom on text insertion.By default its true |
setDefaultTextTypeface() |
set default text font to be added on image |
setDefaultEmojiTypeface() |
set default font specifc to add emojis |
That's it we are done with setting up our library
We can customize our brush and paint with different set of property.To start drawing on image we need to enable the drawing mode
Type | Method |
---|---|
Enable/Disable | mPhotoEditor.setBrushDrawingMode(true); |
Bursh Size (px) | mPhotoEditor.setBrushSize(brushSize) |
Color Opacity (In %) | mPhotoEditor.setOpacity(opacity) |
Brush Color | mPhotoEditor.setBrushColor(colorCode) |
Brush Eraser | mPhotoEditor.brushEraser() |
Note: Whenever you set any property for brush for drawing it will automatically enables the drawing mode
You can apply inbuild filter to the source images using
mPhotoEditor.setFilterEffect(PhotoFilter.BRIGHTNESS);
You can also apply custom effect using Custom.Builder
For more details check Custom Filters
You can add the text with input text and colorCode like this
mPhotoEditor.addText(inputText, colorCode);
It will take default fonts provided in the builder,If you want different fonts for different text you can set typeface with each text like this
mPhotoEditor.addText(mTypeface,inputText, colorCode);
In order to edit the text you need the view which you will receive in you PhotoEditor callback.This callback will trigger when you Long Press the added text
mPhotoEditor.setOnPhotoEditorListener(new OnPhotoEditorListener() {
@Override
public void onEditTextChangeListener(View rootView, String text, int colorCode) {
}
});
Now you can edit the text with a view like this
mPhotoEditor.editText(rootView, inputText, colorCode);
You can add the Emoji by PhotoEditor.getEmojis(getActivity());
which will return a list of emojis unicode.
mPhotoEditor.addEmoji(emojiUnicode);
It will take default fonts provided in the builder,If you want different Emoji fonts for different emoji you can set typeface with each Emoji like this
mPhotoEditor.addEmoji(mEmojiTypeface,emojiUnicode);
You need to provide a Bitmap to add you Images mPhotoEditor.addImage(bitmap);
mPhotoEditor.undo();
mPhotoEditor.redo();
For deleting a Text/Emoji/Image you can click on the view to toggle the view highlighter box which will have a close icon so by on clicking on the icon you can delete the view
You need provide a file with callback method when edited image is saved
```
mPhotoEditor.saveAsFile(filePath, new PhotoEditor.OnSaveListener() {
@Override
public void onSuccess(@NonNull String imagePath) {
Log.e("PhotoEditor","Image Saved Successfully");
}
@Override
public void onFailure(@NonNull Exception exception) {
Log.e("PhotoEditor","Failed to save Image");
}
});
```
- Publishing to Github packages
Make sure that the kigamba-publish.gradle
file has the correct url
, username
and password
.
Call ./gradlew photoeditor:assemble
to generate the aar and then call
./gradlew photoeditor:publish
to publish to the Github packages repository.
- Publishing to local maven repository
Call
./gradlew photoeditor:publishAarPublicationToMavenLocal
and addmavenLocal()
on your target project
For more detail check Saving
- Check out contribution guidelines 👉CONTRIBUTING.md
- Croping Image with Custom Aspect ratio and more customization text/emoji/stickers
This project is inspired from PhotoEditorSDK
If you found this project helpful or you learned something from the source code and want to thank me, consider buying me a cup of ☕️ PayPal
Copyright (c) 2018 Burhanuddin Rashid
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.