Memanipulasi ukuran pada sebuah gambar biasanya dilakukan dengan menggunakan software profesional yang mesti diinstall pada PC. Terlebih jika menginginkan kualitas gambar yang dihasilkan tetap solid setelah diubah tinggi dan lebarnya. Jika menggunakan aplikasi default yang terpasang pada OS, misalnya seperti MS Paint atau KolourPaint pada Linux, tampilan gambar akan menjadi blur.
Masalah tersebut memaksa pengguna untuk menginstall aplikasi editing yang lumayan berat, padahal hanya untuk mengubah ukuran gambar saja. Jika yang Agan perlukan cuma untuk mengganti ukuran lebar dan tinggi foto, ada solusi yang lebih praktis dibanding memakai software premium. Yakni dengan membuat aplikasi pengubah ukuran gambar otomatis memakai bahasa pemrograman PHP.
PHP dengan segala kemudahan penggunaan dan pengkodeannya, dapat dimanfaatkan untuk menciptakan aplikasi Resize Image. Seperti namanya, aplikasi PHP ini berguna untuk mengubah penampilan file image bertipe jpg atau png, dimodifikasi dengan dimensi yang diinginkan pengguna. Dan tak perlu khawatir soal kualitas, karena kualitas gambarnya pun bisa diatur sesuka hati.
TUTORIAL
1. Agan bisa mendapatkan file penuh aplikasi ini dengan mengunjungi link berikut: PHP Image Resizer
2. Pada aplikasi, pengguna dapat mengunduh gambar melalui Choose File dan Image Url. Selanjutnya ukuran lebar dan tinggi bisa diatur dengan memasukkan angka pixel pada kolom Settings.
3. Berikut ini adalah kode PHP lengkap fungsi resize image yang digunakan pada aplikasi tersebut untuk memproses image secara sempurna dengan kualitas tinggi.
function smart_resize_image($file, $string = null, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false, $quality = 100, $grayscale = false ) { if ( $height <= 0 && $width <= 0 ) return false; if ( $file === null && $string === null ) return false; # Setting defaults and meta $info = $file !== null ? getimagesize($file) : getimagesizefromstring($string); $image = ''; $final_width = 0; $final_height = 0; list($width_old, $height_old) = $info; $cropHeight = $cropWidth = 0; # Calculating proportionality if ($proportional) { if ($width == 0) $factor = $height/$height_old; elseif ($height == 0) $factor = $width/$width_old; else $factor = min( $width / $width_old, $height / $height_old ); $final_width = round( $width_old * $factor ); $final_height = round( $height_old * $factor ); } else { $final_width = ( $width <= 0 ) ? $width_old : $width; $final_height = ( $height <= 0 ) ? $height_old : $height; $widthX = $width_old / $width; $heightX = $height_old / $height; $x = min($widthX, $heightX); $cropWidth = ($width_old - $width * $x) / 2; $cropHeight = ($height_old - $height * $x) / 2; } # Loading image to memory according to type switch ( $info[2] ) { case IMAGETYPE_JPEG: $file !== null ? $image = imagecreatefromjpeg($file) : $image = imagecreatefromstring($string); break; case IMAGETYPE_GIF: $file !== null ? $image = imagecreatefromgif($file) : $image = imagecreatefromstring($string); break; case IMAGETYPE_PNG: $file !== null ? $image = imagecreatefrompng($file) : $image = imagecreatefromstring($string); break; default: return false; } # Making the image grayscale, if needed if ($grayscale) { imagefilter($image, IMG_FILTER_GRAYSCALE); } # This is the resizing/resampling/transparency-preserving magic $image_resized = imagecreatetruecolor( $final_width, $final_height ); if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) { $transparency = imagecolortransparent($image); $palletsize = imagecolorstotal($image); if ($transparency >= 0 && $transparency < $palletsize) { $transparent_color = imagecolorsforindex($image, $transparency); $transparency = imagecolorallocate($image_resized, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']); imagefill($image_resized, 0, 0, $transparency); imagecolortransparent($image_resized, $transparency); } elseif ($info[2] == IMAGETYPE_PNG) { imagealphablending($image_resized, false); $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); imagefill($image_resized, 0, 0, $color); imagesavealpha($image_resized, true); } } imagecopyresampled($image_resized, $image, 0, 0, $cropWidth, $cropHeight, $final_width, $final_height, $width_old - 2 * $cropWidth, $height_old - 2 * $cropHeight); # Taking care of original, if needed if ( $delete_original ) { if ( $use_linux_commands ) exec('rm '.$file); else @unlink($file); } # Preparing a method of providing result switch ( strtolower($output) ) { case 'browser': $mime = image_type_to_mime_type($info[2]); header("Content-type: $mime"); $output = NULL; break; case 'file': $output = $file; break; case 'return': return $image_resized; break; default: break; } # Writing image according to type to the output destination and image quality switch ( $info[2] ) { case IMAGETYPE_GIF: imagegif($image_resized, $output); break; case IMAGETYPE_JPEG: imagejpeg($image_resized, $output, $quality); break; case IMAGETYPE_PNG: $quality = 9 - (int)((0.9*$quality)/10.0); imagepng($image_resized, $output, $quality); break; default: return false; } return true; }
4. Berdasarkan parameter dalam php function di atas, lebar ($width), tinggi ($height), dan kualitas ($quality) bisa diset sesuai keinginan pengguna untuk menghasilkan gambar baru yang dinginkan. Contoh pemakaian function dengan parameter yang terisi.
smart_resize_image(null, file_get_contents('url'), 500, 500, false, 'images/file.ext', false, false, 100, false);
5. Semua file gambar yang berhasil diproses akan tersimpan pada folder "IMGRESIZER/images".
6. Terkhusus bagi pengguna Linux, jika aplikasi tidak berjalan sebagaimana mestinya setelah menekan tombol Resize dan justru menampilkan error berikut:
failed to open stream: Permission denied
Pesan ini tampil karena akses folder "images" pada aplikasi terkunci oleh Root. Untuk mengatasinya, jalankan kode ini pada terminal.
sudo chmod -R 777 /opt/lampp/htdocs/IMGRESIZER/images
Demikian cara membuat aplikasi resize image menggunakan PHP. Meski fungsinya cukup sederhana, aplikasi PHP ini dapat membantu Agan untuk mengganti lebar dan tinggi gambar secara cepat dan mudah, tanpa harus menggunakan software penyunting yang merepotkan dan berat di PC.
Dengan aplikasi PHP Image Resizer, yang diperlukan hanya memasang aplikasi ini pada htdocs, mengakses file index.php melalui browser, dan mengupload file image untuk diproses sesuai ukuran yang ditentukan sendiri. Aplikasinya akan menghasilkan gambar berdimensi baru dengan kualitas yang proporsional, tanpa harus memakai canvas dan tools yang tidak dibutuhkan.
0 Comments