跳转到主要内容

图像缩放

项目描述

介绍

本包包含用于Zope环境的图像缩放逻辑。它支持Zope 2、grok以及其他基于Zope工具包(ZTK)构建的系统。

在编写此包时采用了几个设计目标

  • 应支持将图像缩放到任何宽度、高度,应使用放大和缩小两种方式。缩放参数永远不应在代码中固定。这允许设计师使用他们想要的任何图像缩放,而无需修改Python代码。

  • 缩放的结果将是一个包含其新尺寸的图像,而不是HTML或XHTML标签。我们已经有很好的工具来生成标签,例如Zope Pagetemplates、Genshi以及其他更适合此目的的模板语言。

此外,还定义了几个实现目标

  • 图像缩放必须在需要时发生,而不是预先进行。这减少了初始保存时间,并防止生成不必要的缩放。

  • 图像缩放参数不应包含在生成的URL中。由于参数的数量可能会变化,并且未来可能会添加新参数,这将创建过于复杂的URL和URL解析。

  • 不需要HTML重写(例如repoze.bitblt所做的)。

  • 应有可能开发一个外部存储系统,该系统将缩放图像存储在外部,并返回一个绕过应用服务器的URL。这应可通过文件系统路径和基本URL进行配置。

  • 最小化外部依赖项数量,允许此包在许多环境中使用。

  • 无需zope.testing即可进行测试。运行setup.py test就足够了。

  • 缩放图像的URL应有一个扩展名,该扩展名反映其MIME类型。这有助于缓存(和其他前端服务)配置。

用法

使用plone.scale最常见的方式是从HTML模板。在TAL语法中,典型的用法如下,假设您已连接到image-scaling视图

<img tal:define="scales context/@@image-scaling;
                 thumbnail python:scales.pre_scale('logo', width=64, height=64)"
     tal:attributes="src thumbnail/url;
                     width thumbnail/width;
                     height thumbnail/height" />

使用pre_scale方法,实际上不会进行缩放。如果您调用scale方法,则会进行缩放。这会生成一个名为logo的图像字段的缩略图,最大尺寸为64x64像素。结果图像的尺寸(可能不是正好64x64)被设置为img标签上的属性,以加快浏览器渲染。访问URL将生成缩略图,如果尚未发生。

如果您更喜欢Genshi语法,并且作用域中存在IImageScaleStorage接口,则语法如下

<img py:with="thumbnail=IImageScaleStorage(context).pre_scale('logo', width=64, height=64)"
     py:attributes="dict(src=thumbnail.url, width=thumbnail.width, height=thumbnail.height" />

变更日志

4.1.3 (2024-06-13)

