Membuat Watermark Foto dengan Python

Bagus Aji Santoso 16 Januari 2018

Membuat Watermark Foto dengan Python

Saat mencari foto di internet, pembaca mungkin sering melihat beberapa diantaranya memiliki watermark. Sebuah watermark biasanya berupa teks atau logo yang "menimpa" foto tersebut untuk menandakan siapa yang mengambil atau memiliki hak atas fotobar tersebut. Beberapa ahli merekomendasikan kita untuk menambahkan watermark ke foto-foto kita sebelum di unggah ke sosial media untuk mencegah orang yang ingin menggunakan dan mengambil keuntungan sendiri (atau malah menggunakannya untuk kejahatan). Tentu saja watermark juga masih bisa dihapus sehingga tidak bisa menjadi alat yang cukup aman untuk menjaga hak cipta digital.

Untuk menambah watermark ke foto, kita akan menggunakan pustaka Pillow. Hal yang pertama yang harus kita lakukan adalah memasang Pillow jika belum memilikinya:

pip install pillow

Setelah terpasang, kita bisa melanjutkan!

Menambah Watermark Teks

Kita akan mulai dengan menambahkan teks ke sebuah foto. Berikut ini merupakan foto Yequina lighthouse yang diambil oleh penulis asli tutorial ini (diambil di Oregon):

Image

Sekarang kita akan menambah beberapa teks dan foto. Dalam kasus ini, mari kita tambahkan alamat www.mousevspython.com.

from PIL import Image from PIL import ImageDraw from PIL import ImageFont def watermark_text(input_image_path, output_image_path, text, pos): photo = Image.open(input_image_path) # make the image editable drawing = ImageDraw.Draw(photo) black = (3, 8, 12) font = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", 40) drawing.text(pos, text, fill=black, font=font) photo.show() photo.save(output_image_path) if __name__ == '__main__': img = 'lighthouse.jpg' watermark_text(img, 'lighthouse_watermarked.jpg', text='www.mousevspython.com', pos=(0, 0))

Disini kita mengimpor kelas-kelas yang diperlukan dari PIL: Image, ImageDraw dan ImageFront. Lalu kita membuat sebuah fungsi bernama watermark_text, yang mengambil empat parameter yaitu alamat file foto, alamat tempat menyimpan foto yang diberi watermark, teks yang akan ditambahkan ke foto, dan terakhir posisi koordinat untuk menambahkan foto tersebut.

Selanjutnya di dalam fungsi tersebut kita membaca file foto yang alamatnya kita beri sebagai parameter pertama. Lalu, kita menyalin foto ini dengan method ImageDraw.Draw. Berikutnya kita membuat sebuah font dengan perintah ImageFont.truetype. Font ini sudah menjadi bawaan pustaka Pillow. Kita mengatur ukurannya menjadi 40 point. Terakhir kita akan menampilkan hasil dan menyimpannya. Berikut ini foto hasil yang didapat:

Image

Berikutnya mari kita berikan watermark berupa gambar!

Watermark dengan Sebuah Gambar

Sebagain besar fotografer profesional menambahkan foto mereka dengan sebuah logo. Menambahkan gambar ke sebuah foto dengan Pillow juga tidak sulit. Mari kita pelajari caranya.

Dicontoh ini kita akan memakai salah satu logo penulis asli untuk memberi watermark ke foto.

from PIL import Image def watermark_photo(input_image_path, output_image_path, watermark_image_path, position): base_image = Image.open(input_image_path) watermark = Image.open(watermark_image_path) # add watermark to your image base_image.paste(watermark, position) base_image.show() base_image.save(output_image_path) if __name__ == '__main__': img = 'lighthouse.jpg' watermark_with_photo(img, 'lighthouse_watermarked2.jpg', 'watermark.png', position=(0,0))

Disini kita membuat sebuah fungsi yang sangat mirip dengan fungsi yang pertama, namun daripada mengirimkan sebuah teks kita mengirim alamat gambar yang akan dijadikan watermark. Lalu didalam fungsi tersebut kita membaca foto utama dan gambar watermark. Kemudian kita panggil method paste() untuk menempelkan gambar watermark ke foto utama dengan position untuk menentukan tempat menempelkan gambar watermarknya. Berikut ini hasil yang didapat.

Image

Watermark dengan Sebuah Gambar dan Transparansi

Sekarang mari kita buat fungsi baru yang dapat menggunakan transparansi sehingga bagian yang hitam pada hasil sebelumnya dapat dihilangkan. Penulis menemukan solusi ini di StackOverflow, penulis ambil dan modifikasi sedikit untuk contoh ini:

from PIL import Image def watermark_with_transparency(input_image_path, output_image_path, watermark_image_path, position): base_image = Image.open(input_image_path) watermark = Image.open(watermark_image_path) width, height = base_image.size transparent = Image.new('RGBA', (width, height), (0,0,0,0)) transparent.paste(base_image, (0,0)) transparent.paste(watermark, position, mask=watermark) transparent.show() transparent.save(output_image_path) if __name__ == '__main__': img = 'lighthouse.jpg' watermark_with_transparency(img, 'lighthouse_watermarked3.jpg', 'watermark.png', position=(0,0))

Isi fungsi yang baru ini hampir sama dengan yang sebelumnya. Hanya saja kita tidak sekedar membaca file foto dan gambar untuk watermark tapi juga mengambil lebar dan tinggi dari foto asli. Dari lebar dan tinggi foto asli kemudian kita membuat sebuah foto baru dan diberikan background yang transparan (foto ini membuat background berupa RGBA (Red, Green, Blue dan Alpha). Selanjutnya kita tempelkan foto asli ke foto transparan dimulai dari pojok kiri atas yang ditandai dengan (0,0). Setelahnya kita tempelkan gambar watermark diposisi yang telah diberikan. Terakhir kita simpan foto yang sudah di watermark.

Hasil kode di atas menjadi:

Image

Keren kan?

Penutup

Disini kita membahas 2 teknik menambah watermark ke foto kita menggunakan Python dan Pillow. Di contoh yang pertama kita hanya menambah teks ke foto. Baru di contoh yang kedua kita membuat watermark dengan gambar namun belum mendapatkan transparansi. Kita memperbaiki kode contoh yang kedua untuk mendapatkan transparansi di contoh yang ketiga.

Semoga artikel ini bermanfaat untuk pembaca. Selamat ngoding!

Diterjemahkan dari How to Watermark Your Photos with Python yang ditulis oleh Michael Driscoll