Code Upload và Watermark hình ảnh

Tác giả Network Engineer, T.Bảy 13, 2019, 07:35:59 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Code Upload và Watermark hình ảnh


Watermarking là một phương pháp phổ biến để bảo vệ ảnh kỹ thuật số khỏi bị sao chép bởi những kẻ trộm hình ảnh trên mạng. Sử dụng PHP chúng ta có thể làm như vậy. Ở đây chúng tôi sử dụng hình ảnh PNG trong suốt làm mẫu Watermark, sau đó chúng tôi hợp nhất nó với hình ảnh để tạo hình mờ vĩnh viễn. Trong hầu hết các kịch bản, mọi người muốn thay đổi kích thước hình ảnh được tải lên bằng hình thức HTML và sau đó watermark nó một cách nhanh chóng. Vì vậy, trong bài viết này, chúng tôi sẽ làm như vậy. Chúng tôi tải lên một hình ảnh, thay đổi kích thước hình ảnh và sau đó watermark nó với tệp PNG của chúng tôi.

Nếu bạn xem đoạn mã thay đổi kích thước trước đây của tôi, bạn sẽ nhận ra rằng tôi đã thực hiện một sửa đổi nhỏ cho mã. Đoạn mã này thường làm điều tương tự, nó thay đổi kích thước hình ảnh được tải lên. Nhưng sau khi sửa đổi, bây giờ nó thêm một hình mờ cho tất cả các hình ảnh đã thay đổi kích thước. Hãy tạo một trang tải lên bằng HTML bên dưới.

Mã nguồn [Chọn]
<form action="" id="upload-form" method="post" enctype="multipart/form-data">
<input type="file" name="image_file" />
<input type="submit" value="Send Image" />
</form>

1. Sử dụng hàm function Imagecopy()

Một sửa đổi nhỏ trong đoạn mã PHP trước đây mà tôi đã nói ở trên là tôi đã thêm hàm function Imagecopy() trong đoạn mã này. Những gì nó thực sự làm là nó sao chép phần xác định của hình ảnh nguồn vào hình ảnh đích. Vì vậy, về cơ bản, chúng tôi sao chép và hợp nhất hình ảnh watermark PNG với hình ảnh được tải lên. Hãy xem ví dụ dưới đây, trước tiên mã tính toán vị trí trung tâm của hình mờ bằng cách sử dụng chiều rộng và chiều cao của hình ảnh đích và hình mờ, sau đó sử dụng hình ảnh PHP () nó hợp nhất hình ảnh thủy ấn với hình ảnh đích.

Mã nguồn [Chọn]
//path to destination image
$destination_image = imagecreatefromjpeg('PATH/TO/DESTINATION/JPEG/FILE');

//path to watermark image
$watermark = imagecreatefrompng('PATH/TO/WATERMARK/PNG/FILE');

//calculate center position of watermark image
$watermark_left = (DST_IMAGE_WIDTH/2)-(WATERMARK_WIDTH/2); //watermark left
$watermark_bottom = (DST_IMAGE_HEIGHT/2)-(WATERMARK_HEIGHT/2); //watermark bottom

//use PHP imagecopy() to merge two images.
imagecopy($destination_image, $watermark, $watermark_left, $watermark_bottom, 0, 0, WATERMARK_WIDTH, WATERMARK_HEIGHT); //merge image

2. Đoạn hoàn chỉnh (Kích thước lại và Hình chìm mờ)

Nếu bạn rõ ràng về ví dụ trên, hãy xem mã PHP hoàn chỉnh bên dưới, chúng tôi gọi hàm hàm function Imagecopy() sau khi hình ảnh được thay đổi kích thước, nhưng trước khi lưu hình ảnh.

Mã nguồn [Chọn]
if(isset($_FILES['image_file']))
{
    $max_size = 800; //max image size in Pixels
    $destination_folder = 'path/to/upload/folder';
    $watermark_png_file = 'watermark.png'; //path to watermark image
   
    $image_name = $_FILES['image_file']['name']; //file name
    $image_size = $_FILES['image_file']['size']; //file size
    $image_temp = $_FILES['image_file']['tmp_name']; //file temp
    $image_type = $_FILES['image_file']['type']; //file type

    switch(strtolower($image_type)){ //determine uploaded image type
            //Create new image from file
            case 'image/png':
                $image_resource =  imagecreatefrompng($image_temp);
                break;
            case 'image/gif':
                $image_resource =  imagecreatefromgif($image_temp);
                break;         
            case 'image/jpeg': case 'image/pjpeg':
                $image_resource = imagecreatefromjpeg($image_temp);
                break;
            default:
                $image_resource = false;
        }
   
    if($image_resource){
        //Copy and resize part of an image with resampling
        list($img_width, $img_height) = getimagesize($image_temp);
       
        //Construct a proportional size of new image
        $image_scale        = min($max_size / $img_width, $max_size / $img_height);
        $new_image_width    = ceil($image_scale * $img_width);
        $new_image_height  = ceil($image_scale * $img_height);
        $new_canvas        = imagecreatetruecolor($new_image_width , $new_image_height);

        //Resize image with new height and width
        if(imagecopyresampled($new_canvas, $image_resource , 0, 0, 0, 0, $new_image_width, $new_image_height, $img_width, $img_height))
        {
           
            if(!is_dir($destination_folder)){
                mkdir($destination_folder);//create dir if it doesn't exist
            }
           
            //calculate center position of watermark image
            $watermark_left = ($new_image_width/2)-(300/2); //watermark left
            $watermark_bottom = ($new_image_height/2)-(100/2); //watermark bottom

            $watermark = imagecreatefrompng($watermark_png_file); //watermark image

            //use PHP imagecopy() to merge two images.
            imagecopy($new_canvas, $watermark, $watermark_left, $watermark_bottom, 0, 0, 300, 100); //merge image
           
            //output image direcly on the browser.
            header('Content-Type: image/jpeg');
            imagejpeg($new_canvas, NULL , 90);
           
            //Or Save image to the folder
            //imagejpeg($new_canvas, $destination_folder.'/'.$image_name , 90);
           
            //free up memory
            imagedestroy($new_canvas);
            imagedestroy($image_resource);
            die();
        }
    }
}

Bạn có thể tải xuống các tệp ví dụ bằng cách nhấp vào nút tải xuống bên dưới và chơi một chút với nó trên máy chủ của bạn, tất cả đều tốt nhất! Tải về trong tập tin đính kèm.