错误修复

  • 将PIL.ImageFile.LOAD_TRUNCATED_IMAGES设置为True以尝试加载损坏的图像。@davisagli (#14)

4.1.2 (2024-03-22)

错误修复

  • 如果给出了宽度和高度,则在确定缩放的唯一ID时忽略缩放参数。@wesleybl (#92)

4.1.1 (2024-01-31)

错误修复

  • 修复与Pillow 10.1+的不兼容性。我们不再设置image.mode,而是调用image.convert。这在Pillow 9和10中都有效。[maurits] (#89)

4.1.0 (2023-10-25)

新功能

  • 保持缩放WEBP图像以WEBP格式,而不是转换为JPEG。[mamico] (#85)

4.0.2 (2023-10-07)

错误修复

  • 修复ScalesDict冲突解决中的KeyError。[davisagli] (#84)

内部

  • 更新配置文件。[plone开发者] (cfffba8c)

4.0.1 (2023-03-14)

内部

  • 更新配置文件。[plone开发者] (a533099d)

测试

  • Tox:显式测试仅包含plone.scale包。[maurits] (#50)

4.0.0 (2022-11-26)

错误修复

  • 使用Python 3.11进行测试。[maurits] (#311)

  • 需要Python 3.7或更高版本。[maurits] (#600)

4.0.0b5 (2022-10-20)

新功能

  • 添加对动画GIF的支持。[reebalazs] (#69)

4.0.0b4 (2022-10-03)

破坏性更改

  • 不再在3.6上测试Plone 5.2,在3.7上测试Plone 6.0。[maurits] (#3637)

错误修复

  • 使用“scale”模式作为默认。这样可以减少模式与方向之间的混淆。另见 plone.namedfile问题102。以前我们对IImageScaleFactory接口的定义中包含了已弃用的direction="thumbnail"。其他部分默认使用mode="contain",这会进行裁剪,而在Plone中,我们几乎 everywhere都习惯于简单的缩放。[maurits] (#102)

4.0.0b3 (2022-07-19)

错误修复

  • 修复了获取瓦片原始数据的问题。[maurits] (#64)

4.0.0b2 (2022-07-14)

错误修复

  • 修复确保使用pre_scale注册的缩放在稍后通过get_or_generate实际生成时,使用与由pre_scale存储的占位符信息相同的uid进行存储。这避免了同一缩放被重复生成的问题。[davisagli] (#60)

4.0.0b1 (2022-06-23)

新功能

  • 预缩放:存储非随机uid为缩放预留空间。您可以通过调用pre_scale来预注册缩放,并赋予一个唯一的id,而不使用Pillow进行任何缩放操作。稍后,当您调用scale方法时,将生成缩放。您还可以直接调用scale而不先调用pre_scale。[maurits] (#57)

  • 标记为plone.protect的safeWrite AnnotationStorage。是https://github.com/plone/plone.namedfile/pull/117的先决条件。[mamico] (#58)

错误修复

  • 小范围清理:isort, black。[maurits] (#59)

4.0.0a4 (2022-05-26)

错误修复

  • 修复了当高度不受限制时的裁剪问题。创建一个正方形然后。不受限制意味着:65000或更大,或零或更小。[maurits] (#53)

  • 修复了清理缩放:只丢弃同一字段的过时缩放。[maurits] (#55)

4.0.0a3 (2022-05-09)

错误修复

  • 修复了与Pillow 9.1.0的DeprecationWarning,使用Resampling.LANCZOS,对于较老的Pillow回退到ANTIALIAS。[maurits] (#49)

4.0.0a2 (2022-03-09)

破坏性更改

  • scale方法中移除了已弃用的factory参数。这在AnnotationStorage类和IImageScaleStorage接口中。这已经在plone.scale 3.0中计划移除,但保留得较久。修复了问题47。[maurits] (#47)

4.0.0a1 (2022-02-23)

破坏性更改

  • 移除了docs目录和sphinx extra。文档最后更新于2010年,可能仍然相关的部分已复制到readme中。[maurits] (#44)

  • 移除了tests extra,仅保留了test extra和storage。在这两个extra之间稍微交换了包。对于storage,我们依赖于persistentZODB。[maurits] (#44)

  • 依赖Pillow。最初我们没有正式依赖它(或PIL),“因为并非所有人都能将其作为egg安装”。现在是时候成长了。[maurits] (#44)

  • 移除了Python 2支持。现在仅支持Python 3.6+。仍然在Plone 5.2上工作。[maurits] (#44)

新功能

  • 添加了tox.ini与mxdev。使用GitHub Actions在Plone 5.2 Py + 3.6-3.8和Plone 6.0 + Py 3.7-3.10上测试。[maurits] (#44)

3.1.2 (2020-09-07)

错误修复

  • 解决了弃用警告[gforcada] (#42)

3.1.1 (2020-04-22)

错误修复

  • 小范围打包更新。(#1)

3.1.0 (2020-03-08)

新功能

  • 参数“mode”取代了旧的、现在已弃用的“direction”参数。新的名称是“contain”或“scale-crop-to-fit”,而不是“down”、“cover”或“scale-crop-to-fill”,以及“scale”而不是“thumbnail”。[fschulze] (#29)

  • 添加了 calculate_scaled_dimensions 函数,用于从裸值计算大小,而无需实际缩放图像。[fschulze]

    添加了 MAX_PIXELS 常量,设置为 8192*8192,以防止缩放时内存溢出。[fschulze] (#37)

错误修复

  • 修复了缩放模式的文档,以匹配其行为。[thet] (#39)

3.0.3 (2018-11-04)

错误修复

  • 在测试中减少了警告。[jensens]

3.0.2 (2018-09-28)

错误修复

  • 修复了在 py3 中清理图像尺度的错误。[pbauer]

3.0.1 (2018-04-03)

错误修复

  • 修复了冲突解决代码的边界情况。[gforcada]

3.0 (2017-10-02)

破坏性更改

  • 恢复从 1.x 系列的缩放行为,同时不使用大量内存。[fschulze]

新功能

  • 处理具有 alpha 通道的 TIFF 图像。[fschulze]

2.2 (2017-08-27)

新功能

  • Python 3 兼容。[dhavlik]

2.1.2 (2017-05-31)

错误修复

  • 删除了未使用的依赖。[gforcada]

2.1.1 (2017-03-29)

错误修复

  • 只有当图像实际上是灰度图并且颜色少于 256 种时,才将其转换为灰度 JPEG。这个错误是在 2.1 版本中通过 PR #13 引入的。[fschulze]

  • 在缩放图像中保留颜色配置文件。[fschulze]

2.1 (2016-11-01)

新功能

  • 选择合适的图像模式以减少文件大小。[didrix]

错误修复

  • 需要 six 包,以便更容易地检查数字类型。在 Python 3 中,long 已合并到 int。[maurits]

  • 当获取过时的缩放时,如果没有工厂,不要将其丢弃。[maurits]

  • 避免在查找过时的缩放时出现 TypeError。修复了 问题 12。[maurits]

  • 在删除不存在的缩放时捕获 KeyError。这可能在边界情况下发生。修复了 问题 15。[maurits]

  • setup.py 中设置 zip_safe=False。否则,您无法运行已发布包的测试,因为测试运行程序在 egg 文件中找不到任何测试。请注意,这仅在 zc.buildout 1.x 中有问题:它默认使用 unzip=False。zc.buildout 2.x 不再具有此选项,并且始终解压缩 egg。[maurits]

2.0 (2016-08-12)

新功能

  • 假设宽度和高度为零在语义上与 None 相同:使用其他维度进行缩放,计算缺失的一个。[jensens, thet]

  • 将缩放的 GIF 转换为 RGBA PNG 图像,而不是转换为 JPEG。[thet, jensens]

修复了

  • 对于方向“down”,不要将图像向上缩放。[thet]

  • 主要清理,重构代码以减少复杂性。[jensens]

1.5.0 (2016-05-18)

新功能

  • 使用适配器查找实际的缩放工厂。弃用了通过命名参数传递工厂的方法,因为这种方法不够灵活:如果插件想要提供替代的缩放方法(例如裁剪),现在可以使用特定的适配器执行此操作。[jensens]

修复了

  • 次要清理。[jensens]

1.4.1 (2016-02-12)

修复了

  • 修复了在 storage.AnnotationStorage._cleanup 中尝试删除同一键两次时出现的 KeyError。[fulv]

1.4 (2015-12-07)

新功能

  • 解决同时访问多个缩放时产生的冲突。[gotcha]

  • 重构缩放存储。[gotcha]

1.3.5 (2015-03-10)

  • PIL 缩略图功能在放大图像(缩放)时不起作用。请使用 resize 代替。[sureshvv]

1.3.4 (2014-09-07)

  • 当缩放过时时,删除所有比上下文超过一天的图像缩放。参见 https://dev.plone.org/ticket/13791 [maurits]

  • 确保删除项目或清除整个存储工作。删除一个项目通常会删除链接的第二个项目,这使得一次删除多个项目变得困难。[maurits]

1.3.3 (2014-01-27)

1.3.2 (2013-05-23)

1.3.1 (2013-04-06)

  • 裁剪图像现在在垂直和水平方向上都进行了居中[mattss]

1.3 (2013-01-17)

  • 添加了MANIFEST.in。[WouterVH]

  • scaleImage拆分,使其缩放相关部分可以应用于PIL.Image的实例以进行进一步处理。[witsch]

1.2.2 - 2010-09-28

1.2.1 - 2010-08-18

  • 将CMYK转换为RGB,允许查看打印图像的网页预览。[tomster]

1.2 - 2010-07-18

  • 更新软件包元数据。[hannosch]

1.1 - 2010-04-20

  • 如果请求缩略图行为但宽度或高度缺失,则终止。这比让调用者面对PIL异常要好。[wichert]

  • keep方向重命名为thumbnail以使其行为更直观,但现在接受keep。[wichert]

1.0 - 2010-04-12

  • 仅在Python版本低于2.5的情况下引入uuid分布。[hannosch]

  • 不要声明对PIL的依赖。[davisagli]

1.0a2 - 2010-04-10

  • 根据董事会决定添加BSD许可文本:http://lists.plone.org/pipermail/membership/2009-August/001038.html [elro]

  • 允许使用PIL的缩略图算法以保持当前的长宽比。[spamsch, witsch]

  • 允许设置结果图像缩放的品质。[witsch]

  • 重构图像缩放存储适配器,使其对底层内容类型的依赖性更低。[witsch]

1.0a1 - 2009-11-10

  • 首次发布[wichert]

项目详情


下载文件

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

源分布

plone_scale-4.1.3.tar.gz (2.2 MB 查看哈希值)

上传于 源代码

构建分发

plone.scale-4.1.3-py3-none-any.whl (2.2 MB 查看哈希值)

上传于 Python 3

由以下提供支持