Code Thay cho Plugin WordPress: Image Watermark

16 Likes Comment

Đây là bài trong loạt bài chúng ta dùng các đoạn code function để làm những công việc thay cho các plugin không thực sự cần thiết và quá lắm chức năng mà chúng ta đôi khi là không dùng tới, trong bài này mình hướng dẫn các bạn đóng watermark cho hình ảnh trên website mà không cần plugin.

Để làm được việc này thì bạn cần gọi 1 hook có tên add_attachment của wordpress. add_attachment là một hook được sử dụng trong WordPress để thực thi các hành động sau khi một tệp đính kèm mới được tải lên thành công trên trang web. Khi hook này được kích hoạt, nó cho phép chúng ta thực hiện một số hành động sau khi một tệp đính kèm mới được tải lên, bao gồm thêm các thông tin liên quan đến tệp đính kèm, tạo bản ghi trong cơ sở dữ liệu và xử lý tệp đính kèm.

Các hành động được thực thi bởi hook add_attachment được xác định bởi các function mà được đăng ký với hook này bằng cách sử dụng hàm add_action() hoặc add_filter(). Ví dụ, chúng ta có thể sử dụng hook này để thực hiện các hành động như thêm một watermark vào hình ảnh đính kèm, thêm thông tin tùy chỉnh về tệp đính kèm hoặc thực hiện các xử lý dữ liệu khác liên quan đến tệp đính kèm.

Với hook add_attachment, chúng ta có thể truy cập đối tượng metadata của tệp đính kèm bằng cách sử dụng hàm wp_generate_attachment_metadata() để tạo metadata và trả về một mảng dữ liệu chứa các thông tin về tệp đính kèm. Chúng ta có thể thay đổi hoặc thêm thông tin vào mảng này trước khi nó được lưu vào cơ sở dữ liệu.

Với các hành động cụ thể, chúng ta có thể sử dụng các hook khác như wp_handle_upload, wp_handle_upload_prefilter, wp_handle_sideloadwp_upload_bits để xử lý các tệp đính kèm theo cách khác nhau.

Trong trường hợp cần watermark tôi sẽ dùng hook này đơn giản như sau

// Hàm thêm watermark
function add_watermark($attachment_id) {
    $watermark_path = '/blog.manhtuong.net/wp-content/uploads/2020/05/JA1DbUr.png'; // Đường dẫn đến file watermark
    $attachment = get_post($attachment_id);
    $file = get_attached_file($attachment_id);
    $mime_type = get_post_mime_type($attachment);
    
    if (strpos($mime_type, 'image') !== false) { // Nếu là hình ảnh
        if ($mime_type == 'image/jpeg') {
            $image = imagecreatefromjpeg($file);
        } elseif ($mime_type == 'image/png') {
            $image = imagecreatefrompng($file);
        }
        $watermark = imagecreatefrompng($watermark_path);
        
        // Lấy kích thước hình ảnh và watermark
        $image_width = imagesx($image);
        $image_height = imagesy($image);
        $watermark_width = imagesx($watermark);
        $watermark_height = imagesy($watermark);
        
        // Tính toán vị trí cho watermark
        $watermark_pos_x = $image_width - $watermark_width - 10;
        $watermark_pos_y = $image_height - $watermark_height - 10;
        
        // Thêm watermark vào hình ảnh
        imagecopy($image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);
        
        // Lưu hình ảnh mới đã thêm watermark
        if ($mime_type == 'image/jpeg') {
            imagejpeg($image, $file);
        } elseif ($mime_type == 'image/png') {
            imagepng($image, $file);
        }
    }
}

// Thêm hook để chạy function add_watermark khi upload hình ảnh
add_action('add_attachment', 'add_watermark');

Lưu ý:

Thay các thông số sau thành của bạn

Thông sốLưu ý
watermark_pathđường dẫn full của file làm watermark trên máy chủ
Định dạng hỗ trợJPEG JPG PNG

Kết quả chúng ta được như ảnh demo này

Các bạn có thể thấy hình ảnh logo của mình đã được chèn vào ảnh bên phải phía dưới rồi, vậy là code đã chạy thành công.

0 0 votes
Article Rating

You might like

Avatar

About the Author: Vô Ưu

Xin chào! Tôi là Vouu, người sáng lập blog này. Tôi là một người yêu thích. Tôi có một công việc ban ngày với tư cách là một chuyên viên bơm vá săm xe các loại, và trang web này là một trong những hoạt động yêu thích của tôi, đặc biệt là trong những lúc rảnh rỗi. Hy vọng bạn thích sử dụng trang web này, và nó sẽ mang lại cho bạn nhiều điều bổ ích. Phản hồi từ người đọc sẽ truyền cảm hứng cho tôi để tôi có thể viết được nhiều hơn nữa !. Bạn chỉ cần để lại nhận xét bên dưới nếu bạn thấy bài viết này hữu ích. Chúc bạn ngày mới tốt lành!
Subscribe
Notify of
guest
0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x