{"id":14767,"date":"2020-10-02T09:24:32","date_gmt":"2020-10-02T09:24:32","guid":{"rendered":"https:\/\/holypython.com\/?p=14767"},"modified":"2021-04-04T12:00:33","modified_gmt":"2021-04-04T12:00:33","slug":"watermarkd","status":"publish","type":"post","link":"https:\/\/holypython.com\/watermarkd\/","title":{"rendered":"How to Use Watermarkd: A Batch Watermarking Library with GUI"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14767\" class=\"elementor elementor-14767\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ff838e8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ff838e8\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9040918\" data-id=\"9040918\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-85ee658 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"85ee658\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">What is watermarking?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-353683e elementor-widget elementor-widget-text-editor\" data-id=\"353683e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family );\">Watermarking is a technology of printing less opaque text or symbols on images and items. Believe it or not it&#8217;s considered an ancient technology as old as paper since it&#8217;s been used on special letters, stamps and printed currency.<\/span><\/p><p>As digital imaging has never been such a humongous part of humans&#8217; lives, the usage, creation and demand related to digital images rises as well. Despite the rise of open source and sharing mentality in the digital community, there seems to still be significant room for watermarking applications and so the demand for innovation continues.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16fed46 elementor-widget elementor-widget-image\" data-id=\"16fed46\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/aHc3nQ6ITiU-Custom.jpg\" class=\"attachment-full size-full wp-image-14844\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/aHc3nQ6ITiU-Custom.jpg 800w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/aHc3nQ6ITiU-Custom-300x200.jpg 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/aHc3nQ6ITiU-Custom-768x512.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Star shaped watermarks among with other patterns on 100 Euro banknote<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a7fd942 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"a7fd942\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Why Watermarkd?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-21dbb68 elementor-widget elementor-widget-text-editor\" data-id=\"21dbb68\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Watermarkd<\/b> is a Python library published by Holypython.com under the open source license Apache-2.0.<\/p><p>In this post we will try to demonstrate what can be accomplished with Watermarkd library.<\/p><p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family );\">Watermarkd library allows users to handle watermarking operations in Python directly from the terminal or through use of an optional GUI component.<\/span><\/p><p><b>Since it&#8217;s specialized only for watermarking tasks, Watermarkd has a very light graphical user interface. You can probably get an image watermarked (or watermarkd!) during the time it takes to start up a major Image Manipulation software.<\/b><\/p><p>It has the most commonly used features when it comes to watermarking and expected to cater to 90% or more of the people looking to watermark an image.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-af86214 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"af86214\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0650712\" data-id=\"0650712\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-72f8544 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"72f8544\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How does Watermarkd work?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b182271 elementor-widget elementor-widget-text-editor\" data-id=\"b182271\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Currently, Watermarkd library consists of one sole class named <strong>Spread <\/strong>which houses two functions that spread out watermark text on image(s):<\/p><ul><li>single function: Spread.single() can be used to apply watermark on a single image (photo).<\/li><li>batch function: Spread.batch() can be used to apply watermark to multiple images in a folder.<\/li><\/ul><div>Here are some images created with <b>Watermarkd<\/b> on the go.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-54826d5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"54826d5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-1c4ca83\" data-id=\"1c4ca83\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3d7902e elementor-widget elementor-widget-image\" data-id=\"3d7902e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"840\" height=\"560\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Medical2-Custom.png\" class=\"attachment-full size-full wp-image-14772\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Medical2-Custom.png 840w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Medical2-Custom-300x200.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Medical2-Custom-768x512.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Medical Field Watermarking<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f76a79a\" data-id=\"f76a79a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1c7aeda elementor-widget elementor-widget-image\" data-id=\"1c7aeda\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1100\" height=\"733\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/fffFASWFE-Custom-1.png\" class=\"attachment-full size-full wp-image-14865\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/fffFASWFE-Custom-1.png 1100w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/fffFASWFE-Custom-1-300x200.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/fffFASWFE-Custom-1-1024x682.png 1024w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/fffFASWFE-Custom-1-768x512.png 768w\" sizes=\"(max-width: 1100px) 100vw, 1100px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Business confidentiality communicated through watermark<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b9a0487 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b9a0487\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1ed4e3c\" data-id=\"1ed4e3c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-024a4c8 elementor-widget elementor-widget-text-editor\" data-id=\"024a4c8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Below you can see various usage types of Watermarkd Library under four titles:<\/p><p>&#8211;\u00a0<a href=\"#single\">Single Function Usage<\/a><\/p><p>&#8211;\u00a0<a href=\"#batch\">Batch Function Usage<\/a><\/p><p>&#8211;\u00a0<a href=\"http:\/\/singlegui\" data-wplink-url-error=\"true\">Single Function Usage with GUI<\/a><\/p><p>&#8211;\u00a0<a style=\"font-family: var( --e-global-typography-text-font-family ); background-color: #ffffff;\" href=\"http:\/\/batchgui\" data-wplink-url-error=\"true\">Batch Function Usage with GUI<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c7bc707 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c7bc707\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-81ada01\" data-id=\"81ada01\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4a6479b elementor-widget elementor-widget-menu-anchor\" data-id=\"4a6479b\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"single\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-03d40df elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"03d40df\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Single Function Usage<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e164294 elementor-widget elementor-widget-text-editor\" data-id=\"e164294\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family );\">Single function can be used in two main ways:<\/span><\/p><ul><li><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family );\">through command line without any interface using its parameters<\/span><\/li><li>through GUI by enabling gui parameter via True boolean.<\/li><\/ul><p>as simple as passing True argument to gui as below:<\/p><p><code>single(gui=True)<\/code><\/p><p>Let&#8217;s first investigate usage scenarios without gui:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4155c4d elementor-widget elementor-widget-html\" data-id=\"4155c4d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>import Watermarkd as wmd\r\n\r\nwmd.Spread.single(img_path=r\"c:\/myimage.png\")\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b38dc4 elementor-widget elementor-widget-text-editor\" data-id=\"2b38dc4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>This code, once executed, will create a watermarkd image on the user&#8217;s <b>Desktop<\/b>. You don&#8217;t have to assign gui parameter to False since it&#8217;s the default option. So, basically it&#8217;s the same thing as this code:<\/p><p><code>wmd.Spread.single(gui=False, img_path=r\"c:\/myimage.png\")<\/code><\/p><p>Also, please note that, when not using gui, the only parameter you have to pass an argument to is <b>img_path, <\/b>since all the other parameters have default values and hence, they are optional.<\/p><p>Let&#8217;s continue to explore other parameters that can be passed to the single function:<\/p><p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b414c13 elementor-widget elementor-widget-text-editor\" data-id=\"b414c13\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><i>gui<\/i>, (<b>bool<\/b>), default <b>False <\/b>: enables GUI<\/li><li><i>img_path<\/i>, (<b>string<\/b>), <u>mandatory parameter<\/u> :signifies image path<\/li><li><i style=\"color: var( --e-global-color-text );\">wm_text<\/i><span style=\"color: var( --e-global-color-text );\">,\u00a0 (<\/span><b style=\"color: var( --e-global-color-text );\">string<\/b><span style=\"color: var( --e-global-color-text );\">), default= &#8220;Watermarkd&#8221;) : Watermark Text<\/span><\/li><li>wm_trans, (<b>int<\/b> [1-255]), default= 85 : Signifies Watermark Transparency\u00a0<\/li><li>font_size, (<b>int<\/b>), default= 55) : Watermark Font Size<\/li><li>font_name, (<b>string<\/b>), default= &#8220;arial.ttf&#8221; : Font Type<\/li><li>filename, (<b>string<\/b>), default=&#8221;Watermarkd&#8221; : File Name for Saving<\/li><li>save_to_path, (<b>string<\/b>), default=&#8221;Desktop\/watermarkd_&#8221; : Saving Folder Path<\/li><li>save_to_suffix, (<b>string<\/b>), default=&#8221;.png&#8221; : File Type for Saving\u00a0<\/li><li>output_filename, (default= r&#8221;c:\/Users\/&#8221;+user_path+&#8221;\/Desktop\/watermarkd.png&#8221;) : File Name For Saving<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b3ec51 elementor-widget elementor-widget-text-editor\" data-id=\"7b3ec51\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Here is another example, in which watermark text is assigned to &#8220;Inception&#8221;:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-555db13 elementor-widget elementor-widget-html\" data-id=\"555db13\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>from Watermarkd import Spread\r\n\r\nf = r\"c:\/Users\/ABC\/Desktop\/film.png\"\r\nSpread.single(img_path=f, wm_text=\"Inception\")\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0d72738 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0d72738\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ac8105c\" data-id=\"ac8105c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ca8deed elementor-widget elementor-widget-image\" data-id=\"ca8deed\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1094\" height=\"730\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/spin-Custom.jpg\" class=\"attachment-full size-full wp-image-14773\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/spin-Custom.jpg 1094w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/spin-Custom-300x200.jpg 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/spin-Custom-1024x683.jpg 1024w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/spin-Custom-768x512.jpg 768w\" sizes=\"(max-width: 1094px) 100vw, 1094px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Film Making Industry Watermarking<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-07c24d9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"07c24d9\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f2be39a\" data-id=\"f2be39a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e5c78b8 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"e5c78b8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Batch Function Usage<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d070eca elementor-widget elementor-widget-menu-anchor\" data-id=\"d070eca\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"batch\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e1f0fc elementor-widget elementor-widget-text-editor\" data-id=\"1e1f0fc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Batch function is very similar to single function with a few subtle differences. First and foremost, it handles a folder of images rather than a single image.\u00a0<\/p><p>So, img_path parameter is exchanged with folder_path parameter.<\/p><p>Otherwise the rest of the differences are mainly internal which you can check out in the source code if you like.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d683dec elementor-widget elementor-widget-html\" data-id=\"d683dec\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>from Watermarkd import Spread\r\n\r\nSpread.batch(folder_path=r\"c:\/User\/ABC\/New_Photos\")\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1bb759c elementor-widget elementor-widget-text-editor\" data-id=\"1bb759c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>This code will read all the images from the given folder New_Photos, and create an output folder named Watermarkd_ in user&#8217;s Desktop and save all the watermarked files there with the default values for optional parameters. Check out a list of parameters below for adjusting different values such as: watermark text, font size, font type, file name, path name, transparency etc.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1b3121 elementor-widget elementor-widget-text-editor\" data-id=\"d1b3121\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you check out the source code, most of the variable names are also conveniently borrowed from the single function.<\/p><p>Regarding the inner workings of the batch function, the main thing is: it doesn&#8217;t apply the watermarking algorithm to a single image, instead watermarking algorithm and positioning etc are placed inside a for loop which iterates through the images in the given folder.<\/p><p>So, in simpler words, folder is iterated with a for loop, image file name is taken which becomes the img_path similar to single function, then watermarking is applied and then files is saved and next iteration starts with the next file.<\/p><p>Here is another example:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16e1ea7 elementor-widget elementor-widget-html\" data-id=\"16e1ea7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>from Watermarkd import Spread\r\n\r\nf=r\"c:\/User\/ABC\/New_Photos\"\r\nSpread.batch(folder_path=f, wm_text=\"Photographer A. C. Jonah, #927-654-92**\")\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85b6df9 elementor-widget elementor-widget-text-editor\" data-id=\"85b6df9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><i>gui<\/i>, (<b>bool<\/b>), default <b>False <\/b>: enables GUI<\/li><li><i style=\"color: var( --e-global-color-text );\">folder_path, (<b>string<\/b>),\u00a0<span style=\"font-style: normal;\"><u>mandatory parameter<\/u><\/span><span style=\"font-style: normal;\">\u00a0<\/span>\u00a0<\/i><span style=\"color: var( --e-global-color-text );\">:signifies folder path<\/span><\/li><li><i>wm_text<\/i>,\u00a0 (<b>string<\/b>), default= &#8220;Watermarkd&#8221;) : Watermark Text<\/li><li>wm_trans, (<b>int<\/b> [1-255]), default= 85 : Signifies Watermark Transparency\u00a0<\/li><li>font_size, (<b>int<\/b>), default= 55) : Watermark Font Size<\/li><li>font_name, (<b>string<\/b>), default= &#8220;arial.ttf&#8221; : Font Type<\/li><li>filename, (<b>string<\/b>), default=&#8221;Watermarkd&#8221; : File Name for Saving<\/li><li>save_to_path, (<b>string<\/b>), default=&#8221;Desktop\/watermarkd_&#8221; : Saving Folder Path<\/li><li>save_to_suffix, (<b>string<\/b>), default=&#8221;.png&#8221; : File Type for Saving\u00a0<\/li><li>output_filename, (default= r&#8221;c:\/Users\/&#8221;+user_path+&#8221;\/Desktop\/watermarkd.png&#8221;) : File Name For Saving<\/li><\/ul><div>More Photo Examples:<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e0295d5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e0295d5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-8b5bd4b\" data-id=\"8b5bd4b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d9df18c elementor-widget elementor-widget-image\" data-id=\"d9df18c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/root_top_watermarked2-Custom.png\" class=\"attachment-full size-full wp-image-14870\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/root_top_watermarked2-Custom.png 900w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/root_top_watermarked2-Custom-300x200.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/root_top_watermarked2-Custom-768x512.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Model Promoting Holypython.com Watermarked with Watermarkd<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f3cfb82\" data-id=\"f3cfb82\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a2915d0 elementor-widget elementor-widget-image\" data-id=\"a2915d0\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/Watermarkd1-Custom.png\" class=\"attachment-full size-full wp-image-14871\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/Watermarkd1-Custom.png 900w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/Watermarkd1-Custom-300x200.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/Watermarkd1-Custom-768x512.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Young Model Posing For Photography Agency with Watermarkd<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8fbeb2f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8fbeb2f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-033c177\" data-id=\"033c177\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f68bf6f elementor-widget elementor-widget-image\" data-id=\"f68bf6f\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/U-of-U_Watermarkd-Custom.png\" class=\"attachment-full size-full wp-image-14873\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/U-of-U_Watermarkd-Custom.png 900w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/U-of-U_Watermarkd-Custom-300x200.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/U-of-U_Watermarkd-Custom-768x512.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Univeristy of Utah Campus Watermarked with Watermarkd<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-1b3cf7f\" data-id=\"1b3cf7f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-173eeb4 elementor-widget elementor-widget-image\" data-id=\"173eeb4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"896\" height=\"615\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/1Watermarkd-Custom-2.png\" class=\"attachment-full size-full wp-image-14878\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/1Watermarkd-Custom-2.png 896w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/1Watermarkd-Custom-2-300x206.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/10\/1Watermarkd-Custom-2-768x527.png 768w\" sizes=\"(max-width: 896px) 100vw, 896px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">New Release Poster for Software<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-98ff9bb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"98ff9bb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f535829\" data-id=\"f535829\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a200d0e elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"a200d0e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Watermarkd Usage: Single Function with GUI<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b36f3e3 elementor-widget elementor-widget-menu-anchor\" data-id=\"b36f3e3\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"singlegui\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-47d56b2 elementor-widget elementor-widget-text-editor\" data-id=\"47d56b2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Usage with GUI is pretty straightforward.<\/p><ol><li>Pick an image file<\/li><li>Type your watermark text<\/li><li>Choose a watermark text size. Options are:<ul><li>Normal (by default)<\/li><li>Small<\/li><li>Large<\/li><li>Value: Let&#8217;s a custom font value to be entered. Possibly something like ~150 for high rez images where something like 30 might suffice for a low resolution image.<\/li><\/ul><\/li><li>Transparency: This value defines the transparency (or opacity) of your watermark text. 85 is the default value but you can go all the way down to 0 for a completely transparent text (Watermark would be invisible then). 255, the maximum value will create a solid white watermark text (which is more just a white text than watermark since it&#8217;s not transparent at all. It can sometimes be useful nevertheless.)<\/li><li>Save as: Different options to save watermarked image as different image types such as:<ol><li>png (default)<\/li><li>jpg<\/li><li>gif<\/li><li>bmp<\/li><\/ol><\/li><li>Save to: Path or folder that you&#8217;d like to save your watermarked image to. You can either type it or choose it with the help of the Path button.<\/li><li>Filename: Filename you&#8217;d like to save your watermarked image under.<\/li><\/ol><p>Once submit is pressed all the inputs from the user get registered and watermarking process starts.<\/p><p><b>It can last anywhere between miliseconds to a couple of seconds depending on the resolution of the image. (For the very high resolutions you might need to allow 2-3 seconds which also depends on the availability of computation resources.)<\/b><\/p><p>Just as GUI is a new dimension for the Python coder, Packaging also is a new dimension that opens up a whole new world of opportunities and skillset.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-04f4c02 elementor-widget elementor-widget-text-editor\" data-id=\"04f4c02\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>To activate GUI component all you have to do is:<\/p><p><code>Spread.single(gui=True)<\/code><\/p><p>You don&#8217;t have to pass any other arguments to setting parameters since they&#8217;ll be overridden after the GUI is executed.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-49291fe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"49291fe\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c91cf3e\" data-id=\"c91cf3e\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b3bbdcb elementor-widget elementor-widget-html\" data-id=\"b3bbdcb\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>from Watermarkd import Spread\r\n\r\nSpread.single(gui=True)\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40b073d elementor-widget elementor-widget-image\" data-id=\"40b073d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1904\" height=\"1603\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1.png\" class=\"attachment-full size-full wp-image-14776\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1.png 1904w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1-300x253.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1-1024x862.png 1024w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1-768x647.png 768w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI1-1536x1293.png 1536w\" sizes=\"(max-width: 1904px) 100vw, 1904px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Single Function's GUI Component in Watermarkd<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-afb2499 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"afb2499\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Watermarkd Usage: Batch Function with GUI<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dad448a elementor-widget elementor-widget-menu-anchor\" data-id=\"dad448a\" data-element_type=\"widget\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"batchgui\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a19d406 elementor-widget elementor-widget-text-editor\" data-id=\"a19d406\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Usage with GUI in batch function is also simple and straightforward. It&#8217;s mostly overlapping with single function&#8217;s steps. Here are the main differences:<\/p><ul><li>Pick a folder instead of a single image through the Browse button.<\/li><li>At the bottom file name will be used as a seed to generate multiple images with watermark. For instance, if you choose <strong>Work<\/strong> as file name, files will be saved as Work1.jpg, Work2.jpg, Work3.jpg etc.<\/li><\/ul><p>Once submit is pressed all the inputs from the user get registered and watermarking process will start.<\/p><p>It can last anywhere between miliseconds to a couple of seconds per image depending on the resolution of the image. (For the very high resolutions you might need to allow <b>2-3 seconds per image<\/b> which also depends on the availability of computation resources.)\u00a0 After that time watermarked images will be created in the specified folder or default folder if none is specified.<\/p><p>Activate graphical user interface for bath watermarking a folder of images similar to the code in single() function&#8217;s case:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cbd39b elementor-widget elementor-widget-html\" data-id=\"5cbd39b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre rel=\"Python\"><code>from Watermarkd import Spread\r\n\r\nSpread.batch(gui=True)\r\n<\/code><\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-756793e elementor-widget elementor-widget-image\" data-id=\"756793e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1903\" height=\"1601\" src=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2.png\" class=\"attachment-full size-full wp-image-14777\" alt=\"\" srcset=\"https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2.png 1903w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2-300x252.png 300w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2-1024x861.png 1024w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2-768x646.png 768w, https:\/\/holypython.com\/wp-content\/uploads\/2020\/09\/Watermarkd-GUI2-1536x1292.png 1536w\" sizes=\"(max-width: 1903px) 100vw, 1903px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Watermarkd batch function's GUI window<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f0d41c2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f0d41c2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-232d4d1\" data-id=\"232d4d1\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1fde32e elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"1fde32e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Further Steps with Watermarkd<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-848c70a elementor-widget elementor-widget-text-editor\" data-id=\"848c70a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>As much as I&#8217;d love to see Watermarkd getting used by people with different backgrounds such as:<\/p>\n<ul>\n<li>Photographers&nbsp;<\/li>\n<li>Bloggers<\/li>\n<li>Entrepreneurs and Business Owners<\/li>\n<li>Students<\/li>\n<li>Teachers<\/li>\n<li>Media Agencies<\/li>\n<li>Artists, Illustrators<\/li>\n<\/ul>\n<p><b>I&#8217;d also love to see it being checked out as a learning tool for Python packaging and Python coding in general. It has all the ingredients necessary to comprehend packaging in Python.<\/b><\/p>\n<p>Besides packaging topics such as: Pypi repository publishing, Github hosting, licensing etc. It also has fundamental coding topics, but nothing too complicated to discourage an intermediate or even beginner coder, such as:<\/p>\n<ul>\n<li><a href=\"https:\/\/holypython.com\/intermediate-python-lessons\/lesson-8-python-for-loop\/\">For Loop<\/a> &amp; <a href=\"https:\/\/holypython.com\/intermediate-python-lessons\/lesson-9-while-loop\/\">While Loop<\/a><\/li>\n<li><a href=\"https:\/\/holypython.com\/intermediate-python-lessons\/lesson-7-python-conditional-statements\/\">Conditional Statements (if, elif, else)<\/a><\/li>\n<li><a href=\"https:\/\/holypython.com\/beginner-python-lessons\/lesson-2-python-variables\/\">Python Variables<\/a><\/li>\n<li><a href=\"https:\/\/holypython.com\/beginner-python-lessons\/lesson-4-type-conversion\/\">Data Type Conversions<\/a><\/li>\n<li>Python Classes<\/li>\n<li><a href=\"https:\/\/holypython.com\/beginner-python-lessons\/lesson-16-defining-functions\/\">User defined Python functions<\/a><\/li>\n<li>Making use of os library<\/li>\n<li><a href=\"https:\/\/holypython.com\/advanced-python-lessons\/lesson-8-working-with-files-in-python\/\">File Operations<\/a><\/li>\n<li><a href=\"https:\/\/holypython.com\/beginner-python-lessons\/lesson-18-python-operators\/\">Python Operators<\/a><\/li>\n<\/ul>\n<p>Additionally, i<span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family );\">t&#8217;s pretty simple to understand and demonstrates all the ingredients needed to publish a library on PyPI (Python Package Index), such as:<\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>setup.py<\/li>\n<li>requirements.txt<\/li>\n<li>License<\/li>\n<li>Readme.md<\/li>\n<li>__init__.py<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div>Every great coder was a beginner at some point. So, don&#8217;t be too shy. One step at a time you too can become great, and create great programs,&nbsp; there is no doubt about it. Some helpful topics to discover can be:<\/div>\n<ul>\n<li><a href=\"https:\/\/holypython.com\/creating-gui-programs-w-python-fast-easy-pysimplegui\/\">Graphical User Interface (GUI)<\/a>,<\/li>\n<li>Databases,<\/li>\n<li>Packaging,<\/li>\n<li><a href=\"https:\/\/holypython.com\/ml\">Machine Learning<\/a>,<br><\/li><li>Open Source Software Licenses<\/li>\n<li>Open Source Software in general.<\/li>\n<\/ul>\n<p>Such topics open up whole new worlds for a programmer to progress towards, you can see them as paths you can take in your journey(Oftentimes you can combine these paths for a great product as well).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fd86c8b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fd86c8b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e92b89d\" data-id=\"e92b89d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-21523b7 elementor-widget__width-auto elementor-widget elementor-widget-heading\" data-id=\"21523b7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Final Thoughts<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9fb5111 elementor-widget elementor-widget-text-editor\" data-id=\"9fb5111\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>If you&#8217;re a beginner or intermediate programmer go ahead and create a Github account. Maybe create a trivial repository where you take some notes and save some files if you like, just to start getting familiar with the environment.<\/p><p>If you like Watermarkd or Holypython&#8217;s work in general, <a href=\"https:\/\/github.com\/holypython\" target=\"_blank\" rel=\"noopener\">you&#8217;re welcome to visit our Github repos<\/a>\u00a0as well. You can read the <a href=\"https:\/\/github.com\/holypython\/Watermarkd\" target=\"_blank\" rel=\"noopener\">Watermarkd.py source code<\/a> along with other necessary files there (setup.py, requirements.txt, __init__.py etc.).\u00a0<\/p><p>As simple as it is, I hope Watermarkd library serves as a practical solution for people who might need watermarking and I&#8217;d love to see it serve educational purposes for coders and developers who never had a chance to explore packaging and publishing topics related to Python.<\/p><p>Thank you so much for visiting.<\/p><p>ps: I&#8217;d like to thank creators and contributors of <a href=\"https:\/\/python-pillow.org\/\" target=\"_blank\" rel=\"noopener\">Pillow the Friendly PIL Fork<\/a> and <a href=\"http:\/\/stackoverflow.com\">PySimpleGUI <\/a>libraries for creating such fantastic libraries and influencing further developments. Also, a huge thank you to <a href=\"http:\/\/stackoverflow.com\" target=\"_blank\" rel=\"noopener\">Stack Overflow community<\/a> for sharing so much expert level knowledge and being so kind.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>What is watermarking? Watermarking is a technology of printing less opaque text or symbols on images and items. Believe it or not it&#8217;s considered an ancient technology as old as paper since it&#8217;s been used on special letters, stamps and printed currency. As digital imaging has never been such a humongous part of humans&#8217; lives, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":14855,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[35,60,62,67,52],"tags":[],"class_list":["post-14767","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-advanced","category-gui","category-image-processing","category-packaging","category-tutorials"],"acf":[],"_links":{"self":[{"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/posts\/14767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/comments?post=14767"}],"version-history":[{"count":0,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/posts\/14767\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/media\/14855"}],"wp:attachment":[{"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/media?parent=14767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/categories?post=14767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/holypython.com\/wp-json\/wp\/v2\/tags?post=14767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}