Menambah Watermark pada Foto

Tidak, John tidak sedang ingin berjualan online sehingga perlu membubuhkan watermark nama tokonya pada tiap foto produk. Meski teknik ini dapat diterapkan untuk kebutuhan tersebut.

Kode Lima Detik

from PIL import Image

photo = Image.open('gambars/G1.jpg')
w, h = photo.size

watermark = Image.open('basangdata.png')
watermark_w, watermark_h = watermark.size

position = (w - watermark_w) - 10, (h - watermark_h) - 10

photo.paste(watermark, position, watermark)
photo.save('G1_img_stamped.jpg')

Latar Belakang

John memiliki beberapa foto yang ingin diunggah ke internet. Sayangnya di internet mudah sekali menjadi korban pencurian kepemilikan intelektual, seperti foto, atau lebih parah lagi penyalahgunaan yang dapat merugikan terutama pemilik konten.

Meski jauh dari ideal namun pemberian identitas pada foto setidaknya sedikit menyulitkan pencurian konten.

John akan menempuh jalur itu. Ia akan menambahkan identitas berupa watermark pada fotonya sehingga akan seperti di bawah ini.

Jika menggunakan watermark berupa gambar lain maka foto akan menjadi seperti ini, kiri adalah foto asli sedang kanan adalah foto setelah diberi watermark logo Basang Data.

Omong-omong gambar di atas diambil di Batutumongga, Toraja Utara. Sebuah tempat yang indah yang tiap pagi memberikan pemandangan awan berarak di bawah kita.

Untuk menambahkan watermark John dapat menggunakan image editing software. Namun karena foto yang ingin diproses cukup banyak, akan lebih efisien jika menggunakan program sederhana untuk melakukan itu.


Teknologi Digunakan

Pillow adalah sebuah library dalam bahasa pemrograman Python yang berguna untuk memanipulasi gambar. Selain menambahkan watermark, banyak hal lain yang bisa dilakukan oleh Pillow, seperti menggabungkan gambar, merotasi gambar, membuat thumbnail gambar dan lainnya.


Langkah Kerja

Instalasi

Font

Untuk watermark berupa teks, John akan menggunakan Google Font bernama Dancing Script. Setelah diunduh dan diekstraksi akan ada beberapa file TrueType font berekstensi ttf, salah satunya, DancingScript-SemiBold.ttf. File tersebut kemudian dipindahkan ke folder yang sama dengan script python yang akan diketik selanjutnya.

Pillow

Instalasi Pillow dapat dilakukan di terminal/command prompt/console dengan perintah seperti ini.

pip install pillow

Atau jika langsung di Jupyter Notebook.

Kode

John akan membuat 3 script yaitu 1 untuk watermark berupa teks di pojok kiri atas gambar, 1 untuk watermark berupa logo di kanan bawah gambar dan 1 kode yang memberi watermark sekaligus untuk semua foto di dalam satu folder (batch watermark).

Teks

Pojok Kiri Atas
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

font = ImageFont.truetype("DancingScript-SemiBold.ttf", 68)

photo = Image.open('gambars/G1.jpg')
drawing = ImageDraw.Draw(photo)

stamp = 'Foto oleh Basang Data'
drawing.text((0, 0), stamp, fill='black', font=font)

photo.save('G1_text_stamped_1.jpg')

Singkatnya kode di atas memerintahkan komputer untuk melakukan ini.

Impor library
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
Ambil huruf
font = ImageFont.truetype("DancingScript-SemiBold.ttf", 68)

Ukuran huruf yang digunakan adalah 68.

Buka gambar asli
photo = Image.open('gambars/G1.jpg')
drawing = ImageDraw.Draw(photo)

Gambar asli ada di folder gambars dan bernama G1.jpg. Variabel drawing berisi sebuah gambar baru, berdasarkan gambar G1.jpg.

Buat watermark berupa teks
stamp = 'Foto oleh Basang Data'
drawing.text((0, 0), stamp, fill='black', font=font)

Teks yang akan ditambahkan sebagai watermark adalah ‘Foto oleh Basang Data‘ kemudian teks tersebut dibubuhkan pada posisi (0, 0) alias pojok kiri atas, diberi warna hitam dan menggunakan huruf sesuai variabel font.

Simpan gambar
photo.save('G1_text_stamped_1.jpg')
Kanan Bawah
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

font = ImageFont.truetype("DancingScript-SemiBold.ttf", 68)

photo = Image.open('gambars/G1.jpg')
w, h = photo.size # baris ini ditambahkan

drawing = ImageDraw.Draw(photo)

