跳转到主要内容

使用cropper JS库在Plone中手动裁剪图片

项目描述

https://github.com/collective/plone.app.imagecropping/workflows/tests/badge.svg https://coveralls.io/repos/collective/plone.app.imagecropping/badge.png

我为什么需要这个?

自动裁剪已经可能,plone.namedfile 已经通过 模式 参数来处理这个问题

<img tal:define="scales context/@@images"
     tal:replace="structure python: scales.tag('image',
                  width=1200, height=800, mode='contain')"
     />

但是它只从图片的顶部/中心裁剪,所以在某些情况下这并不是你想要的。

plone.app.imagecropping 允许你使用 cropper JavaScript 库手动选择每个可用图像比例的裁剪区域

它的工作原理

对于通过对象操作实现 IImageCroppingMarker 的每个内容类型,都有一个可用的视图 @@croppingeditor。对于基于 Archetypes 和 Dexterity 的类型,有特定的标记

  • plone.app.imagecropping.dx.IImageCroppingDX

  • plone.app.imagecropping.at.IImageCroppingAT

这些接口默认由基于 Dexterity 的 plone.app.contenttypes (Plone 5 或 Plone 4.x 作为插件) Image 实现。 Products.ATContentTypes (Plone 4.x) 在 ATImageATNewsItem 上实现。

还有一个名为 Enable Image Cropping 的 Dexterity 行为,它可以应用于至少包含一个图像的自定义内容类型。

编辑器视图在顶部有一个选项卡导航,并有两个列

  • 选项卡导航上的图像字段。

  • 左侧的图像比例列

  • 右侧的裁剪编辑器列。

编辑器中裁剪区域的宽高比自动设置为用户选择的图像比例。

https://raw.github.com/collective/plone.app.imagecropping/master/docs/editor.png

存储在此比例中的图像将被替换为裁剪和缩放后的版本。这样,你可以像往常一样访问它们。例如

<img tal:replace="structure context/@@images/image/mini" />

这也为富文本编辑器,如 TinyMCE,提供了支持,可以将裁剪后的比例插入到文本字段中。

自动裁剪行为

你可以像往常一样使用 mode='contain' 为自动裁剪比例。此包覆盖了 mode 并在可用时提供裁剪比例。

作为叠加层加载编辑器

编辑器还可以在任何地方作为叠加层加载。只需放置一个指向图像 @@croppingeditor URL(<image_base_url>/@@croppingeditor)的链接,并添加一些 JavaScript。例如

(function($) {
    $(function() {
        $("a[href$='@@croppingeditor']").prepOverlay({
            subtype:'ajax',
            formselector:'#coords',
            closeselector:"input[name='form.button.Cancel']"
        })

        $(document).bind("formOverlayLoadSuccess", function() {
            imagecropping = new ImageCropping();
            imagecropping.init_editor();
        })
    })
})(jQuery);

待办事项:显示如何与 mockup/patterns 一起使用。

配置

Plone 站点设置 下的 内容 中有一个新的设置 图像裁剪。在那里你可以限制在裁剪编辑器中显示的比例。默认情况下显示所有比例。

你还可以使用 plone.app.registry 机制(文件 registry.xml)在你的(策略)产品配置文件中设置这些值。

更多信息

历史

长期以来都需要裁剪,并且有许多不同的插件可以实现这一功能。

有一个 plip #10174 要求将图像裁剪添加到 plone 核心中,最近被 FWT 否决。裁剪功能应首先进入一个插件,该插件也可以为 Dexterity 工作,并且可以被集成到核心中。

本软件包旨在成为 Plone 的最佳裁剪解决方案,它“即装即用™”。

设计决策

  • 尽可能使此软件包具有最小侵入性

    • 因此我们立即存储裁剪后的图像,这样 plone.namedfile 遍历器就不必关心裁剪

    • 用户可以像访问缩略图一样访问裁剪后的图像(因此它也适用于富文本编辑器)

  • 支持 archetypes 和 dexterity 内容

  • 存储裁剪后的图像而不是缩放图像。如果您想恢复未裁剪的图像缩放,则需要从编辑器中删除裁剪版本

