Tạo watermark cho hình ảnh bằng PHP
Hướng dẫn cách thêm watermark cho hình ảnh bằng PHP sử dụng thư viện GD. Mã PHP này cho phép thêm watermark văn bản hoặc hình ảnh lên ảnh gốc.
<?php
function addWatermark($source_image_path, $watermark_image_path, $output_image_path, $position = 'bottom-right', $opacity = 50) {
// Lấy thông tin ảnh gốc
list($source_width, $source_height, $source_type) = getimagesize($source_image_path);
// Tạo ảnh từ file gốc
switch ($source_type) {
case IMAGETYPE_JPEG:
$source_image = imagecreatefromjpeg($source_image_path);
break;
case IMAGETYPE_PNG:
$source_image = imagecreatefrompng($source_image_path);
break;
case IMAGETYPE_GIF:
$source_image = imagecreatefromgif($source_image_path);
break;
default:
return false;
}
// Tạo ảnh watermark từ file
list($watermark_width, $watermark_height) = getimagesize($watermark_image_path);
$watermark_image = imagecreatefrompng($watermark_image_path);
imagealphablending($watermark_image, true);
// Xác định vị trí watermark
switch ($position) {
case 'top-left':
$x = 0;
$y = 0;
break;
case 'top-right':
$x = $source_width - $watermark_width;
$y = 0;
break;
case 'bottom-left':
$x = 0;
$y = $source_height - $watermark_height;
break;
case 'bottom-right':
default:
$x = $source_width - $watermark_width;
$y = $source_height - $watermark_height;
break;
}
// Thêm watermark vào ảnh gốc
imagecopymerge($source_image, $watermark_image, $x, $y, 0, 0, $watermark_width, $watermark_height, $opacity);
// Lưu ảnh mới
switch ($source_type) {
case IMAGETYPE_JPEG:
imagejpeg($source_image, $output_image_path, 90);
break;
case IMAGETYPE_PNG:
imagepng($source_image, $output_image_path);
break;
case IMAGETYPE_GIF:
imagegif($source_image, $output_image_path);
break;
}
// Giải phóng bộ nhớ
imagedestroy($source_image);
imagedestroy($watermark_image);
return true;
}
// Sử dụng hàm
$source_image = 'source_image.jpg';
$watermark_image = 'watermark.png';
$output_image = 'watermarked_image.jpg';
if (addWatermark($source_image, $watermark_image, $output_image)) {
echo "Watermark đã được thêm thành công!";
} else {
echo "Không thể thêm watermark.";
}
?>
Giải thích chi tiết:
-
Lấy thông tin ảnh gốc:
getimagesize($source_image_path)
: Lấy kích thước và loại ảnh của ảnh gốc.
-
Tạo ảnh từ file gốc:
- Sử dụng các hàm
imagecreatefromjpeg
,imagecreatefrompng
,imagecreatefromgif
để tạo ảnh dựa trên loại ảnh gốc.
- Sử dụng các hàm
-
Tạo ảnh watermark:
imagecreatefrompng($watermark_image_path)
: Tạo ảnh từ file watermark. Ở đây sử dụng định dạng PNG vì hỗ trợ độ trong suốt.
-
Xác định vị trí watermark:
- Sử dụng các lựa chọn
top-left
,top-right
,bottom-left
,bottom-right
để xác định vị trí watermark sẽ được thêm vào.
- Sử dụng các lựa chọn
-
Thêm watermark vào ảnh gốc:
imagecopymerge()
: Thực hiện việc ghép ảnh watermark lên ảnh gốc với mức độ trong suốt (opacity
).
-
Lưu ảnh mới:
- Dựa trên định dạng của ảnh gốc, ảnh đã được chỉnh sửa sẽ được lưu lại bằng hàm tương ứng.
-
Giải phóng bộ nhớ:
imagedestroy()
: Xóa dữ liệu ảnh khỏi bộ nhớ để tránh làm đầy bộ nhớ.
-
Sử dụng hàm:
- Thực hiện việc thêm watermark vào ảnh gốc và lưu nó vào file mới.