# Creating an option for watermark on photos

**URL:** <https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930>\
**Category:** Feature Requests\
**Created:** [April 22, 2026, 1:41am UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930 "2026-04-22T01:41:56Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 22, 2026, 1:41am UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/1 "2026-04-22T01:41:56Z")

</div>

I’m building a field app for technicians of Trinidad & Tobago where technicians take photos as proof of work.

I need the ability to embed a watermark directly onto the image file (not just overlay in UI) that includes:

- Timestamp
- GPS location
- Status / metadata

This is critical because the image may leave the app and needs to retain verification data.

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [April 22, 2026, 4:15am UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/2 "2026-04-22T04:15:43Z")

</div>

You can do something like this in a javascript column, and then display the result of that javascript column as an image.

```auto
return (async () => {
  const url = p1;
  const text = p2 || "";

  let config = {};
  try {
    config = p3 ? JSON.parse(p3) : {};
  } catch (e) {}

  const fontSize = config.fontSize || 24;
  const color = config.color || "rgba(255,255,255,0.7)";
  const position = config.position || "bottom-right";

  return new Promise((resolve) => {
    const img = new Image();
    img.crossOrigin = "anonymous";

    img.onload = function () {
      const canvas = document.createElement("canvas");
      const ctx = canvas.getContext("2d");

      canvas.width = img.width;
      canvas.height = img.height;

      ctx.drawImage(img, 0, 0);

      ctx.font = `${fontSize}px sans-serif`;
      ctx.fillStyle = color;
      ctx.textBaseline = "bottom";

      const padding = 10;
      const textWidth = ctx.measureText(text).width;

      let x, y;

      switch (position) {
        case "bottom-left":
          x = padding;
          y = canvas.height - padding;
          break;
        case "top-left":
          x = padding;
          y = fontSize + padding;
          break;
        case "top-right":
          x = canvas.width - textWidth - padding;
          y = fontSize + padding;
          break;
        case "center":
          x = (canvas.width - textWidth) / 2;
          y = canvas.height / 2;
          break;
        default:
          x = canvas.width - textWidth - padding;
          y = canvas.height - padding;
      }

      ctx.shadowColor = "rgba(0,0,0,0.5)";
      ctx.shadowBlur = 4;

      ctx.fillText(text, x, y);

      resolve(canvas.toDataURL("image/png"));
    };

    img.onerror = function () {
      resolve(null);
    };

    img.src = url;
  });
})();

```

 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/9/c/9cb2245692770afc3c794f95710d4a40bcd7893e.png)

---

<div class="post-metadata">

**Author:** ![nathanaelb](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/nathanaelb/32/43079_2.png) [@nathanaelb](https://community.glideapps.com/u/nathanaelb)\
**Post date:** [April 22, 2026, 4:13pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/3 "2026-04-22T16:13:24Z")

</div>

Or maybe you can feed your image file into Cloudinary and have Cloudinary add a watermark to the image before returning it to Glide.

---

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 22, 2026, 7:53pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/4 "2026-04-22T19:53:30Z")

</div>

Thank you guys for the help the both options are great I will try the Java code (which I hope works) if not Cloudinary. But Jeff\_Hager I am new to this so this is alot to understand but when I add the link to Java in my column it doesn’t seem to work. I don’t know if you can advise me on this? I mean there was alot of other stuff I did but if you have a way that you are willing to share I would be grateful.

---

<div class="post-metadata">

**Author:** ![nathanaelb](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/nathanaelb/32/43079_2.png) [@nathanaelb](https://community.glideapps.com/u/nathanaelb)\
**Post date:** [April 22, 2026, 7:56pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/5 "2026-04-22T19:56:53Z")

</div>

In your table, create a JavaScript column. There you have 4 fields. Fill these out as Jeff suggested.

---

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 22, 2026, 8:22pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/6 "2026-04-22T20:22:50Z")

</div>

This I did but I got words in the row no image.

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [April 22, 2026, 8:36pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/7 "2026-04-22T20:36:00Z")

</div>

It’s going to create a datauri which looks like random characters. You won’t immediate see an image, but you will see it in an image component in the app.

If it still didn’t work, show a screenshot of the javascript column configuration and a screenshot of what the resulting value looks like.

---

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 22, 2026, 9:24pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/8 "2026-04-22T21:24:21Z")

</div>

![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/9/0/90e30a12638b5f6052474a16e4bbea6bb8523cb9.png)  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/2/c/2c1f7d2f88374cd005b9404c2a4944ba50be6c7a.jpeg)  
These is what I’m current viewing, it doesn’t seem to show it.

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [April 22, 2026, 10:48pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/9 "2026-04-22T22:48:59Z")

</div>

Can you show the configuration for the javascript column so I can see your parameters? It’s unclear in your screenshot, but I see what looks like text at the bottom right of the image, which I assume would be the watermark text but I can’t really tell.

---

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 23, 2026, 5:07pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/10 "2026-04-23T17:07:53Z")

</div>

OMG Jeff I did not see that there I swear to you I am smiling in my heart I am sending shots of the column let me know where I went wrong or probably need to adjust.

 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/2/e/2e85f9fffdb7be6f552ba7aeddc87c3d283e6f1a.png)  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/5/f/5f99d99d095ae5c5eb582251628c7119bcb7c570.png)  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/3/4/347a20e9bea5a2b9bf4a373034743d3bb503d1f1.png)  
 ![image](https://us1.discourse-cdn.com/flex002/uploads/glideapps/original/3X/c/a/cabe209ebcc3e3d08520a493b174ffc79fe1670b.png)

---

<div class="post-metadata">

**Author:** ![Candace](https://avatars.discourse-cdn.com/v4/letter/c/4da419/32.png) [@Candace](https://community.glideapps.com/u/Candace)\
**Post date:** [April 23, 2026, 5:24pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/11 "2026-04-23T17:24:05Z")

</div>

I tried this for it to be abit more bigger and it worked thank you soooo much. Bless your little fuzzy helpful heart. {  
“fontSize”: 80,  
“color”: “rgba(255,255,255,1)”,  
“position”: “bottom-left”  
}

---

<div class="post-metadata">

**Author:** ![Jeff\_Hager](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/jeff_hager/32/43_2.png) [@Jeff\_Hager](https://community.glideapps.com/u/Jeff_Hager)\
**Post date:** [April 23, 2026, 5:26pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/12 "2026-04-23T17:26:47Z")

</div>

Awesome. Yeah just adjust those parameters as needed. Glad it’s working.

---

<div class="post-metadata">

**Author:** ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/community.glideapps.com/system/32/53398_2.png) [@system](https://community.glideapps.com/u/system)\
**Post date:** [April 30, 2026, 5:26pm UTC](https://community.glideapps.com/t/creating-an-option-for-watermark-on-photos/86930/13 "2026-04-30T17:26:57Z")

</div>

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.