从版本1.x到2.0的更改信息

  • 仅适用于 Plone 5.1。

  • 新的 JavaScript 库 cropper

  • 使用模式完全重写 JavaScript。

  • 新的编辑器布局。

  • 使用 Ajax 保存/删除。

从版本0.1到1.0的更改信息

archetypes 的标记接口从 plone.app.imagecropping.interfaces.IImageCropping 更改为 plone.app.imagecropping.at.IImageCroppingAT

基于 dexterity 的类型的标记接口从 plone.app.imagecropping.browser.scaling.interfaces.IImageCroppingScale 更改为 plone.app.imagecropping.dx.IImageCroppingDX

通用基接口现在是 plone.app.imagecropping.interfaces.IImageCroppingMarker。请勿直接在您的应用程序中使用它,而应使用标记将视图或其他适配器绑定到启用图像裁剪的类型。

可能的扩展/未来的更改

  • 允许在图像控制面板中将缩放标记为 自动裁剪。这允许在不手动定义裁剪区域的情况下裁剪缩放,但需要在 Plone 中进行一些更改(扩展遍历器,更改控制面板)

  • 另请参阅 问题跟踪器

  • 彼得·马蒂斯(petschki)

  • 约舒亚·克鲁茨基(joka)

  • 哈拉尔德·弗里斯内格(fRiSi)

  • 马尔滕·茨韦斯特拉(themask96)

  • 丹尼尔·维德林(saily)

  • 沃尔夫冈·托马斯(pysailor)

  • 埃克托尔·韦尔瓦尔德(hvelarde)

  • 汤姆·格罗斯(tom_gross)

  • 延斯·W.克莱因(jensens)

  • 本杰明·施泰纳(benniboy)

  • 彼得·霍尔泽(agitator)

致谢

plone.app.imagecropping 的基本概念已经实现在 Yiorgis 的 plone.app.imaging 分支

由 Fengyuan Chen 发布的库 cropper 在 MIT 许可下发布,并从 plone.app.imagecropping 版本 2.0 开始用于 JavaScript 部分以选择裁剪区域。

源代码

如果您想帮助开发(改进、更新、错误修复等)plone.app.imagecropping,这是一个很好的想法!

代码位于 github collective

您可以通过克隆它并发送拉取请求或 获取对 github-collective 的访问权限 并直接在项目的分支上工作。

变更日志

3.0.3 (2023-10-25)

