跳转到主要内容

快速高效地为Django中的图像添加水印

项目描述

本项目提供了一种简单的方法,让您能够为您的django网站上的图像添加自定义水印。

Josh VanderLinden编写,并有一些优秀的贡献者

https://img.shields.io/pypi/v/django-watermark.svg https://img.shields.io/pypi/dm/django-watermark.svg https://img.shields.io/github/license/bashu/django-watermark.svg https://img.shields.io/travis/bashu/django-watermark.svg

特性

  • 不透明度:过滤器允许您指定水印图像的不透明度级别

  • 水印定位:您有几种选择来定位图像上的水印

    • 绝对定位:您可以为水印指定确切的像素位置

    • 相对位置:您可以使用百分比来定位您的水印

    • 角落定位:您可以将水印放置在图片的角落

    • 随机定位:您可以告诉过滤器随机生成水印的位置

    • 中心定位:您可以将水印放置在目标图片的中心

  • 缩放:水印可以缩放以覆盖您的图片或指定缩放因子

  • 平铺:水印可以在您的图片上平铺

  • 灰度:在应用到目标图片之前,您可以将水印转换为灰度

  • 旋转:您可以旋转水印一定角度或让旋转是随机的

安装

首先安装模块,最好是在虚拟环境中进行。可以从PyPI安装

pip install django-watermark

配置

首先,您必须将此项目添加到您的 settings.py 中的 INSTALLED_APPS 列表

INSTALLED_APPS += [
    "watermarker",
]

运行 ./manage.py migrate。这将在您的数据库中创建操作所需的表。

请参阅示例应用程序。此应用程序用于手动测试此包的功能。这也是一个好例子。

您需要Django 1.4或更高版本才能运行。它可能在旧版本上运行,但没有经过测试。

从0.1.6升级

从0.1.6升级可能会导致在表已存在时尝试应用迁移时出现问题。在这种情况下,需要应用一个模拟迁移

./manage.py migrate watermarker 0001 --fake

配置(可选)

在这个部分,我还可能提到一个可以覆盖的设置变量:WATERMARK_QUALITY。它应该是一个介于0和100之间的整数。默认值是85。

默认情况下,django-watermark 会隐藏原始图像的文件名,因为原始要求是无法下载没有水印的图像。从版本0.1.6开始,您可以在 setings.py 中将 WATERMARK_OBSCURE_ORIGINAL 设置为 False 以使原始图像文件名可供用户访问。

django-watermark 还允许您配置随机水印定位应该如何工作。默认情况下,当水印要随机定位时,只会生成一个带水印的图像。如果您希望在每个请求上为图像的水印生成一个随机位置,请在 settings.py 中将 WATERMARK_RANDOM_POSITION_ONCE 设置为 False

用法

如上所述,使用 django-watermark 时,您有几个选项。您必须做的第一件事是加载您希望在图像上应用水印的模板的过滤器。

{% load watermark %}

从Django管理界面开始,用您想要应用到常规图像上的水印填充您的数据库。只需指定水印的名称并上传水印图像本身。 不建议在水印名称中使用逗号。 为了获得最佳效果,水印应该是透明的PNG文件。我无法保证其他格式能很好地工作。

watermark 过滤器的第一个参数 _必须_ 是您在Django管理界面中指定的水印名称。然后,您可以从几个其他参数中选择来自定义水印的应用。以下是一些

  • position - 这是一个相当可定制的选项。首先,您可以使用 BRBLTRTL 之一将水印插入到图像的一个角落。这些分别代表“右下角”、“左下角”、“右上角”和“左上角”。

    或者,您可以使用相对或绝对定位来设置水印。相对定位使用百分比;绝对定位使用精确像素。您可以混合使用这两种定位模式,但不能将相对/绝对定位与角落定位混合使用。当使用相对/绝对定位时,position参数的值格式为XxY,其中X是左值,Y是顶值。左值和顶值必须用小写x分隔。

    如果您希望水印图像显示在您要添加水印的任何图像的中心,您可以使用位置参数,例如position=50%x50%或甚至position=C。如果您希望水印显示在图像左右边缘中间,距离顶部100像素,您可以使用位置参数,例如position=50%x100

    最后,您可以告诉过滤器动态地为水印生成位置。为此,使用position=R

  • opacity - 此参数允许您指定应用的水印的不透明度。值必须是一个介于0到100之间的整数,其中0是完全透明,100是完全不透明。默认情况下,不透明度为50%。

  • tile - 如果您希望水印在整张图像上平铺,只需指定参数,例如tile=1

  • scale - 如果您希望水印在目标图像上尽可能大且完全可见,您可能希望使用scale=F。如果您想指定特定的缩放因子,只需使用类似scale=1.43的值。缩放也可以是目标图像(要水印的图像)的最小尺寸的百分比,例如scale=R20%会将水印缩放为目标图像宽度和高度中最小值的20%。

  • greyscale - 如果您希望水印为灰度,可以指定参数greyscale=1,这将消除所有颜色饱和度。

  • rotation - 将此参数设置为介于0到359之间的任何整数(实际上任何整数都应该工作,但为了您的方便,我建议将值保持在0到359之间)。如果您希望旋转是随机的,使用rotation=R代替整数。

  • obscure - 将此参数设置为0以使原始图像的文件名对用户可见。默认值是1(或True)以隐藏原始文件名。

  • noalpha - 将此设置为1以移除水印效果中引入的任何透明度,这对于强制JPEG图像保持相同非常有用,可以节省大量空间。设置为1将有效地将任何RGBA颜色空间转换为RGB。默认值是1(或True)。

  • quality - 将此设置为介于0到100之间的整数以指定输出图像的质量。默认值是85。

  • random_position_once - 将此设置为0或1以指定图像水印的随机定位行为。当设置为0时,水印将在每次请求时随机放置。当设置为1时,水印将在第一次请求时随机定位,后续请求将使用生成的图像。默认值是True(仅在第一次请求时随机定位)。

示例

{{ image_url|watermark:"My Watermark,position=br,opacity=35" }}

查找名为“我的水印”的水印,将其放置在目标图像的右下角,使用35%的透明度级别。

{{ image_url|watermark:"Your Watermark,position=tl,opacity=75" }}

查找名为“你的水印”的水印,将其放置在目标图像的左上角,使用75%的透明度级别。

{{ image_url|watermark:"The Watermark,position=43%x80%,opacity=40" }}

查找名为“水印”的水印,将其放置在目标图像的x轴43%和y轴80%的位置,透明度级别为40%。

{{ image_url|watermark:"The Watermark,position=R,opacity=10,rotation=45" }}

查找名为“水印”的水印,随机生成其位置,透明度级别为10%,旋转45度。

{{ image_url|watermark:"w00t,opacity=40,tile=1" }}

查找名为“w00t”的水印,将其平铺在整个目标图像上,透明度级别为40%。

致谢

我没有编写实际应用水印的代码。我从http://code.activestate.com/recipes/362879/ 中获取了fsd,并将其转换为Django插件应用程序。感谢Shane Hathaway。

许可证

django-watermark 在BSD许可下发布。

项目详情


下载文件

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

源代码分发

django-watermark-0.2.0.tar.gz (15.3 kB 查看哈希值)

上传时间 源代码

构建分发

django_watermark-0.2.0-py3-none-any.whl (17.8 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面