[PHP]Resize hình Khi làm website, tất nhiên hình ảnh cũng quan trọng không kém gì code, thông thường ta chọn những ảnh đẹp, chất lượng đưa lên web, nhưng tùy vào kích thước từng ảnh mà mình đưa lên sao cho hình đó không bị vỡ. Cocbay xin có 1 kinh nghiệm như sao.
Ví dụ ta có 1 tấm hình "hinh.jpg" có kích thước 500x500 pixels.
Khi bạn muốn show hình ra thì dùng thẻ <img src="hinh.jpg" />
Nếu bạn muốn giảm kích thước cho phù hợp với website của mình, ví dụ bạn làm giảm hình đi 5 lần thì bạn dùng thêm 2 thuộc tính width, hieght.
<img src="hinh.jpg" height=100 width=100>
Thực ra, khi thêm 2 thuộc tính width, height. Hình gốc vẫn không thay đổi, nó sẽ "gò pó" tấm hình lại, dồn các pixels lại với nhau, do đó có những pixel sẽ trùng nhau dẫn đến hình ảnh không được rõ ràng, sai lệch.
* Khắc phục:
1. Dùng phần mềm Photoshop -> Save for Web để resize hình đúng kích thước như mình muốn (100x100), để chế độ medium tiết kiệm dung lượng host.
2. Dùng code php để resize hình. Tạo file resize1.php
$filename = $_GET['f'];
$percent = $_GET['p'];
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_p, null, 100);
Khi show hình ra thì <img src="resize1.php?f=hinh.jpg&p=0.2" />
Trong đó f: tên hình, p: % mình muốn giảm kích thước width, height đi (0.5 là giảm 1/2 lần, 0.2 là giảm đi 1/5 lần).
Còn đây là code giảm theo height, width.
File resize2.php
$filename = $_GET['f'];
$width = $_GET['w'];
$height = $_GET['h'];
header('Content-type: image/jpeg');
list($width_orig, $height_orig) = getimagesize($filename);
$ratio_orig = $width_orig/$height_orig;
if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, null, 100);
<img src="resize2.php?f=hinh.jpg&h=100&w=100" />
Cả 2 cách trên sẽ cho bức ảnh đẹp hơn, khác xa <img src="hinh.jpg" width=100 height=100 />
*Ưu điễm, và nhược điễm:
Cách 1: web chạy nhanh vì không có xữ lý code để nén hình, nhưng chiếm dung lượng trên host, do bạn phải tạo thêm 1 file hình nữa.
Cách 2: Tiết kiệm được dung lượng host, chỉ xài 1 hình gốc, linh động hơn, nếu bạn muốn show nhiều kích cỡ (50%, 70%, 100%). Vì do phải xử lý, phải load ảnh gốc nên tốc độ web sẽ chậm đi.
Ngoài ra còn nhiều các, nhưng tui chưa biết....ac,ac,ac...
Cảm ơn bạn đã theo dõi
Theo phpbasic
thay đổi nội dung bởi: Lucky_Star, 22-05-2008 lúc 09:49 AM.
|