stamp = 'Foto oleh Basang Data'
stamp_w, stamp_h = drawing.textsize(stamp, font) # baris ini ditambahkan
position = w - stamp_w, (h - stamp_h) - 50 # baris ini ditambahkan
 
drawing.text(position, stamp, fill='black', font=font) # baris ini berubah

photo.save('G1_text_stamped_2.jpg') # baris ini berubah

Kode ini memerintahkan komputer untuk menambahkan teks watermark di kanan bawah gambar. Beberapa perbedaan dengan kode sebelumnya adalah.

Ukuran gambar
w, h = photo.size # baris ini ditambahkan

Variabel w menampung width (lebar) foto sedangkan variabel h adalah height (tinggi).

Ukuran watermark
stamp_w, stamp_h = drawing.textsize(stamp, font) # baris ini ditambahkan
position = w - stamp_w, (h - stamp_h) - 50 # baris ini ditambahkan

Variabel stamp_w berisi lebar teks watermark dan variabel stamp_h tingginya. Keempat variabel ini (w, h, stamp_w dan stamp_h) kemudian digunakan untuk mendapatkan koordinat (posisi) watermark, yaitu variabel position. Koordinat x (horizontal) diisi dengan w – stamp_w sedang koordinat y (vertikal) diisi dengan h – stamp_h – 50.

Gambar

Gambar yang digunakan adalah logo Basang Data dalam format PNG. Area putih pada logo (background) adalah area transparan yang tidak akan terlihat saat ditempelkan pada foto.

from PIL import Image

photo = Image.open('gambars/G1.jpg')
w, h = photo.size

watermark = Image.open('basangdata.png')
watermark_w, watermark_h = watermark.size

position = (w - watermark_w) - 10, (h - watermark_h) - 10

photo.paste(watermark, position, watermark)
photo.save('G1_img_stamped.jpg')

Kode di atas memanfaatkan fungsi paste dari Pillow. Fungsi tersebut memiliki tiga parameter yaitu im (gambar yang akan ditempelkan pada gambar utama), box (koordinat posisi im) dan mask.

Jika parameter mask diisi dengan gambar PNG dengan bagian transparan (alpha channel) maka bagian tersebut akan menjadi mask (topeng) bagi gambar pada parameter im. Karena logo Basang Data memiliki bagian transparan (di halaman ini akan tampil sebagai area background berwarna putih) maka dalam gambar terakhir logo tersebut ditampilkan tanpa background warna putih.

Untuk memperjelas kegunaan parameter mask, kita gunakan script di bawah ini, perbedaan hanya pada fungsi paste dimana hanya ada dua parameter yang digunakan.

from PIL import Image

photo = Image.open('gambars/G1.jpg')
w, h = photo.size

watermark = Image.open('basangdata.png')
watermark_w, watermark_h = watermark.size

position = (w - watermark_w) - 10, (h - watermark_h) - 10

photo.paste(watermark, position) # bagian ini berbeda
photo.save('G1_img_stamped_2.jpg')

Bila tanpa parameter mask, logo Basang Data akan ditampilkan dengan background berwarna hitam.

Banyak File

Untuk menambahkan watermark pada seluruh foto dalam sebuah folder John menggunakan script di bawah ini.

import os
from PIL import Image

os.chdir('gambars')

for filename in os.listdir('.'):
    if filename.endswith('.jpg'):
        photo = Image.open(filename)
        w, h = photo.size
        
        watermark = Image.open('basangdata.png')
        watermark_w, watermark_h = watermark.size
        
        position = (w - watermark_w) - 10, (h - watermark_h) - 10
        
        photo.paste(watermark, position, watermark)
        
        new_filename = 'stamped_' + filename
        photo.save(new_filename)

Library os adalah bawaan dari Python sehingga tak perlu diinstal. Library tersebut menyediakan fungsi chdir yang digunakan untuk merubah lokasi folder tempat script akan bekerja. Kemudian pada tiap file di folder tersebut diuji apakah berakhiran .jpg, artinya merupakan file gambar.

Jika file merupakan gambar, lakukan proses yang sama seperti pada script sebelumnya, menambahkan logo Basang Data pada di kanan bawah. File hasil proses tersebut kemudian disimpan sebagai file baru berawalan nama stamped_.


Simpulan

Otomasi pekerjaan menggunakan komputer selalu menarik dan meningkatkan efisiensi.

Dengan bekerja lebih cepat, John dapat menggunakan waktu yang dihemat untuk melakukan pekerjaan lain, misal scrolling halaman media sosial yang tak berbatas.


Referensi


Cover Photo by Jeroen den Otter on Unsplash

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftarkan Email Anda untuk mendapat pemberitahuan tulisan baru kami.

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

will use the information you provide on this form to be in touch with you and to provide updates and marketing.