10/10/2018, 13:22

Cách thêm watermark (hình, text chìm) cho ảnh bằng PHP

Bạn có thể có ý định bảo vệ bức ảnh của mình bằng kỹ thuật "chèn hình chìm". Tức là bạn muốn đặt một bức hình nhỏ, hoặc dòng chữ vào trong bức ảnh gốc để nói rằng bạn là người sở hữu nó. Bằng cách thử dụng thư viện GD và PHP, điều đó thật dễ dàng.

Giải pháp

Hàm imagestring được dùng để đặt chữ vào trong ảnh, trong khi đó, hàm imagecopymerge được dùng để đặt một bức ảnh vào một bức ảnh khác.

Hiển thị một dòng chữ chìm

Hiển thị chữ là hình thức đơn giản nhất của việc làm ảnh chìm. Đây là cách làm

Code:
<?php
$image = imagecreatefromjpeg('sample_images/thumb_terrier.jpg');
$color = imagecolorallocate($image, 68, 68, 68);
imagestring($image, 5, 90, 0, "hoctudau.com", $color);
header('Content-Type: image/jpg');
imagejpeg($image);
?>
Demo: http://hoctudau.com/ebook-examples/p...rmak-image.php

Hình minh họa:


Tool: http://hoctudau.com/ebook-examples/p...image-tool.php



Hàm imagecolorallocate cho phép bạn tạo một màu mới dùng để vẽ ảnh với 3 tham trị: R (red, đỏ), G (green, xanh lá cây), B (blue, xanh da trời), hàm này sẽ trả về giá trị màu dùng để vẽ vào ảnh.

Sau khi có giá trị màu ở biến $color, bạn dùng hàm imagestring để đặt chữ vào hình, biến đầu tiên là $image được lấy ở dòng đầu tiên, nó chính là bức hình được nạp vào 1 biến, biến thứ 2 là giá trị font, ở đây ta minh họa trường hợp đơn giản là dùng font mặc định nên ta lấy giá trị 5 (có 5 giá trị font mặc định từ 1-5), còn trường hợp bạn muốn dùng font khác cho đẹp thì bạn thay vào đó bằng biến $font nào đó của bạn, lấy từ hàm imageloadfont (bạn tự google cách dùng hàm này nhé). Các tham số thứ 3 và 4 là vị trí ta sẽ vẽ chữ vào hình. Tham số thứ 5 là dòng chữ ta muốn đưa vào, còn tham số thứ 6 (cuối cùng) là màu sắc.

Hiển thị ảnh chìm

Logo hoặc các ảnh nhận dạng mờ dễ dàng được đặt vào ảnh khác. Sau đây là ví dụ:
Code:
<?php
$image = imagecreatefromjpeg('sample_images/thumb_terrier.jpg');
$iWidth = imagesx($image);
$watermark = imagecreatefrompng('sample_images/sitepoint_watermark.png');
$wmWidth = imagesx($watermark);
$wmHeight = imagesy($watermark);
$xPos = $iWidth - $wmWidth;
imagecopymerge($image, $watermark, $xPos, 0, 0, 0, $wmWidth, $wmHeight, 100) ;
header('Content-Type: image/jpg');
imagepng($image);
?>
Hàm imagecopymerge được dùng để đặt ảnh lấy từ biến $watermark vào ảnh gốc $image, đây là 2 tham số đầu của hàm, bốn tham số tiếp sau là 2 tọa độ x, y. Tiếp theo là 2 tham số về độ cao của ảnh. Tham số cuối là độ trong suốt của ảnh watermark, 100 tức là không áp dụng kỹ thuật làm trong ảnh, còn 0 là hoàn toàn trong suốt (tức là không nhìn thấy ảnh chìm).
zmt264 viết 15:23 ngày 10/10/2018
Đây là 1 bài dịch từ sách ra, nếu mà nhiều bạn thấy hữu ích thì mình sẽ tiếp tục hoạt động này, còn ngược lại thì mình stop
nino viết 15:31 ngày 10/10/2018
cũng hay hay đó, cứ mần tiếp đi bạn ơi
zmt264 viết 15:34 ngày 10/10/2018
Được gửi bởi nino
cũng hay hay đó, cứ mần tiếp đi bạn ơi
thế bình chọn cho "hữu ích" đi.

Bây giờ trên mạng gạch đá nhiều, có khi mất bao công sức soạn bài rồi bị chê , nên cái gì hàng hót nhiều người ưa chuộng mới đầu tư công sức , không thì bỏ ngay để đỡ "tiền mất, tật mang"
nino viết 15:28 ngày 10/10/2018
ai ném thì mặc họ, hỏi xem họ có làm được như vậy không
"lai" bạn một phát nhé
zmt264 viết 15:31 ngày 10/10/2018
Được gửi bởi nino
ai ném thì mặc họ, hỏi xem họ có làm được như vậy không
"lai" bạn một phát nhé
ok, nên Like hoặc vote động viên người viết để người ta biết là có tiếp tục hay ko, mấy cái này ko trực tiếp ra tiền nên bị ném thì chả còn động lực gì làm tiếp đâu, trừ khi 10 người ném đá mà 90 người ủng hộ, chứ 40% trở lên ném đá là nản rồi.
chuotkhonglong viết 15:37 ngày 10/10/2018
Ủng hộ công nghệ, không thích cách bảo vệ hình ảnh bằng waterMark
Bài liên quan
0