Package: django3-watermark
This project provides a simple way for you to apply custom watermarks
to images on your django-powered website.Authored byJosh VanderLinden, and some greatcontributors.FeaturesOpacity: the filter allows you to specify the transparency level for your
watermark imageWatermark positioning: you have several options for positioning watermarks on
your imagesAbsolute: you can specify exact pixel locations for your watermarkRelative: you can use percentages to place your watermarkCorners: you can position your watermark in the corners of your imagesRandom: you can tell the filter to randomly generate a position for your
watermarkCenter: you can place watermarks in the center of the target imageScaling: the watermark can be scaled to cover your images or specify a
scaling factor to useTiling: the watermark can be tiled across your imagesGreyscale: you can convert the watermark to be greyscale before having it
applied to the target image.Rotation: you can rotate your watermark a certain number of degrees or have
the rotation be random.Requirementsdjango-watermarkrelies upon thePython Imaging Library.
It was tested with latest Pillow,PIL1.1.7 is supported but not recommended.InstallationEither clone this repository into your project, or install withpip installdjango-watermarkFirst of all, you must add this project to your list ofINSTALLED_APPSinsettings.py:INSTALLED_APPS=(...'watermarker',)Run./manage.py syncdb. This creates the tables in your database
that are necessary for operation.Please seeexampleapplication. This application is used to manually
test the functionalities of this package. This also serves as a good
example.You need Django 1.4 or above to run that. It might run on older
versions but that is not tested.Upgrading from 0.1.6Upgrading from 0.1.6 is likely to cause problems trying to apply a
migration when the tables already exist. In this case a fake migration
needs to be applied:./manage.pymigratewatermarker0001--fakeConfiguration (optional)While we’re in this section, I might as well mention a settings
variable that you can override:WATERMARK_QUALITY. This should
be an integer between 0 and 100.  The default is 85.By default,django-watermarkobscures the original image’s file
name, as the original requirements were to make it impossible to
download the watermark-less image.  As of version 0.1.6, you can setWATERMARK_OBSCURE_ORIGINALtoFalsein yoursetings.pyto
make the original image file name accessible to the user.django-watermarkalso lets you configure how random watermark
positioning should work.  By default, a when a watermark is to be
positioned randomly, only one watermarked image will be generated.  If
you wish to generate a random position for an image’s watermark on
each request, setWATERMARK_RANDOM_POSITION_ONCEtoFalsein
yoursettings.py.UsageAs mentioned above, you have several options when usingdjango-watermark.
The first thing you must do is load the filter for the template in which you
wish to apply watermarks to your images.{%loadwatermark%}From the Django admin, go ahead and populate your database with some watermarks
that you want to apply to your regular images.  Simply specify a name for the
watermark and upload the watermark image itself.It’s probably not a good
idea to put commas in your watermark names.Watermarks should be transparent
PNG files for best results.  I can’t make any guarantees that other formats
will work nicely.The first parameter to thewatermarkfilter _must_ be the name you
specified for the watermark in the Django admin.  You can then choose from a
few other parameters to customize the application of the watermark.  Here they
are:position- This one is quite customizable.  First, you can plug your
watermark into one corner of your images by using one ofBR,BL,TR, andTL.  These represent ‘bottom-right’, ‘bottom-left’,
‘top-right’, and ‘top-left’ respectively.Alternatively, you can use relative or absolute positioning for the
watermark.  Relative positioning uses percentages; absolute positioning uses
exact pixels.  You can mix and match these two modes of positioning, but you
cannot mix and match relative/absolute with the corner positioning.  When
using relative/absolute positioning, the value for thepositionparameter
isXxY, whereXis the left value andYis the top value.  The
left and top values must be separated with a lowercasex.If you wanted your watermark image to show up in the center of any image you
want to watermark, you would use a position parameter such asposition=50%x50%or evenposition=C.  If you wanted the watermark to
show up half-way between the left and right edges of the image and 100 pixels
from the top, you would use a position parameter such asposition=50%x100.Finally, you may tell the filter to generate a position for your watermark
dynamically.  To do this, useposition=R.opacity- This parameter allows you to specify the transparency of the
applied watermark.  The value must be an integer between 0 and 100, where 0
is fully transparent and 100 is fully opaque.  By default, the opacity is set
at 50%.tile- If you want your watermark to tile across the entire image, you
simply specify a parameter such astile=1.scale- If you’d like to have the watermark as big as possible on the
target image and fully visible, you might want to usescale=F.  When you
want your watermark size corresponding to a percentage of source image, usescale=Rand define in your settings something likeWATERMARK_PERCENTAGE=40. The default percentage value is 30. If you
want to specify a particular scaling factor, just use something likescale=1.43.greyscale- If you want your watermark to be greyscale, you can specify
the parametergreyscale=1and all color saturation will go away.rotation- Set this parameter to any integer between 0 and 359 (really
any integer should work, but for your own sanity I recommend keeping the
value between 0 and 359).  If you want the rotation to be random, userotation=Rinstead of an integer.obscure- Set this parameter to 0 to make the original image’s filename
visible to the user.  Default is 1 (or True) to obscure the original
filename.quality- Set this to an integer between 0 and 100 to specify the quality
of the resulting image.  Default is 85.random_position_once- Set this to 0 or 1 to specify the random
positioning behavior for the image’s watermark.  When set to 0, the watermark
will be randomly placed on each request.  When set to 1, the watermark will
be positioned randomly on the first request, and subsequent requests will use
the produced image.  Default isTrue(random positioning only happens on
first request).Examples{{image_url|watermark:"MyWatermark,position=br,opacity=35" }}Looks for a watermark named “My Watermark”, place it in the bottom-right
corner of the target image, using a 35% transparency level.{{image_url|watermark:"YourWatermark,position=tl,opacity=75" }}Looks for a watermark named “Your Watermark”, place it in the top-left corner
of the target image, using a 75% transparency level.{{image_url|watermark:"TheWatermark,position=43%x80%,opacity=40"}}Looks for a watermark named “The Watermark”, places it at 43% on the x-axis
and 80% of the y-axis of the target image, at a transparency level of 40%.{{image_url|watermark:"TheWatermark,position=R,opacity=10,rotation=45" }}Looks for a watermark named “The Watermark”, randomly generates a position
for it, at a transparency level of 10%, rotated 45 degrees.{{image_url|watermark:"w00t,opacity=40,tile=1"}}Looks for a watermark called “w00t”, tiles it across the entire target image,
at a transparency level of 40%.CreditsI didn’t write any of the code that actually applies the watermark.  I snagged
it fromhttp://code.activestate.com/recipes/362879/and turned it into a Django
pluggable application. Props to Shane Hathaway.Licensedjango-watermarkis released under the BSD license.