机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
照片编辑器
一个照片编辑器库,提供简单、易用的图像编辑支持,包括使用绘画、文字、滤镜、表情符号和贴纸等功能。
功能
- 在图片上绘图,可选择更改画笔的颜色、大小、不透明度、橡皮擦功能和基本形状。
- 使用 MediaEffect 在图片上应用滤镜效果。
- 添加/编辑文本,可选择更改颜色并使用自定义字体。
- 添加表情符号,使用自定义表情字体。
- Adding Images/Stickers
- 捏合手势缩放和旋转视图。
- 对画笔和视图进行撤销和重做。
- Deleting Views
- 编辑后保存照片。
- More FAQ.
- Lesson Learned from building successful android library PhotoEditor: Droidcon Berlin 2021
优势
- 无忧编码
- 提高效率
- 轻松图像编辑
入门
要开始这个,我们只需在我们应用模块的 gradle 文件中像这样添加来自 mavenCentral() 的依赖项
implementation 'com.burhanrashid52:photoeditor:3.1.1'
或者我们也可以从 sample 导入 :photoeditor 模块以进行进一步自定义
迁移
AndroidX
PhotoEditor v.1.0.0 已迁移到 AndroidX,并放弃了对旧的支持库的支持。API 没有变化。如果在迁移到 v.1.0.0 时遇到任何问题,请参考此 指南。如果问题仍然存在,你可以随时回滚到 v.0.4.0。欢迎任何修复的 PR :)
Kotlin
PhotoEditor v.2.0.0 已完全迁移到 Kotlin。Java 版本可使用 v.1.5.1。这两个版本之间没有破坏性的 API 变化。
设置视图
首先我们需要在我们的 XML 布局中添加 PhotoEditorView
<ja.burhanrashid52.photoeditor.PhotoEditorView
android:id="@+id/photoEditorView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:photo_src="@drawable/got_s" />
我们可以直接使用 app:photo_src 来定义我们的可绘制对象或颜色资源
我们可以通过从 PhotoEditorView 获取源来以编程方式设置图像,这将返回一个 ImageView,从而可以从资源、文件或 (Picasso/Glide) 加载图像
mPhotoEditorView = findViewById(R.id.photoEditorView)
mPhotoEditorView.source.setImageResource(R.drawable.paris_tower)
构建照片编辑器
要使用图像编辑功能,我们需要构建一个 PhotoEditor,这需要一个 Context 和一个 PhotoEditorView,我们必须在我们的 xml 布局中设置它
//Use custom font using latest support library
val mTextRobotoTf = ResourcesCompat.getFont(this, R.font.roboto_medium)
//loading font from asset
val mEmojiTypeFace = Typeface.createFromAsset(getAssets(), "emojione-android.ttf")
mPhotoEditor = PhotoEditor.Builder(this, mPhotoEditorView)
.setPinchTextScalable(pinchTextScalable) // set flag to make text scalable when pinch
.setDefaultTextTypeface(mTextRobotoTf)
.setDefaultEmojiTypeface(mEmojiTypeFace)
.build() // build photo editor sdk
我们可以根据需要自定义 PhotoEditor 中的属性
| 属性 | 用途 |
|---|---|
setPinchTextScalable() |
设置为 false 以禁用文本插入时的捏合缩放。默认值:true。 |
setClipSourceImage() |
设置为 true 以将绘图刷限制在源图像上。默认值:false。 |
setDefaultTextTypeface() |
设置在图像上添加的默认文本字体 |
setDefaultEmojiTypeface() |
设置用于添加表情符号的默认字体 |
就是这样,我们已经完成了库的设置
绘图
我们可以用不同的属性组合定制我们的画笔和颜料。要开始在图像上绘图,我们需要启用绘图模式。
| 类型 | 方法 |
|---|---|
| Enable/Disable | mPhotoEditor.setBrushDrawingMode(true); |
| 形状(画笔、线条、椭圆、矩形、箭头) | mPhotoEditor.addShape(shape) |
| 形状大小(像素) | mPhotoEditor.setBrushSize(brushSize) 或通过 ShapeBuilder |
| 形状不透明度(百分比) | mPhotoEditor.setOpacity(opacity) 或通过 ShapeBuilder |
| 形状颜色 | mPhotoEditor.setBrushColor(colorCode) 或通过 ShapeBuilder |
| Brush Eraser | mPhotoEditor.brushEraser() |
注意:每当我们设置画笔的任何属性进行绘图时,它将自动启用绘图模式
形状
我们可以从 v.1.5.0 绘制形状。我们使用 ShapeBuilder 来定义形状和其他属性。
val shapeBuilder = ShapeBuilder()
.withShapeOpacity(100)
.withShapeType(ShapeType.Oval)
.withShapeSize(50f)
photoEditor.setShape(mShapeBuilder)
更多详情请查看 ShapeBuilder。
滤镜效果
我们可以使用内置滤镜应用于源图像
mPhotoEditor.setFilterEffect(PhotoFilter.BRIGHTNESS)
我们也可以使用 Custom.Builder 应用自定义效果
更多详情请查看 自定义滤镜
文字
使用 addText 并带有命名可选参数:
photoEditor.addText(
text = inputText,
colorCodeTextView = colorCode
)
除非您提供字体,否则它使用构建器的默认字体:
photoEditor.addText(
text = inputText,
textTypeface = mTypeface,
colorCodeTextView = colorCode
)
要将文本放置在默认中心位置之外,请提供一个 Position :
photoEditor.addText(
text = inputText,
position = Position(80, 160),
colorCodeTextView = colorCode
)
Java 调用者必须显式提供所有参数:
mPhotoEditor.addText(inputText, null, new Position(80, 160), null, colorCode);
插入后,文本仍然可以在画布上拖动、旋转和缩放。
在示例应用中,终端用户的流程现在是:
- Tap
Text. - 点击图像中标签应该出现的位置。
- 在对话框中输入文本。
重复相同的流程,在图像的不同位置添加多个文本标签。
为了编辑文本,我们需要视图,该视图将在我们的 PhotoEditor 回调中收到。当我们长按已添加的文本时,该回调将触发。
mPhotoEditor.setOnPhotoEditorListener(new OnPhotoEditorListener() {
@Override
public void onEditTextChangeListener(View rootView, String text, int colorCode) {
}
});
现在我们可以以这样的视图编辑文本
mPhotoEditor.editText(rootView, inputText, colorCode);
如果您想对文本进行更多自定义,请参阅维基页面以获取更多详细信息。
表情符号
我们可以通过 PhotoEditor.getEmojis(getActivity()); 添加表情符号,它将返回一个表情符号的 Unicode 列表。
mPhotoEditor.addEmoji(emojiUnicode);
它将使用构建器提供的默认字体。如果我们想为不同的表情符号使用不同的表情符号字体,我们可以像这样为每个表情符号设置字体
mPhotoEditor.addEmoji(mEmojiTypeface,emojiUnicode);
添加图片/贴纸
我们需要提供一个位图来添加我们的图像 mPhotoEditor.addImage(bitmap);
撤销与重做
mPhotoEditor.undo();
mPhotoEditor.redo();
删除
要删除文本/表情/图片,我们可以点击视图以切换视图高亮框,该框将有一个关闭图标。因此,通过点击该图标我们可以删除视图。
保存
从 v.3.0.0 起,我们可以使用协程将图像保存到文件:
// Please note that if you call this from a fragment, you should call
// 'viewLifecycleOwner.lifecycleScope.launch' instead.
lifecycleScope.launch {
val result = photoEditor.saveAsFile(filePath)
if (result is SaveFileResult.Success) {
showSnackbar("Image saved!")
} else {
showSnackbar("Couldn't save image")
}
}
你也可以从 Java 保存图像到文件。当编辑后的图像被保存时,我们需要提供一个带回调方法的文件。
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");
}
});
有关更多详细信息,请参见 Saving
如何贡献?
- 查看贡献指南 👉CONTRIBUTING.md
有问题吗?🤔
在推特上联系我
常见问题解答
我可以在我的应用中免费使用这个库吗?
是的。这是一个开源库,可以免费使用。如果这个库节省了你的时间,那么给一点认可会增加我改进这个库的动力 :)
它支持裁剪功能吗?
目前没有。我开始在分支 [PE-79]( https://github.com/burhanrashid52/PhotoEditor/issues/79 ) 上构建。但由于时间限制,我放弃了这个想法。任何与 CROP 相关的 PR 都欢迎 :)
应用过滤器时遇到问题?
滤镜效果是使用 `GlSurfaceView` 应用的,而该功能的实现引起了许多问题。需要考虑其他替代解决方案。问题在这里 [列表]( https://github.com/burhanrashid52/PhotoEditor/issues?q=is%3Aissue+is%3Aopen+filter )。
是否支持其他平台(iOS、Web、Flutter)?
不。目前,我们的重点是改进安卓库。我们没有针对 [其他平台]( https://github.com/burhanrashid52/PhotoEditor/issues/24 ) 的任何计划。
其他已知问题
[Image Scaling](https://github.com/burhanrashid52/PhotoEditor/issues/10).
[Memory Issue in Filter](https://github.com/burhanrashid52/PhotoEditor/issues/48).
谁在使用 PhotoEditor?
注意:我很乐意将您的应用添加到列表中。请与我联系提供详细信息。您知道如何联系我 :)
鸣谢
这个项目的灵感来自 PhotoEditorSDK
买杯咖啡
如果你觉得这个项目对你有帮助,或者你从源代码中学到了东西并想感谢我,可以考虑请我喝一杯 ☕️ BuyMeACoffee
从构建成功的安卓库 PhotoEditor 中学到的经验:Droidcon 柏林 2021
Open source Support by JetBrains
MIT 许可
版权所有 (c) 2022 Burhanuddin Rashid
特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人无限制处理该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向其提供软件的人在符合以下条件的前提下这样做:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不附带任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途适用性及非侵权的保证。在任何情况下,作者或版权持有人均不对因合同、侵权或其他原因而引起的任何索赔、损害或其他责任承担责任,无论这些责任是否与软件或使用软件或其他交易相关。
- 本文标题:PhotoEditor - 一个照片编辑器库
- 本文链接:https://www.cn121.com/editor/burhanrashid52-photoeditor.html
- 原项目:burhanrashid52/PhotoEditor 版权归原作者 burhanrashid52 及贡献者所有
- 收录信息:本站于 2026-10-27 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 burhanrashid52/PhotoEditor。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。