BASIC TO ADVANCE

Chuyển ảnh thành code HTML với PHP

Demo

Bài này mình sẽ giới thiệu với mọi người cách chuyển đổi hình ảnh sang code HTML với PHP. Demo sẽ như sau:

demo chuyen hinh anh sang html

1, Thuật toán.

-Thuật toán xử lý hết sức đơn giản với cách thực hiện như sau:

+ Đầu chúng ta sẽ lấy ra hình ảnh cần quét. Và xác định chiều rộng và chiều dài của ảnh.

+ Sau đó chúng ta sẽ thực hiện lặp từng pixel của ảnh từ trái qua phải và từ trên xuống dưới để lấy mã màu (dạng RGB) của từng điểm ảnh.

+ Và khi có được mã màu rồi thì chúng ta sẽ vẽ nó theo code HTML của chúng ta với mỗi điểm ảnh tương ứng với một thẻ span.

-> Đấy đơn giản đúng không giờ mình cùng đi vào thực hành xem thế nào.

2, Thực hành thuật toán.

-Mình sẽ giải thích trong code luôn nhé!

<?php
//Lấy file ảnh từ máy
// Nếu ảnh png thì dùng hàm ImageCreateFrompng
// $img = ImageCreateFrompng('ha-noi.png');

//Nếu ảnh jpg thì dùng hàm ImageCreateFromJpeg
$image = ImageCreateFromJpeg('ha-noi.jpg');

// Lấy ra chiều rộng của ảnh.
$widthImage = imagesx($image);

//Lấy ra chiều cao của ảnh
$heightImage = imagesy($image);

//Lặp chiều cao của ảnh 
for ($height = 0; $height < $heightImage; $height++) {

    //Lặp chiều rộng của ảnh (Lấy dư ra một để xuống dòng)
	for ($width = 0; $width <= $widthImage; $width++) {
		//Nếu vị chí hiện tại bằng chiều rộng của ảnh
		//thì xuống dòng và tiếp tục.
		if ($width == $widthImage) {
			echo '<br>';
			continue;
		}
  		// Lấy ra màu của điểm ảnh hiện tại
		$rgb = ImageColorAt($image, $width, $height);

  		//Chuyển đổi màu sang dạng RGB.
  		//chuyển sang red
		$red = ($rgb >> 16) & 0xFF;

  		//Chuyển sang Green
		$green = ($rgb >> 8 ) & 0xFF;

  		//Chuyển sang Blue
		$blue = $rgb & 0xFF;

  		//Hiển thị màu của ảnh dưới dạng html
		echo '<span  style="font-size:1px;color:rgb(' . $red . ',' . $green . ',' . $blue . ');">#</span>';

	}
}

VD: Mình sẽ thử với bức ảnh:

demo

Xem Kết Quả

3, Lời kết.

-Như vậy mình đã giới thiệu với mọi người cách chuyển đổi hình ảnh sang code HTML bằng PHP rồi. Tuy nhiên, cách này chỉ dùng chơi được thôi chứ áp dụng vào thực tế thì hoàn toàn không ổn, vì nó sử dụng quá nhiều tài nguyên (lặp dữ liệu quá nhiều). 

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

7 Comments

=)) giật kinh t

Trần Mạnh Tùng

3 năm trước

Vậy mình mới khuyên dùng chơi được thôi! Lặp quá nhiều dữ liệu mà.

Toidicode.com

3 năm trước

tại sao khi convert sang nó lại mờ mờ nhỉ :3 :3

Bùi Minh Phúc

3 năm trước

tại vì # nó không kín bạn ạ!

Toidicode.com

3 năm trước

Mình sửa lại chút thì nó tái tạo lại được màu sắc luôn, không bị mờ mờ.

<style>
p {
    margin: 0;
    padding: 0;
}

.p {
    width: 1px;
    height: 1px;
    display: inline-block;
}
</style>
<?php
//Lấy file ảnh từ máy
// Nếu ảnh png thì dùng hàm ImageCreateFrompng
// $img = ImageCreateFrompng('ha-noi.png');

//Nếu ảnh jpg thì dùng hàm ImageCreateFromJpeg
$image = ImageCreateFromJpeg('ha-noi.jpg');

// Lấy ra chiều rộng của ảnh.
$widthImage = imagesx($image);

//Lấy ra chiều cao của ảnh
$heightImage = imagesy($image);

//Lặp chiều cao của ảnh 
for ($height = 0; $height < $heightImage; $height++) {

//Lặp chiều rộng của ảnh (Lấy dư ra một để xuống dòng)
    for ($width = 0; $width <= $widthImage; $width++) {
//Nếu vị chí hiện tại bằng chiều rộng của ảnh
//thì xuống dòng và tiếp tục.
        if ($width == $widthImage) {
            echo '<br>';
            continue;
        }
// Lấy ra màu của điểm ảnh hiện tại
        $rgb = ImageColorAt($image, $width, $height);

//Chuyển đổi màu sang dạng RGB.
//chuyển sang red
        $red = ($rgb >> 16) & 0xFF;

//Chuyển sang Green
        $green = ($rgb >> 8 ) & 0xFF;

//Chuyển sang Blue
        $blue = $rgb & 0xFF;

//Hiển thị màu của ảnh dưới dạng html
        echo '<span class="p" style="background: rgb(' . $red . ',' . $green . ',' . $blue . ');"></span>';
    }
}

 

Ôm Boom

3 năm trước

có thể làm ngược lại không ae nhỉ ,chuyện tình dev là mình có file email có nội dung là html ,giờ muốn chuyển nó sang file ảnh thì sau ae nhỉ ,vì chuyển sang file ảnh mình mới đóng logo nó được

Huynh Thien Tri

3 năm trước

mình thử mấy ảnh, toàn ra 1 màu thế 

Minh Vũ

3 năm trước

Bình luận

Captcha