Membuat Watermark pada Gambar Menggunakan PHP

Bila anda memiliki website yang memberikan fasilitas untuk upload gambar maka Anda mungkin ingin menambahkan watermark di gambar yang diupload. Hal ini sering dilakukan untuk menghindari penggunaan gambar tanpa permisi. Watermark adalah gambar kecil diatas sebuah gambar yang menunjukan identitas dari gambar itu sendiri tetapi tidak mengganggu gambar utama.

Menambahkan watermark menggunakan PHP cukup sederhana. Pertama tentukan file watermark yang akan dipakai. Usahkan file ini dengan tinggi dan lebar yang sama. Berikut adalah langkah langkah untuk menambahkan watermark pada gambar, misalkan kita punya gambar example.jpg.

Video Tutorial Membuat Watermark dengan PHP

Video Tutorial Membuat Watermark dengan PHP

Pertama Ambil Tipe dan Ukuran Gambar Asli

Gunakan fungsi getimagesize untuk mendapatkan tipe, dan ukuran gambar seperti di bawah

<?php
$file = 'images/example2.jpg';
$watermarkFile = 'images/logo.png';

list ($width, $height, $type) = getimagesize($file);

Kedua Buat Gambar Baru Menggunakan Gambar Asli

Berdasarkan tipe gambar asli gunakan fungsi yang sesuai untuk membuat gambar baru, gunakan fungsi imagecreatefromjpeg jika tipe gambar adalah jpeg dan imagecreatefrompng jika png.

$destImage = null;
switch ($type) {
    case IMAGETYPE_JPEG:
        $destImage = imagecreatefromjpeg($file);
        break;
    case IMAGETYPE_PNG:
        $destImage = imagecreatefrompng($file);
        break;
    default:
        throw new Exception('Invalid image type');
}

Ketiga Ambil Ukuran Watermark dan Buat Gambar Baru untuk Watermark

Kembali gunakan fungsi getimagesize untuk mengambil lebar dan tinggi watermark yang asli dan gunakan fungsi imagecreatefrompng untuk membuat gambar watermark baru atau imagecreatefromjpeg jika gambar watermark adalah jpeg. Kemudian tentukan tinggi dan lebar watermark. Di contoh di bawah tinggi dan lebarnya adalan 100.

list ($watermarkWidth, $watermarkHeight) = getimagesize($watermarkFile);
$watermarkImage = imagecreatefrompng($watermarkFile);
$newWatermarkWidth = 100;
$newWatermarkHeight = 100;

Keempat Gunakan imagecopyresampled Untuk Taruh Watermark

Kemudian gunakan fungsi imagecopyresampled untuk menaruh watermark di gambar asli, seperti contoh di bawah.

imagecopyresampled(
    $destImage, $watermarkImage,
    $width/2 - $newWatermarkWidth/2, $height/2 - $newWatermarkHeight/2, 0, 0,
    $newWatermarkWidth, $newWatermarkHeight, $watermarkWidth, $watermarkHeight
);

Parameter pertama adalah gambar asli, yang kedua adalah watermarknya. Kemudian parameter 3 dan 4 adalah yang terpenting. Yaitu posisi x dan y dari watermark. Posisi 0,0 ada di pojok kiri atas. Contoh di atas adalah untuk menempatkan watermark di tengah tengah gambar. Untuk menaruhnya di pojok kanan bawah maka gunakan $width - $newWatermarkWidth, $height - $newWatermarkHeight. Sedangkan parameter 5 dan 6 adalah posisi awal dari gambar watermark yang akan diambil, taruh 0,0 agar semua bagian gambar diambil. Kemudian parameter 7 dan 8 adalah ukuran dari watermark, dan 9, 10 adalah tinggi asli dari gambar watermark.

Selanjutnya kalian bisa menggunakan fungsi imagepng atau imagejpeg untuk menyimpan gambar. Jika digabungkan maka kode untuk menambahkan watermark di php seperti di bawah.

<?php
$file = 'images/example2.jpg';
$watermarkFile = 'images/logo.png';

list ($width, $height, $type) = getimagesize($file);
$destImage = null;
switch ($type) {
    case IMAGETYPE_JPEG:
        $destImage = imagecreatefromjpeg($file);
        break;
    case IMAGETYPE_PNG:
        $destImage = imagecreatefrompng($file);
        break;
    default:
        throw new Exception('Invalid image type');
}

list ($watermarkWidth, $watermarkHeight) = getimagesize($watermarkFile);
$watermarkImage = imagecreatefrompng($watermarkFile);
$newWatermarkWidth = 100;
$newWatermarkHeight = 100;

imagecopyresampled(
    $destImage, $watermarkImage,
    $width/2 - $newWatermarkWidth/2, $height/2 - $newWatermarkHeight/2, 0, 0,
    $newWatermarkWidth, $newWatermarkHeight, $watermarkWidth, $watermarkHeight
);

imagepng($destImage, 'images/example-watermark.png');