错误修复

  • 修复了当没有缩略图可用时对非管理员产生误导信息的消息 [laulaz] (#141)

  • 修复了最小裁剪大小实现,以支持当前的 cropperjs 版本。[maethu] (#150)

  • 点击重置按钮时重置到最后保存的状态。[petschki] (#153)

3.0.2 (2023-10-09)

错误修复

  • 包装更新:修复旧导入并更新资源。[petschki] (#143)

  • 修复了在更改裁剪信息后重新创建 image_scale 目录元数据和更新哈希键。[petschki, mrTango] (#144)

  • 修复了使用通用设置配置文件注册 plone.imagecropping 行为并删除 zcml 接口/类注册。[petschki] (#145)

  • 在删除裁剪信息时更新目录元数据。[petschki] (#146)

  • 升级依赖项。[petschki] (#148)

3.0.1 (2023-07-07)

错误修复

  • 更新资源。[petschki] (#0)

  • 确保在裁剪图像后更改哈希键。[mathias.leimgruber]

内部

  • 更新配置文件。[plone 开发人员] (c1677eef)

3.0.0 (2022-10-25)

  • 修复了裁剪区域可见性中的错误。[petschki]

3.0.0a1 (2022-10-05)

重大变更

  • 仅适用于 Plone 6。

  • 移除了 Archetypes 支持。

  • 带有模块联邦集成的 ES6 资源

  • cropper 移至 cropperjs 库 [petschki]

2.2.2 (2020-03-11)

  • 避免未定义缩放时的错误:#101 [laulaz]

  • 在 Plone 扩展控制面板中隐藏升级配置文件。[rpatterson]

2.2.1 (2019-07-17)

  • 添加缺失的法语文本 [mpeeters]

2.2.0 (2019-04-24)

  • 修复在上下文中存在 'images' 文件夹时的错误:#96 [laulaz]

  • 修复 Python 3 和 Plone 5.2 兼容性 [cillianderoiste]

2.1.0 (2018-07-03)

  • 修复计算具有一个维度设置为 0 的图像大小的 ZeroDivisionError。[thet]

  • 添加意大利文翻译。[cekk]

  • 修复裁剪动作按钮的 i18n 域。[cekk]

  • 修复 Archetypes 兼容性。[davisagli, thet]

2.0.1 (2017-02-27)

  • 根据 Plone 最佳实践注册资源。[thet]

2.0 (2016-11-24)

  • 仅对已登录用户加载 plone_app_imagecropping 捆绑包。[agitator]

  • 更新样式 删除未使用的设置 [agitator]

  • 依赖 Products.CMFPlone 而不是 Plone(默认不包含 Archetypes)。修复条件 zcml。[jensens]

2.0b6 (2016-11-18)

  • 添加西班牙文翻译 [erral]

2.0b5 (2016-11-06)

  • 将编辑器模板布局与 Plone 标准 对齐,并将其放置在 content-core 宏中。[thet]

  • 限制导航选项卡中的图像大小,以免超过选项卡大小。[thet]

2.0b4 (2016-07-13)

  • 修复:在修改包含图像的内容后,比例丢失。通过使用来自 plone.scale/plone.namedfile 的新比例工厂来解决。需要 plone.namedfile 4.0+ 和 plone.scale 1.5+。[jensens]

2.0b3 (2016-04-29)

  • 修复:启用意外禁用的资源注册表中的 JS 捆绑包。[jensens]

2.0b2 (2016-04-01)

  • 为 IImageCroppingBehavior 提供简短名称。[jensens]

  • 修复:使 croppingeditor 与 pat-modal 兼容。[jensens]

2.0b1 (2016-03-29)

  • 运行 i18ndude 并将新的/缺失的字符串翻译成德语。[jensens]

  • 使用更现代的 cropper Javascript 库,淘汰 JCrop 并重写所有 JS。现在它使用模式来初始化 cropper 和图像选择。[jensens]

  • 代码重构和大规模改造,使其与 Plone 5(仅限)和新的 JS 兼容。[jensens]

  • 整理:在单个位置升级,zca 装饰器,travis 缓存 [jensens]

  • 添加更多荷兰文翻译。[maurits]

  • 添加法文翻译。[laulaz]

1.3 (2015-12-10)

  • 在编辑裁剪信息后引入变更/移除事件 [petschki]

  • 移除初始内容滚动(即 location.hash)[petschki]

  • 使用“application/javascript”媒体类型而不是过时的“text/javascript”。[hvelarde]

  • 修复 direction=’down’ 处理。如果有裁剪比例,则提供裁剪比例。[petschki]

  • 在裁剪时如有必要,清除代理缓存。[alecm]

  • 修复裁剪对于非 blob 图像(例如 ATNewsItem 图像)消失的问题。[alecm]

  • 重构升级步骤以减少内存消耗并避免在运行 supervisor’s memmon 的实例上重启。[hvelarde]

1.2 (2014-10-15)

  • 添加芬兰本地化 [datakurre]

  • 修复 Chameleon 兼容性 [datakurre]

  • 移除对 plone.app.contenttypes 的硬依赖,以避免与 Plone 4.2 的兼容性问题(修复 #57)。[hvelarde]

  • 更新包依赖。[hvelarde]

  • 修复 dx 图像类型复制粘贴时的错误 #52 [pysailor]

  • 自动不包括 testing.zcml 并使用测试-dx-type 的行为。

    注意:我们不再自动为 plone.dexterity.content.DexterityContent 提供裁剪制作器界面,请使用 plone.app.imagecropping.behaviors.IImageCroppingBehavior 来启用裁剪功能。[fRiSi]

1.1 (2014-09-13)

  • 保存后滚动到中间列中选定的比例。[jensens]

  • 在编辑器视图中使用字段名称(而不是 ID)。现在样式略有改进。[jensens]

  • 添加从 0.1 迁移到 1.0 的升级步骤 [fRiSi]

1.0 (2014-09-05)

  • 将jcrop图像固定以避免错误缩放。[jensens]

  • 优化裁剪初始选择,同时在左侧列中标记缩放比例,裁剪/未裁剪,并显示未裁剪的默认外观。[jensens]

  • 修复:由于其基类不支持灵巧类型,已移除对Traverse的注册。[jensens]

  • 添加订阅者以在复制的对象上重新创建所有缩放。[saily, jensens]

  • 修复JCrop初始化过程中的某些故障。[jensens]

  • 添加图像裁剪的灵巧行为。[benniboy]

  • 主要清理,将代码和接口拆分为Dexterity和Archetypes。还重命名/移动接口以用作标记!注意,在自定义代码中,需要在小范围内进行修改,以指向正确的接口。请参阅README以获取详细信息。还删除了一些冗余/未使用的interface=传递到IImageCroppingUtils的方法。[jensens]

  • 更新Jcrop到版本0.9.12。[hvelarde]

  • 使用plone.app.robotframework而不是从头开始编写所有关键字。这为我们带来了自动登录支持,以加快机器人测试。重写测试以测试场景。[saily]

  • 停止支持Plone 4.1和测试。[saily]

  • 清理代码,与Plone的所有编码约定对齐。Pep8,Flake8,pep3101,排序导入,删除分组导入等……[saily]

  • 清理/重构JavaScript代码,不要定义全局变量。[saily]

  • 添加coveralls,代码分析和更新travis配置。[saily]

  • 检查plone.namedfile不是Dexterity。它可以单独使用。如果使用plone.namedfile,则需要至少版本2.0.1 [tomgross]

  • @@croppingeditor现在在控制面板中显示消息以添加可裁剪的缩放,如果没有可显示的裁剪缩放。(以前这会导致一个SiteError)[fRiSi]

  • imagecropping_keywords.txt重命名为keywords.robot,以便在plone.app.robotframework中简单重复使用。[saily]

  • 为travis-ci引导固定zc.buildout=2.1.1 [petschki]

  • 添加俄语翻译 [bogdangi]

  • 防止当前字段失去字段名 [bogdangi]

  • 修复#21(修改图像时重置裁剪)[tomgross, fRiSi]

  • 仅在Travis-CI上测试Python 2.7的Plone 4.2和4.3。[tomgross]

0.1rc2 (2013-05-03)

  • 仅包括认证用户的样式。[saily]

  • 使测试在Plone 4.1中工作 [saily]

  • acceptance重命名为robot,以符合新的plone.app.robotframework指南。[saily]

  • 固定plone.app.testing以使Plone 4.1测试工作。[saily]

  • 使用带有额外[robot]plone.app.testing的正确依赖项。[saily]

  • 使用robotframework添加裁剪ui测试 [saily]

  • 更新bootstrap.py以与zc.buildout 2.0协同工作。[saily]

  • 实现了#11 - 将图像缩放标记为“可裁剪” [jensens]

  • 添加控制面板和注册表的测试。

  • 添加西班牙语和巴西葡萄牙语翻译 [hvelarde]

  • 进行小的文档更新 [saily]

0.1rc1 (2013-03-11)

  • 添加对多个图像字段的支持

  • 重构JavaScript包含,以便可以将编辑器作为覆盖层加载

  • 修复编辑器不可见时的JS错误(即编辑器在覆盖层中加载)

  • 修复编辑器作为覆盖层加载时的编辑/删除操作

  • 使编辑器视图更方便(禁用列)

  • 更新文档 [petschki]

0.1b1 (2013-03-03)

  • 在仅Dexterity网站上使裁剪工作 [pysailor]

  • 添加travis集成 [saily]

0.1a2 (2012-11-10)

  • 修复测试

  • 为Plone 4.1-4.3添加测试设置

  • Products.CMFPlone依赖项。目前我们只支持Plone >= 4.1

  • 使Dexterity支持可选 [petschki]

0.1a1 (2012-11-05)

  • 公共alpha版本 [petschki]

  • 使用templer创建包 [fRiSi]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

plone.app.imagecropping-3.0.3.tar.gz (995.2 kB 查看哈希)

上传时间

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面