Lập trình php tạo Transparent Watermark Logo (hình logo mờ trong suốt) cho hình ảnh

Chào các bạn, hôm nay mình sẽ giới thiệu cho các bạn đang lập trình php nhưng chưa biết cách tạo hình logo mờ ẩn trên hình (Transparent Watermark Logo).

Đoạn code php sau sẽ giúp các bạn tạo một logo mờ ẩn trên hình. Bạn có thể ứng dụng cho việc upload hình ảnh lên website và gắn logo bản quyền cho hình ảnh đó. Đoạn code chỉ lấy ví dụ hình ảnh có type là image/jpeg nên nếu các bạn muốn thực hiện với type khác bạn hãy tìm hiểu thêm nhé.

// Cấu hình vị trí độ mờ
$horiz_position = 'left'; // center | left | right
$horiz_shift = '20'; //Khoảng cách pixel với tọa độ x
$vert_position = 'top'; // middle | top | bottom
$vert_shift = '20'; //Khoảng cách pixel với tọa độ y
$transparency = '50'; //Tính trong suốt của hình logo mờ
$picture = imagecreatefromjpeg('iot-agitech.jpg'); // Hình ảnh cần gắn logo mờ
$logo_watermark = imagecreatefrompng('logo-cnxag.png'); // Hình logo (chọn file png)

$pct = $transparency/100;
$w = imagesx($logo_watermark);
$h = imagesy($logo_watermark);

imageAlphaBlending($logo_watermark, false);
// Tìm pixel mờ nhất trong hình ảnh (pixel có giá trị alpha nhỏ nhất)
$minAlpha = 127;
for($x = 0; $x < $w; $x++) {
	for($y = 0; $y < $h; $y++) {
		$alpha = (imagecolorat($logo_watermark, $x, $y) >> 24) & 0xFF;
		if($alpha < $minAlpha) {
			$minAlpha = $alpha;
		}
	}
}

// Lặp qua các pixel hình ảnh và sửa đổi alpha cho từng pixel
for($x = 0; $x < $w; $x++) {
	for($y = 0; $y < $h; $y++) {
		$colorXY = imagecolorat($logo_watermark, $x, $y);
		$alpha = ($colorXY >> 24) & 0xFF;
		if($minAlpha !== 127) {
			$alpha = 127 + 127 * $pct * ($alpha - 127) / (127 - $minAlpha);
		} else {
			$alpha += 127 * $pct;
		}
		$alphaColorXY = imagecolorallocatealpha(
			$logo_watermark,
			($colorXY >> 16) & 0xFF,
			($colorXY >> 8) & 0xFF,
			$colorXY & 0xFF,
			$alpha
		);
		if(!imagesetpixel($logo_watermark, $x, $y, $alphaColorXY)) {
			return false;
		}
	}
}

$picture_width=imageSX($picture);
$picture_height=imageSY($picture);
$watermarkfile_width=imageSX($logo_watermark);
$watermarkfile_height=imageSY($logo_watermark);

// Lấy vị trí tọa độ x cho hình mờ
switch ($horiz_position) {
case 'center':
	$dest_x = ( $picture_width / 2 ) - ( $watermarkfile_width / 2 );
	break;
case 'left':
	$dest_x = $horiz_shift;
	break;
case 'right':
	$dest_x = $picture_width - $watermarkfile_width - $horiz_shift;
	break;
}

// Lấy vị trí tọa độ y cho hình mờ
switch ($vert_position) {
case 'middle':
	$dest_y = ( $picture_height / 2 ) - ( $watermarkfile_height / 2 );
	break;
case 'top':
	$dest_y = $vert_shift;
	break;
case 'bottom':
	$dest_y = $picture_height - $watermarkfile_height - $vert_shift;
	break;
}

// Dùng cho hình gif
// if($picture_fileType == 'gif') {
	// $tempimage = imagecreatetruecolor($picture_width, $picture_height);
	// imagecopy($tempimage, $picture, 0, 0, 0, 0, $picture_width, $picture_height);
	// $picture = $tempimage;
// }

imagecopy($picture, $logo_watermark, $dest_x, $dest_y, 0, 0, $watermarkfile_width, $watermarkfile_height);

header('Content-Type: image/png'); 
imagepng($picture);

Kết quả hình ảnh sẽ giống như sau:

tao logo mo an tren hinh

 

Mong là bài viết này sẽ giúp ít cho những bạn đang tìm hiểu và phát triển kỹ năng lập trình php, để viết ra chức năng ứng dụng hay hơn cho trang web của mình.

Chúc các bạn thành công!

Ngụy Kim Hưng

Hướng dẫn cách khôi phục cơ sở dữ liệu mysql khi lỡ xóa file ibdata

 khoi phuc mysql database

Nếu có một ngày bạn vô tình xóa (Shift + Delete) file ibdata của cơ sở dữ liệu Mysql, thì bạn cũng đừng quá lo lắng vì tôi cũng từng phạm phải trường hợp như bạn và thật mai mắn khi tôi tìm được một cách giải quyết.

Trong bài viết này tôi chia sẻ cho các bạn cách khôi phục mà tôi đã làm, mong là có thể giúp ích cho đọc giả khi đọc bài viết này.

Để có thể khôi phục trong thư mục data của Mysql bạn vẫn còn giữ thư mục các database, trong đó có file .frm và .ibd . Ngoài ra bạn vẫn cần có file .sql cũ để có thể Import lấy lại cấu trúc các bảng dữ liệu.

Khi truy cập vào cơ sở dữ liệu phpmyadmin bạn vẫn thấy database, table nhưng cấu trúc và dữ liệu đã bị mất, chọn vào bảng dữ liệu sẽ hiển thị lỗi "table doesn't exist".

Sau đây là các bước để thực hiện khôi phục dữ liệu:

Bước 1: Bạn tạo một database mới, rồi Import file .sql cũ vào.

Bước 2: Bạn khôi phục lại từng bảng dữ liệu trong databasse.

- Chạy thực thi lệnh xoá tablespace của bảng cần khôi phục:

ALTER TABLE <Tên bảng cần khôi phục> DISCARD TABLESPACE

Sau khi chạy lệnh trên trong thư mục Mysql/data/<database mới> sẽ mất file .ibd của bảng bạn đang khôi phục.

- Bạn sao chép file .ibd của bảng trong thư mục của cơ sở dữ liệu bị lỗi vào Mysql/data/<database mới>.

- Chạy thực thi lệnh import lại tablespace của bảng cần khôi phục.

ALTER TABLE <Tên bảng cần khôi phục> IMPORT TABLESPACE

Sau khi chạy lệnh bạn sẽ thấy được dữ liệu của bảng, tới đây là bạn đã khôi phục được một bảng dữ liệu.

Các bạn thực hiện theo bước 2 cho các bảng dữ liệu còn lại là có thể khôi phục lại toàn bộ database của bạn.

Chúc các bạn thành công!

Chia sẻ: Ngụy Kim Hưng