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.
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
- https://fonts.google.com/specimen/Dancing+Script?sort=popularity#standard-styles
- https://www.blog.pythonlibrary.org/2017/10/17/how-to-watermark-your-photos-with-python/
- https://medium.com/better-programming/add-copyright-or-watermark-to-photos-using-python-a3773c71d431
- https://stackoverflow.com/questions/43708681/pil-png-image-as-watermark-for-a-jpg-image
Cover Photo by Jeroen den Otter on Unsplash
One Reply to “Menambah Watermark pada Foto”