PHP: Mengubah Gambar Jadi Hitam Putih

Tulisan ini merupakan terjemahan bahasa Indonesia dari tulisan yang pernah aku tulis di blog A Jar of Minds.

Seperti yang semua orang sudah tahu, mengubah gambar berwarna menjadi hitam putih (greyscale) menggunakan GIMP (atau Photoshop) itu hanya perlu dua klik saja. Tapi bagaimana cara mengubahnya otomatis jadi hitam putih (greyscale) menggunakan PHP? Nah beginilah cara membuat programmnya dengan menggunakan pustaka GD pada PHP.

Memulai

Pertama-tama, pilih sebuah gambar. Untuk contoh ini, aku pakai gambar mie ayam dari Solaria. Nyam nyam 🙂

Ide dasarnya adalah dengan mengubah warna piksel demi piksel dari RGB menjadi hitam putih menggunakan matriks konversi YIQ colorspace. Kita hanya perlu nilai Y-nya saja untuk kasus ini.

Inilah kode untuk mendapatkan nilai Y dari RGB:

<?php
// Function to get grayscale color from RGB
function grayscale($color) {
    $r = ($color >> 16) & 0xFF;
    $g = ($color >> 8) & 0xFF;
    $b = $color & 0xFF;
    $yiq = round($r*0.299 + $g*0.587 + $b*0.114);
    return sprintf(“0x%02x%02x%02x”, $yiq, $yiq, $yiq);
}

$color adalah serangkaian nilai heksadesimal sebanyak 6 digit. Contohnya, warna kebiruan ini adalah 0xADD8E6 dalam heksadesimal. Kita pisahkan masing-masing komponen RGB dengan operator biner SHIFT dan AND. Nantinya kita dapatkan $r=0xAD, $g=0xD8, $b=0xE6.

Warna hitam putih diperoleh dengan mencampurkan sekitar 30% merah, 59% hijau, dan 11% biru. Jangan lupa membulatkan hasilnya. Untuk contoh di atas, hasilnya adalah Y=0xCD.

Karena kita bekerja dalam RGB, maka hasil perhitungan Y diberikan untuk ketiga komponen. Maka warna 0xADD8E6 menjadi 0xCDCDCD.

Konversi Gambar

Pertama-tama, dapatkan resolusi gambar yang akan dikonversikan dan tampung gambar ke dalam $img.

// Image file to be converted
$file = “mie-ayam.jpg”;

// Get image width & height
list($width, $height) = getimagesize($file);

// Load source image file
$img = imagecreatefromjpeg($file);

Sekarang, ubah tiap piksel menjadi hitam putih menggunakan fungsi tadi.

for($y = 0; $y < $height; $y++) {
    for($x = 0; $x < $width; $x++) {
        $rgb = imagecolorat($img, $x, $y);
        $gray = grayscale($rgb);
        imagesetpixel($img, $x, $y, $gray);
    }
}

Terakhir, kita output hasil gambar ke layar dan bersihkan memori. Jangan lupa mengubah format berkas menjadi gambar.

header("Content-type: image/jpeg");
imagejpeg($img);
imagedestroy($img);

Unduh berkas (573 bytes)

http://en.wikipedia.org/wiki/YIQ

http://www.prosoxi.com/2011/05/05/converting-images-to-grayscale-using-php-and-the-gd-library/

Tinggalkan komentar