Resizing images với PHP

09/09/2012

Resizing images với PHP

Trước đây mình đã giới thiệu với các bạn bài viết Tạo thumnail hình ảnh bằng PHP , tuy nhiên đoạn code mà mình giới thiệu sau đây sẽ có thêm nhiều lựa chọn hơn cho việc tạo các ảnh thumnail cho website của bạn.

<?php
class SimpleImage {
var $image;
var $image_type;

function load($filename) {

$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {

$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {

$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {

$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {

if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {

imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {

imagepng($this->image,$filename);
}
if( $permissions != null) {

chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {

if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {

imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {

imagepng($this->image);
}
}
function getWidth() {

return imagesx($this->image);
}
function getHeight() {

return imagesy($this->image);
}
function resizeToHeight($height) {

$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}

function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}

function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}

function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>

Cách sử dụng :
Các bạn save đoạn code bên trên là SimpleImage.php và xem đoạn code ví dụ minh họa sau để có thể hiểu rõ hơn.
Trong ví dụ này chúng ta sẽ load ảnh nguồn là picture.jpg và thu nhỏ nó lại với kích thước ngang là 250 pixel và cao là 400 pixel

<?php
include('SimpleImage.php');
$image = new SimpleImage();
$image->load('picture.jpg');
$image->resize(250,400);
$image->save('picture2.jpg');
?>

Nếu bạn muốn resize với một bề ngang được chỉ định đúng kích thước đưa ra thì sử dụng như sau :

<?php
include('SimpleImage.php');
$image = new SimpleImage();
$image->load('picture.jpg');
$image->resizeToWidth(250);
$image->save('picture2.jpg');
?>

Còn nếu bạn muốn scale  hình với phần trăm chỉ định thì đoạn code sau sẽ resize tấm hình gốc chỉ bằng 50% so với kích thước ban đầu

include('SimpleImage.php');
$image = new SimpleImage();
$image->load('picture.jpg');
$image->scale(50);
$image->save('picture2.jpg');

Và dĩ nhiên bạn cũng có thể tạo ra nhiều phiên bản thu nhỏ từ một hình gốc với nhiều kích thước khác nhau như sau:

include('SimpleImage.php');
$image = new SimpleImage();
$image->load('picture.jpg');
$image->resizeToHeight(500);
$image->save('picture2.jpg');
$image->resizeToHeight(200);
$image->save('picture3.jpg');

Hàm output cho phép bạn xuất hình ảnh trực tiếp ra trình duyệt mà không cần phải save file, điều này rất hữu ích cho việc tạo ra các hình ảnh thumnail mà không cần phải lưu trữ

header('Content-Type: image/jpeg');
include('SimpleImage.php');
$image = new SimpleImage();
$image->load('picture.jpg');
$image->resizeToWidth(150);
$image->output();

Và đây là đoạn code sẽ tạo ra ảnh thumnail ngay khi bạn upload hình gốc

<?php
if( isset($_POST['submit']) ) {

include('SimpleImage.php');
$image = new SimpleImage();
$image->load($_FILES['uploaded_image']['tmp_name']);
$image->resizeToWidth(150);
$image->output();
} else {

?>

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="uploaded_image" />

<input type="submit" name="submit" value="Upload" />

</form>

<?php
}
?>

Hy vọng với bài viết này sẽ giúp cho các bạn có thêm một lựa chọn cho việc tạo ra thumnail cho web hay blog của bạn. Chúc các bạn thành công !

Chuyên Mục:

Bài viết được đăng bởi webmaster

Nếu các bạn thấy bài viết hữu ích thì giúp mình Like cái nhé !
  • Nguyễn Văn Hưởng

    Giờ mình có một form upload hình ảnh, vậy làm thế nào để lưu ảnh resize vào thư mục resize và tên của nó là thumb1.jpg nhỉ