ail dengaMembuat thumbnn php
Istilah kata thumbnail diartikan
sebagai versi kecil dari sebuah gambar yang ditampilkan di komputer. Thumbnail
ini digunakan untuk menggantikan gambar yang memiliki ukuran besar sehingga
dapat ditampilkan lebih kecil dan cepat ke layar.
Untuk membuat thumbnail ini saya menggunakan sebuah class yang isinya berupa function serta
rutin-rutin yang melakukan duplikat gambar dengan ukuran tertentu dari sebuah
alamat gambar. Lihat kode class berikut :
class
thumbnailGenerator {
var $allowableTypes = array(
IMAGETYPE_GIF,
IMAGETYPE_JPEG,
IMAGETYPE_PNG
);
public function
imageCreateFromFile($filename, $imageType) {
switch($imageType) {
case IMAGETYPE_GIF : return imagecreatefromgif($filename);
case IMAGETYPE_JPEG : return
imagecreatefromjpeg($filename);
case IMAGETYPE_PNG : return imagecreatefrompng($filename);
default : return false;
}
}
/**
* Generates a thumbnail image using the
file at $sourceFilename and either writing it
* out to a new file or directly to the
browser.
*
* @param string $sourceFilename Filename
for the image to have thumbnail made from
* @param integer $maxWidth The maxium
width for the resulting thumbnail
* @param integer $maxHeight The maxium
height for the resulting thumbnail
* @param string $targetFormatOrFilename
Either a filename extension (gif|jpg|png) or the
*
filename the resulting file should be written to. This is optional and
if not specified
*
will send a jpg to the browser.
* @return boolean true if the image could
be created, false if not
*/
public function generate($sourceFilename,
$maxWidth, $maxHeight, $targetFormatOrFilename = 'jpg') {
$size = getimagesize($sourceFilename);
// 0 = width, 1 = height, 2 = type
// check to make sure source image is
in allowable format
if(!in_array($size[2],
$this->allowableTypes)) {
return false;
}
// work out the extension, what target
filename should be and output function to call
$pathinfo =
pathinfo($targetFormatOrFilename);
if($pathinfo['basename'] ==
$pathinfo['filename']) {
$extension =
strtolower($targetFormatOrFilename);
// set target to null so writes out
to browser
$targetFormatOrFilename = null;
}
else {
$extension =
strtolower($pathinfo['extension']);
}
switch($extension) {
case 'gif' : $function =
'imagegif'; break;
case 'png' : $function =
'imagepng'; break;
default : $function = 'imagejpeg'; break;
}
// load the image and return false if
didn't work
$source =
$this->imageCreateFromFile($sourceFilename, $size[2]);
if(!$source) {
return false;
}
// write out the appropriate HTTP headers
if going to browser
if($targetFormatOrFilename == null) {
if($extension == 'jpg') {
header("Content-Type: image/jpeg");
}
else {
header("Content-Type: image/$extension");
}
}
// if the source fits within the maximum then no need to
resize
if($size[0] <= $maxWidth && $size[1] <=
$maxHeight) {
$function($source,
$targetFormatOrFilename);
}
else {
$ratioWidth = $maxWidth / $size[0];
$ratioHeight = $maxHeight / $size[1];
// use smallest ratio
if($ratioWidth < $ratioHeight) {
$newWidth = $maxWidth;
$newHeight =
round($size[1] * $ratioWidth);
}
else {
$newWidth =
round($size[0] * $ratioHeight);
$newHeight =
$maxHeight;
}
$target = imagecreatetruecolor($newWidth,
$newHeight);
imagecopyresampled($target, $source, 0,
0, 0, 0, $newWidth, $newHeight, $size[0], $size[1]);
$function($target,
$targetFormatOrFilename);
}
return true;
}
}
Class diatas mempu menduplikat
gambar dengan jenis png, jpg atau gif dengan hasil output standard dalam format
jpg.
Cara
penggunaan class
Berikut ini contoh penggunaan
untuk output standard dengan ukuran 100 x 100 pixel:
<?php
include("thumbnailGenerator.php");
$tg = new
thumbnailGenerator;
$gambar="photoku.jpg";
$tg->generate($photoku,
100, 100);
?>
Kita juga bisa membuat hasil output
dengan format berbeda seperti png/gif dengan cara
:
<?php
include("thumbnailGenerator.php");
$tg = new thumbnailGenerator;
$gambar="photoku.jpg";
$tg->generate($photoku,
100, 100,'png');
?>
Contoh diatas melakukannya secara
langsung tanpa menyimpan file versi kecilnya dalam file, jadi hanya
menampilkkanya di browser. Untuk melakukan duplikat gambar dalam versi kecilnya
dan disimpan dalam file berbeda bisa dilakukan dengan cara
berikut :
<?php
include("thumbnailGenerator.php");
$tg = new
thumbnailGenerator;
$gambar="photoku.jpg";
$tg->generate($photoku,
100, 100,'photoku-kecil.jpg');
?>
Dengan penggunaan thumbnail, proses
menampilkan gambar dengan ukuran-ukuran yang besar bisa dikurangi karena yang
dikirim ke browser hanya versi kecilnya saja sehingga proses tampilnya gambar
akan lebih cepat.
Anda bisa bayangkan jika kita
memiliki photo-photo dengan ukuran 1000 pixel lebih harus ditampilkan dalam
browser pasti akan memerlukan waktu lama karena harus didowload lebih dahulu.
Anda bisa padukan cara
thumbnail ini dengan aplikasi-aplikasi php yang anda buat seperti aplikasi
karyawan dengan photo, proses upload gambar, atau aplikasi mahasiswa dengan php seperti toturial saya sebelumnya.