图像缩放
项目描述
介绍
本包包含用于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,我们依赖于persistent和ZODB。[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)
如果项目被修改,则删除旧图像缩放。参见 https://dev.plone.org/ticket/13791 [gforcada]
生成渐进式 JPEG。[kroman0]
1.3.2 (2013-05-23)
增加了用于缩放图像质量的标记接口。参考http://dev.plone.org/plone/ticket/13337 [khink]
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创建的坏鸡蛋。参考http://dev.plone.org/plone/ticket/11154 [witsch]
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]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。