{"id":7417,"date":"2024-09-18T21:44:40","date_gmt":"2024-09-18T12:44:40","guid":{"rendered":"https:\/\/kia-tips.com\/?p=7417"},"modified":"2024-09-18T22:29:57","modified_gmt":"2024-09-18T13:29:57","slug":"how-to-add-watermark-to-images-automatically-using-python","status":"publish","type":"post","link":"https:\/\/kia-tips.com\/en\/python\/how-to-add-watermark-to-images-automatically-using-python\/","title":{"rendered":"How to Automatically Add Watermarks to Images Using Python with Code Examples"},"content":{"rendered":"<p>This article provides a clear explanation of how to automatically add watermarks to images using Python.<\/p>\r\n<p>When publishing photos or images on the internet, it\u2019s crucial to add a watermark to protect your copyright. This is especially important today when images can be easily shared on social media platforms like Instagram and Twitter.<\/p>\r\n<p>Automating the process of adding watermarks saves a lot of time for bloggers, photographers, and designers, while efficiently protecting their copyrights.<\/p>\r\n<p>By applying a logo or text watermark to images in bulk, you can ensure that the watermark remains visible even if the image is cropped. This method helps boost brand visibility and protect your images from theft or unauthorized use.<\/p>\r\n\r\n<div class=\"c_box pink_box type_normal\">\r\nThis article is a translation from Japanese, so please forgive any translation errors or culturally unfamiliar expressions. We hope it still provides valuable insights and helpful information. Thank you for your understanding!\r\n<\/div>\r\n\r\n\r\n<h2>1. Script Overview<\/h2>\r\n<a href=\"https:\/\/kia-tips.com\/wp-content\/uploads\/2024\/09\/kia-tips-watermark.gif\" data-lightbox=\"lightbox\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kia-tips.com\/wp-content\/uploads\/2024\/09\/kia-tips-watermark.gif\" alt=\"\" width=\"608\" height=\"342\" class=\"aligncenter size-full wp-image-7341\"  style=\"margin-bottom:3em;\"\/><\/a>\r\n<div class=\"recommendations-simple\"><div class=\"recommendations_title\">Here\u2019s What You Can Do<\/div>\r\n<ul>\r\n  <li>Automatically place the prepared PNG image in the bottom right corner<\/li>\r\n  <li>Automatically choose a black or white logo based on the brightness of the placement area<\/li>\r\n  <li>Automatically adjust the logo size according to the image size<\/li>\r\n  <li>Supports common image formats like JPEG, PNG, and BMP<\/li>\r\n<\/ul>\r\n<\/div>\r\n\r\n<p>This script <strong>automatically adds watermarks to images<\/strong>.<\/p>\r\n<p>Additionally, an <b>install.bat<\/b> file is provided to easily set up the required environment.<\/p>\r\n\r\n<p>You can download the software from the link below:<\/p>\r\n<div class=\"recipie_button\"><a href=\"https:\/\/kia13.booth.pm\/items\/6109186\" target=\"_blank\" rel=\"nofollow noopener\" class=\"btn btn-border\">Download Here [11KB]<\/a><\/div>\r\n\r\n\r\n<h2>2. Prerequisites<\/h2>\r\n<p>To use this script, you need the following environment:<\/p>\r\n<ul>\r\n  <li>A Windows environment (required for the batch file)<\/li>\r\n  <li>Python 3.x installed<\/li>\r\n  <li>Required Python libraries: Pillow, NumPy<\/li>\r\n<\/ul>\r\n\r\n<h2>3. How to Use<\/h2>\r\n\r\n<h3 style=\"margin-top:0;\">Step 1: Environment Setup<\/h3>\r\n<ul>\r\n  <li><strong>Install Python:<\/strong> If Python 3.x is not installed, download it from the <a href=\"https:\/\/www.python.org\/downloads\/\" target=\"_blank\" rel=\"noopener\">official Python website<\/a> and install it.<\/li>\r\n  <li><strong>Run the environment setup:<\/strong> Extract the &#8220;Auto-Watermark-by-kia.zip&#8221; file and double-click &#8220;install.bat&#8221; to execute the setup process.<\/li>\r\n  <li><strong>Organize the script and logo images:<\/strong> After extraction, the directory structure should look like this:\r\n    <pre>\r\n\u251c\u2500\u2500 watermark.py\r\n\u251c\u2500\u2500 watermark.bat\r\n\u251c\u2500\u2500 install.bat\r\n\u251c\u2500\u2500 logo\r\n\u2502   \u251c\u2500\u2500 logo-black.png\r\n\u2502   \u2514\u2500\u2500 logo-white.png\r\n    <\/pre>\r\n  <\/li>\r\n<\/ul>\r\n\r\n<h3>Step 2: Preparing Transparent Logo Images for Watermarks<\/h3>\r\n<p>Prepare your logo images according to the following requirements:<\/p>\r\n<ul>\r\n  <li><strong>Create logo images:<\/strong> Save your logo images as &#8220;logo-black.png&#8221; and &#8220;logo-white.png&#8221; in the &#8220;logo&#8221; folder, overwriting the existing files.<\/li>\r\n  <li>Prepare both black and white versions of the logo.<\/li>\r\n  <li>Save the logos as PNG files with transparent backgrounds.<\/li>\r\n  <li>The recommended image size is between 200px and 728px in width.<\/li>\r\n<\/ul>\r\n\r\n<p>Rename the prepared logo files as <strong>logo-black.png<\/strong> and <strong>logo-white.png<\/strong> and place them in the &#8220;logo&#8221; folder of the script.<\/p>\r\n\r\n<h3>Step 3: Adding Watermarks to Images<\/h3>\r\n<ul>\r\n  <li><strong>Prepare image files:<\/strong> Get the images you want to watermark.<\/li>\r\n  <li><strong>Create a shortcut:<\/strong> Create a shortcut for the watermark.bat file, move it to your preferred location, and execute it easily.<\/li>\r\n  <li><strong>How to run:<\/strong> Drag and drop the image files onto the watermark.bat file (or its shortcut) to execute the script.<\/li>\r\n  <li><strong>Batch processing:<\/strong> You can process multiple images by dragging and dropping them all at once.<\/li>\r\n<\/ul>\r\n\r\n<h3>Step 4: Check the Results<\/h3>\r\n<ul>\r\n  <li><strong>Output files:<\/strong> The processed images will have &#8220;_watermarked&#8221; appended to their filenames and will be saved in the same location as the original files.<\/li>\r\n  <li><strong>Example:<\/strong> If you process &#8220;sample.jpg,&#8221; the output will be &#8220;sample_watermarked.jpg&#8221;.<\/li>\r\n<\/ul>\r\n\r\n<h2>4. Script Details<\/h2>\r\n<h3 style=\"margin-top:0;\">watermark.py<\/h3>\r\n<p>This is the main Python script that adds watermarks to your images.<\/p>\r\n<h4>Settings for Adjusting Watermark Size and Position<\/h4>\r\n<p>By modifying the settings at the top of the script, you can freely adjust the size, position, opacity, and brightness threshold of the watermark.<\/p>\r\n<ul>\r\n  <li><strong>Watermark size (%):<\/strong> You can specify the size of the watermark as a percentage of the image&#8217;s size. The shorter side of the image\u2019s dimensions (either width or height) is used as the base for the watermark size.<\/li>\r\n  <li><strong>Brightness threshold:<\/strong> If the average brightness of the area where the watermark is placed is higher than this value, the black logo will be used. If it&#8217;s lower, the white logo will be applied. Brightness is measured on a scale from 0 (darkest) to 255 (brightest).<\/li>\r\n  <li><strong>Opacity:<\/strong> The opacity of both the black and white logos can be adjusted, with values between 0 and 1. A value of 0 means fully opaque, while 1 means fully transparent.<\/li>\r\n  <li><strong>Watermark position (%):<\/strong> You can specify the watermark\u2019s position as a percentage relative to the width and height of the image. For example, setting the value to 0.95 means the watermark will be positioned 5% inward from the right and bottom edges.<\/li>\r\n  <li><strong>Watermark image path:<\/strong> Specify the file paths for both the black and white logo images.<\/li>\r\n<\/ul>\r\n\r\n<pre><code class=\"language-python\">import os\r\nimport sys\r\nimport logging\r\nimport argparse\r\nfrom PIL import Image\r\nimport numpy as np\r\n\r\n########################################################################\r\n# User-configurable settings\r\n\r\n# Watermark size (percentage of the shorter side of the image)\r\nLOGO_SCALE = 0.08  # Example: 0.08 means 8% of the shorter side\r\n\r\n# Brightness threshold (0-255)\r\nBRIGHTNESS_THRESHOLD = 110  # The brightness threshold to switch between black and white logos (Example: 110)\r\n\r\n# Opacity (between 0 and 1)\r\nOPACITY_DARK_LOGO = 0.5  # Opacity for the black logo (0 = fully opaque, 1 = fully transparent)\r\nOPACITY_LIGHT_LOGO = 0.4  # Opacity for the white logo (0 = fully opaque, 1 = fully transparent)\r\n\r\n# Watermark position (percentage)\r\nANCHOR_X_RATIO = 0.95  # Position of the watermark on the right bottom side (percentage of width, Example: 0.95 means 5% inside from the right edge)\r\nANCHOR_Y_RATIO = 0.95  # Position of the watermark on the bottom side (percentage of height, Example: 0.95 means 5% up from the bottom edge)\r\n\r\n# Paths to the watermark images\r\nBLACK_WATERMARK_PATH = r\"logo\\logo-black.png\"\r\nWHITE_WATERMARK_PATH = r\"logo\\logo-white.png\"\r\n\r\n# Path to the log file\r\nLOG_FILE_PATH = \"watermark_log.txt\"\r\n\r\n# End of user-configurable settings\r\n########################################################################\r\n\r\ndef setup_logging():\r\n    \"\"\"Set up logging\"\"\"\r\n    logging.basicConfig(\r\n        filename=LOG_FILE_PATH,\r\n        filemode='w',\r\n        level=logging.INFO,\r\n        format='%(asctime)s - %(levelname)s - %(message)s',\r\n    )\r\n\r\ndef load_logo_images():\r\n    \"\"\"Load the watermark images\"\"\"\r\n    try:\r\n        black_logo = Image.open(BLACK_WATERMARK_PATH).convert('RGBA')\r\n    except FileNotFoundError:\r\n        logging.error(f\"Black logo image not found: {BLACK_WATERMARK_PATH}\")\r\n        sys.exit(1)\r\n    except Exception as e:\r\n        logging.error(f\"Error loading black logo image: {e}\")\r\n        sys.exit(1)\r\n\r\n    try:\r\n        white_logo = Image.open(WHITE_WATERMARK_PATH).convert('RGBA')\r\n    except FileNotFoundError:\r\n        logging.error(f\"White logo image not found: {WHITE_WATERMARK_PATH}\")\r\n        sys.exit(1)\r\n    except Exception as e:\r\n        logging.error(f\"Error loading white logo image: {e}\")\r\n        sys.exit(1)\r\n\r\n    return black_logo, white_logo\r\n\r\ndef is_image_file(file_path):\r\n    \"\"\"Check if the file is an image using Pillow\"\"\"\r\n    try:\r\n        with Image.open(file_path) as img:\r\n            img.verify()  # Verify that the image file is not corrupted\r\n        return True\r\n    except (IOError, SyntaxError) as e:\r\n        logging.error(f\"Error checking file format: {file_path}\")\r\n        logging.error(f\"Error details: {e}\")\r\n        return False\r\n\r\ndef calculate_average_brightness(region):\r\n    \"\"\"Calculate the average brightness of a given region\"\"\"\r\n    region_rgb = region.convert('RGB')\r\n    pixels = np.array(region_rgb)\r\n    luminance = 0.2126 * pixels[:, :, 0] + 0.7152 * pixels[:, :, 1] + 0.0722 * pixels[:, :, 2]\r\n    average_brightness = luminance.mean()\r\n    return average_brightness\r\n\r\ndef adjust_logo_opacity(logo_image, opacity_value):\r\n    \"\"\"Adjust the opacity of the logo\"\"\"\r\n    opacity = int(255 * (1 - opacity_value))\r\n    alpha = logo_image.split()[3]\r\n    alpha = alpha.point(lambda p: p * (opacity \/ 255))\r\n    logo_image.putalpha(alpha)\r\n    return logo_image\r\n\r\ndef process_image(image_path, black_logo, white_logo):\r\n    \"\"\"Add a watermark to an image\"\"\"\r\n    if not os.path.isfile(image_path) or not is_image_file(image_path):\r\n        logging.warning(f\"Unsupported file format or file not found: {image_path}\")\r\n        return\r\n\r\n    try:\r\n        with Image.open(image_path) as im:\r\n            # Convert the image to RGBA mode (to handle transparency)\r\n            im = im.convert('RGBA')\r\n            width, height = im.size\r\n\r\n            # Determine the size of the watermark based on the shorter side of the image\r\n            shorter_side = min(width, height)\r\n            logo_size = int(shorter_side * LOGO_SCALE)  # Set watermark size based on the shorter side\r\n\r\n            # Calculate logo dimensions while maintaining aspect ratio\r\n            aspect_ratio = black_logo.width \/ black_logo.height\r\n            logo_width = logo_size\r\n            logo_height = int(logo_width \/ aspect_ratio)\r\n\r\n            # Resize the logos (keeping them in PNG format)\r\n            black_logo_resized = black_logo.resize((logo_width, logo_height), resample=Image.LANCZOS)\r\n            white_logo_resized = white_logo.resize((logo_width, logo_height), resample=Image.LANCZOS)\r\n\r\n            # Calculate the watermark placement\r\n            anchor_x = int(width * ANCHOR_X_RATIO)\r\n            anchor_y = int(height * ANCHOR_Y_RATIO)\r\n            x = anchor_x - logo_width\r\n            y = anchor_y - logo_height\r\n            x = max(0, x)\r\n            y = max(0, y)\r\n\r\n            # Crop the region where the watermark will be placed\r\n            region = im.crop((x, y, x + logo_width, y + logo_height))\r\n\r\n            # Calculate the brightness of the region\r\n            average_brightness = calculate_average_brightness(region)\r\n\r\n            # Select the logo based on the brightness\r\n            if average_brightness >= BRIGHTNESS_THRESHOLD:\r\n                logo_to_use = black_logo_resized\r\n                opacity_value = OPACITY_DARK_LOGO\r\n                logging.info(\"Selected Logo: Black\")\r\n            else:\r\n                logo_to_use = white_logo_resized\r\n                opacity_value = OPACITY_LIGHT_LOGO\r\n                logging.info(\"Selected Logo: White\")\r\n\r\n            # Apply the opacity to the selected logo\r\n            logo_to_use = adjust_logo_opacity(logo_to_use, opacity_value)\r\n\r\n            # Create a new layer for the watermark\r\n            watermark_layer = Image.new('RGBA', im.size, (0, 0, 0, 0))\r\n            watermark_layer.paste(logo_to_use, (x, y), logo_to_use)\r\n\r\n            # Combine the original image with the watermark\r\n            combined = Image.alpha_composite(im, watermark_layer)\r\n\r\n            # Determine the output file path and extension\r\n            dir_name, file_name = os.path.split(image_path)\r\n            base_name, ext = os.path.splitext(file_name)\r\n            output_filename = f\"{base_name}_watermarked{ext}\"\r\n            output_path = os.path.join(dir_name, output_filename)\r\n\r\n            # Save the image\r\n            if ext.lower() in ['.png', '.gif', '.tiff', '.tif', '.webp']:\r\n                combined.save(output_path)\r\n            else:\r\n                combined_rgb = combined.convert('RGB')\r\n                combined_rgb.save(output_path, quality=95)\r\n\r\n            logging.info(f\"Processed and saved: {output_path}\")\r\n\r\n    except Exception as e:\r\n        logging.error(f\"Error processing image: {image_path}\")\r\n        logging.error(f\"Error details: {e}\")\r\n\r\ndef main():\r\n    # Set up logging\r\n    setup_logging()\r\n\r\n    # Process command-line arguments\r\n    parser = argparse.ArgumentParser(description='Script to add watermarks to images')\r\n    parser.add_argument('images', nargs='+', help='Paths to the image files to be processed')\r\n    args = parser.parse_args()\r\n\r\n    # Load the watermark images\r\n    black_logo, white_logo = load_logo_images()\r\n\r\n    for image_path in args.images:\r\n        process_image(image_path, black_logo, white_logo)\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n<\/code><\/pre>\r\n\r\n<h4>Code Explanation:<\/h4>\r\n<ul>\r\n  <li><strong>Importing Libraries:<\/strong> <strong>Pillow<\/strong> is used for image processing, and <strong>NumPy<\/strong> is used for numerical calculations.<\/li>\r\n  <li><strong>Loading the Watermark Images:<\/strong> The black and white logo images are loaded from the specified paths in <strong>RGBA mode<\/strong>. Using RGBA mode allows handling transparency.<\/li>\r\n  <li><strong>Retrieving Image Files:<\/strong> The script retrieves a list of image files to process from the command-line arguments, allowing multiple images to be processed at once.<\/li>\r\n  <li><strong>Resizing the Logo Based on Image Size:<\/strong> The script determines the aspect ratio of the image and adjusts the logo size based on the specified percentage. The height is used as the basis for portrait images, while the width is used for landscape images, maintaining the logo\u2019s aspect ratio.<\/li>\r\n  <li><strong>Calculating Watermark Position:<\/strong> The script calculates the watermark position based on the specified percentage values. It uses the bottom-right corner as the reference and adjusts the top-left position of the logo accordingly, ensuring the logo stays within the bounds of the image.<\/li>\r\n  <li><strong>Calculating Brightness:<\/strong> The script calculates the average brightness of the region where the watermark will be placed. Based on whether the brightness is above or below the threshold, the script decides whether to use the black or white logo.<\/li>\r\n  <li><strong>Setting Opacity:<\/strong> The selected logo\u2019s opacity is adjusted based on the specified transparency value. The script manipulates the alpha channel to naturally blend the logo into the image.<\/li>\r\n  <li><strong>Combining the Watermark:<\/strong> The original image and the watermark are combined. Alpha compositing is used to correctly layer the watermark, which has transparency information, over the original image.<\/li>\r\n  <li><strong>Saving the Image:<\/strong> The processed image is saved with <code>_watermarked<\/code> appended to the original file name. The script saves the image in the appropriate mode based on the image format. For instance, JPEG files are converted to RGB mode and saved with specified quality settings.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h3>Batch Files and Their Use<\/h3>\r\n<p><strong>What is a batch file?<\/strong> A batch file is a type of script file in Windows that automates tasks. In this case, the batch files are used to set up the environment and run the watermarking process without having to manually input commands each time.<\/p>\r\n\r\n\r\n<h3>install.bat<\/h3>\r\n<p>This is a batch file for setting up the environment. It creates a virtual environment (venv) and installs the necessary libraries.<\/p>\r\n<p>You only need to run this file the first time after downloading the script, and you can delete it afterward.<\/p>\r\n<pre><code class=\"language-batch\">\r\n@echo off\r\nchcp 65001 >nul\r\nsetlocal\r\n\r\nREM Create the virtual environment\r\npython -m venv venv\r\n\r\nREM Activate the virtual environment\r\ncall venv\\Scripts\\activate.bat\r\n\r\nREM Install the necessary libraries\r\npip install --upgrade pip\r\npip install Pillow numpy\r\n\r\necho Environment setup is complete.\r\npause\r\n<\/code><\/pre>\r\n\r\n<h4>Code Explanation:<\/h4>\r\n<ul>\r\n  <li><strong>Creating the virtual environment:<\/strong> A virtual environment is created using Python\u2019s venv module.<\/li>\r\n  <li><strong>Installing the libraries:<\/strong> Pillow and NumPy are installed using pip.<\/li>\r\n<\/ul>\r\n\r\n\r\n<h3>watermark.bat<\/h3>\r\n<p>This is a batch file for running the Python script.<\/p>\r\n\r\n<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/prism\/1.29.0\/themes\/prism-tomorrow.min.css\" rel=\"stylesheet\" \/>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/prism\/1.29.0\/prism.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/prism\/1.29.0\/components\/prism-python.min.js\"><\/script>\r\n<pre><code class=\"language-batch\">\r\n@echo off\r\nchcp 65001 >nul\r\nsetlocal\r\n\r\nREM Activate the virtual environment\r\ncall venv\\Scripts\\activate.bat\r\n\r\nREM Set the script path (assuming it is in the same directory as the batch file)\r\nset SCRIPT_PATH=%~dp0watermark.py\r\n\r\nREM Collect the arguments\r\nset args=\r\n:loop\r\nif \"%~1\"==\"\" goto after_loop\r\nset args=%args% \"%~1\"\r\nshift\r\ngoto loop\r\n:after_loop\r\n\r\nREM Run the script\r\npython \"%SCRIPT_PATH%\" %args%\r\n\r\nREM Check for errors\r\nif %ERRORLEVEL% neq 0 (\r\n    echo An error occurred.\r\n    pause\r\n)\r\n<\/code><\/pre>\r\n\r\n<h4>Code Explanation:<\/h4>\r\n<ul>\r\n  <li><strong>Activating the virtual environment:<\/strong> The virtual environment created by install.bat is activated.<\/li>\r\n  <li><strong>Running the script:<\/strong> The Python script is executed with the image files specified in the command-line arguments.<\/li>\r\n  <li><strong>Error handling:<\/strong> If an error occurs, a message is displayed.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h2>5. Conclusion<\/h2>\r\n<p>This script simplifies the process of adding watermarks to your images. It automatically selects the appropriate logo based on brightness, resizes the logo according to the image size, and eliminates the need for manual adjustments. We encourage you to give it a try!<\/p>\r\n<p>If you have any questions or feedback, we encourage you to leave them in the comment section below.<\/p>\r\n<p>Thank you for reading! We hope this script helps protect your images and enhance your workflow.<\/p>\r\n\r\n<ul>\r\n  <li><strong>License:<\/strong> This script is released under the MIT License.<\/li>\r\n  <li><strong>Related Links:<\/strong>\r\n    <ul>\r\n      <li><a href=\"https:\/\/pillow.readthedocs.io\/\">Pillow Official Documentation<\/a><\/li>\r\n      <li><a href=\"https:\/\/numpy.org\/doc\/\">NumPy Official Documentation<\/a><\/li>\r\n    <\/ul>\r\n  <\/li>\r\n<\/ul>\r\n","protected":false},"excerpt":{"rendered":"This article provides a clear explanation of how to automatically add watermarks to images using Python. When &#8230;","protected":false},"author":2,"featured_media":7370,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"en_US","_original_post":"https:\/\/kia-tips.com\/?p=7327","footnotes":""},"categories":[99],"tags":[],"class_list":{"0":"post-7417","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-python","8":"en-US","9":"article cf"},"_links":{"self":[{"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/posts\/7417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/comments?post=7417"}],"version-history":[{"count":8,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/posts\/7417\/revisions"}],"predecessor-version":[{"id":7439,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/posts\/7417\/revisions\/7439"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/media\/7370"}],"wp:attachment":[{"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/media?parent=7417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/categories?post=7417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kia-tips.com\/wp-json\/wp\/v2\/tags?post=7417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}