PHP

Cách đóng dấu bản quyền ảnh bằng PHP

Đóng dấu bản quyền lên ảnh(watermark) là ghi lại thông tin tác giả trên ảnh số nhằm thể hiện bản quyền của tác giả đối với bức ảnh.
Bình thường
1

Chuẩn bị 2 ảnh, 1 ảnh gốc(main.jpg) và một ảnh dùng để đóng dấu(watermark.png).
2

Tạo thư mục watermark và chép 2 ảnh trên vào.
1

Lưu đoạn mã sau thành file watermark.php vào thư mục watermark
view plaincopy to clipboardprint?

1. <?php
2. class watermark{
3.
4. # given two images, return a blended watermarked image
5. function create_watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100 ) {
6. $alpha_level /= 100; # convert 0-100 (%) alpha to decimal
7.
8. # calculate our images dimensions
9. $main_img_obj_w = imagesx( $main_img_obj );
10. $main_img_obj_h = imagesy( $main_img_obj );
11. $watermark_img_obj_w = imagesx( $watermark_img_obj );
12. $watermark_img_obj_h = imagesy( $watermark_img_obj );
13.
14. # determine center position coordinates
15. $main_img_obj_min_x = floor( ( $main_img_obj_w / 2 ) – ( $watermark_img_obj_w / 2 ) );
16. $main_img_obj_max_x = ceil( ( $main_img_obj_w / 2 ) + ( $watermark_img_obj_w / 2 ) );
17. $main_img_obj_min_y = floor( ( $main_img_obj_h / 2 ) – ( $watermark_img_obj_h / 2 ) );
18. $main_img_obj_max_y = ceil( ( $main_img_obj_h / 2 ) + ( $watermark_img_obj_h / 2 ) );
19.
20. # create new image to hold merged changes
21. $return_img = imagecreatetruecolor( $main_img_obj_w, $main_img_obj_h );
22.
23. # walk through main image
24. for( $y = 0; $y < $main_img_obj_h; $y++ ) {
25. for( $x = 0; $x = 0 && $watermark_x = 0 && $watermark_y _get_ave_color( $main_rgb[‘red’], $watermark_rbg[‘red’], $watermark_alpha );
47. $avg_green = $this->_get_ave_color( $main_rgb[‘green’], $watermark_rbg[‘green’], $watermark_alpha );
48. $avg_blue = $this->_get_ave_color( $main_rgb[‘blue’], $watermark_rbg[‘blue’], $watermark_alpha );
49.
50. # calculate a color index value using the average RGB values we’ve determined
51. $return_color = $this->_get_image_color( $return_img, $avg_red, $avg_green, $avg_blue );
52.
53. # if we’re not dealing with an average color here, then let’s just copy over the main color
54. } else {
55. $return_color = imagecolorat( $main_img_obj, $x, $y );
56.
57. } # END if watermark
58.
59. # draw the appropriate color onto the return image
60. imagesetpixel( $return_img, $x, $y, $return_color );
61.
62. } # END for each X pixel
63. } # END for each Y pixel
64.
65. # return the resulting, watermarked image for display
66. return $return_img;
67.
68. } # END create_watermark()
69.
70. # average two colors given an alpha
71. function _get_ave_color( $color_a, $color_b, $alpha_level ) {
72. return round( ( ( $color_a * ( 1 – $alpha_level ) ) + ( $color_b * $alpha_level ) ) );
73. } # END _get_ave_color()
74.
75. # return closest pallette-color match for RGB values
76. function _get_image_color($im, $r, $g, $b) {
77. $c=imagecolorexact($im, $r, $g, $b);
78. if ($c!=-1) return $c;
79. $c=imagecolorallocate($im, $r, $g, $b);
80. if ($c!=-1) return $c;
81. return imagecolorclosest($im, $r, $g, $b);
82. } # EBD _get_image_color()
83.
84. } # END watermark API
85. ?>

<?php
class watermark{

# given two images, return a blended watermarked image
function create_watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100 ) {
$alpha_level /= 100; # convert 0-100 (%) alpha to decimal

# calculate our images dimensions
$main_img_obj_w = imagesx( $main_img_obj );
$main_img_obj_h = imagesy( $main_img_obj );
$watermark_img_obj_w = imagesx( $watermark_img_obj );
$watermark_img_obj_h = imagesy( $watermark_img_obj );

# determine center position coordinates
$main_img_obj_min_x = floor( ( $main_img_obj_w / 2 ) – ( $watermark_img_obj_w / 2 ) );
$main_img_obj_max_x = ceil( ( $main_img_obj_w / 2 ) + ( $watermark_img_obj_w / 2 ) );
$main_img_obj_min_y = floor( ( $main_img_obj_h / 2 ) – ( $watermark_img_obj_h / 2 ) );
$main_img_obj_max_y = ceil( ( $main_img_obj_h / 2 ) + ( $watermark_img_obj_h / 2 ) );

# create new image to hold merged changes
$return_img = imagecreatetruecolor( $main_img_obj_w, $main_img_obj_h );

# walk through main image
for( $y = 0; $y < $main_img_obj_h; $y++ ) {
for( $x = 0; $x = 0 && $watermark_x = 0 && $watermark_y _get_ave_color( $main_rgb[‘red’], $watermark_rbg[‘red’], $watermark_alpha );
$avg_green = $this->_get_ave_color( $main_rgb[‘green’], $watermark_rbg[‘green’], $watermark_alpha );
$avg_blue = $this->_get_ave_color( $main_rgb[‘blue’], $watermark_rbg[‘blue’], $watermark_alpha );

# calculate a color index value using the average RGB values we’ve determined
$return_color = $this->_get_image_color( $return_img, $avg_red, $avg_green, $avg_blue );

# if we’re not dealing with an average color here, then let’s just copy over the main color
} else {
$return_color = imagecolorat( $main_img_obj, $x, $y );

} # END if watermark

# draw the appropriate color onto the return image
imagesetpixel( $return_img, $x, $y, $return_color );

} # END for each X pixel
} # END for each Y pixel

# return the resulting, watermarked image for display
return $return_img;

} # END create_watermark()

# average two colors given an alpha
function _get_ave_color( $color_a, $color_b, $alpha_level ) {
return round( ( ( $color_a * ( 1 – $alpha_level ) ) + ( $color_b * $alpha_level ) ) );
} # END _get_ave_color()

# return closest pallette-color match for RGB values
function _get_image_color($im, $r, $g, $b) {
$c=imagecolorexact($im, $r, $g, $b);
if ($c!=-1) return $c;
$c=imagecolorallocate($im, $r, $g, $b);
if ($c!=-1) return $c;
return imagecolorclosest($im, $r, $g, $b);
} # EBD _get_image_color()

} # END watermark API
?>

4

Tạo file test.php trong thư mục watermark với nội dung sau

view plaincopy to clipboardprint?

1. create_watermark( $main_img_obj, $watermark_img_obj, 66 );
7. imagejpeg( $return_img_obj, ‘result.jpg’, 50 );
8. ?>

create_watermark( $main_img_obj, $watermark_img_obj, 66 );
imagejpeg( $return_img_obj, ‘result.jpg’, 50 );
?>

5

Chạy file test.php, ảnh kết quả sẽ được lưu thành file result.jpg.

Nguồn : http://vnhow.vn

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s