编辑器 活跃维护

PhotoEditor

burhanrashid52/PhotoEditor

一个照片编辑器库,支持使用画笔、文字、滤镜、表情和贴纸等进行简单、轻松的图像编辑。

4530
Stars 标星
1051
Forks 分支
102
Watchers 关注
57
Open Issues
Kotlin
主要语言
MIT
开源协议
21.4 MB
仓库大小
29 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:burhanrashid52/PhotoEditor
git clone https://github.com/burhanrashid52/PhotoEditor.git
git clone git@github.com:burhanrashid52/PhotoEditor.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

照片编辑器

一个照片编辑器库,提供简单、易用的图像编辑支持,包括使用绘画、文字、滤镜、表情符号和贴纸等功能。

Download link

功能

优势

  • 无忧编码
  • 提高效率
  • 轻松图像编辑

入门

要开始这个,我们只需在我们应用模块的 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);

插入后,文本仍然可以在画布上拖动、旋转和缩放。

在示例应用中,终端用户的流程现在是:

  1. Tap Text.
  2. 点击图像中标签应该出现的位置。
  3. 在对话框中输入文本。

重复相同的流程,在图像的不同位置添加多个文本标签。

为了编辑文本,我们需要视图,该视图将在我们的 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

如何贡献?

有问题吗?🤔

在推特上联系我

常见问题解答

我可以在我的应用中免费使用这个库吗?

是的。这是一个开源库,可以免费使用。如果这个库节省了你的时间,那么给一点认可会增加我改进这个库的动力 :)

它支持裁剪功能吗?

目前没有。我开始在分支 [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?

  1. Pixxo
  2. Couple Blog: Long distance
  3. Screenshot Tile (NoRoot)

注意:我很乐意将您的应用添加到列表中。请与我联系提供详细信息。您知道如何联系我 :)

鸣谢

这个项目的灵感来自 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 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。