Viết bài mới Trả lời
 
Công cụ bài viết Kiểu hiển thị
  #1  
Cũ 16-11-2007, 10:58 PM
Avatar của free4all
free4all free4all đang ẩn
Senior Member
 
Tham gia ngày: Oct 2007
Bài gửi: 2.268
Thanks: 37
Thanked 260 Times in 212 Posts
Mặc định Giữ bản quyền ảnh bằng watermark

Watermark là hình, chữ được in chìm trên tấm ảnh. Bài viết này sẽ hướng dẫn bạn tạo watermark một cách tự động từ ảnh gốc của mình. Bạn cần có PHP và GD.

1. Cách làm

Tạo file index.php trong thư mục images của bạn với nội dung


Mã:
$direction = 'H';
$dim = true;
$text = '4u.jcisio.com';
$font = 2;
 
error_reporting(0);
$filename = $_SERVER['QUERY_STRING'];
 
$size = GetImageSize ($filename);
switch ($size[2])
{
    case 2:
        Header('Content-type: image/jpeg');
        $funcCreate = 'ImageCreateFromJpeg';
        $funcOutput = 'ImageJpeg';
        break;
    case 3:
        Header('Content-type: image/png');
        $funcCreate = 'ImageCreateFromPng';
        $funcOutput = 'ImagePng';
        break;
    default:
        Header ('Content-type: image/gif');
        if (! @readfile($filename))
 
        {
            $error = ImageCreate(100,40);
            $c_grey = ImageColorAllocate($error, 128, 128, 128);
            $c_white = ImageColorAllocate($error, 255, 255, 255);
            ImageFill($error, 0, 0, $c_grey);
            Imagestring($error, 5, 1, 12, 'Image error', $c_white);
            echo ImagePng($error);
            ImageDestroy($error);
            return;
        }
}
 
$width = ImageFontWidth($font)*strlen($text);
$height = ImageFontHeight($font);
 
$image = $funcCreate($filename);
if ($direction=='H')
{
    get_color($size[0]-$width-5, $size[1]-$height-5, $size[0]-5, $size[1]-5);
    ImageString($image, $font, $size[0]-$width-4, $size[1]-$height-4, $text, $color_bg);
    ImageString($image, $font, $size[0]-$width-5, $size[1]-$height-5, $text, $color);
}
else
{
    get_color($size[0]-$height-5, $size[1]-$width-5, $size[0]-5, $size[1]-5);
    ImageStringUp($image, $font, $size[0]-$height-4, $size[1]-6, $text, $color_bg);
    ImageStringUp($image, $font, $size[0]-$height-5, $size[1]-5, $text, $color);
}
echo $funcOutput($image);
ImageDestroy($image);
 
function get_color($x1, $y1, $x2, $y2)
{
    global $image, $dim, $color, $color_bg;
    if (!$dim)
    {
        $color = ImageColorAllocate($image, 0, 255, 255);
        $color_bg = ImageColorAllocate($image, 255, 0, 255);
        return;
    }
 
    for($x = $x1; $x <= $x2; $x++)
    {
        for ($y = $y1; $y <= $y2; $y++)
        {
            $colors = ImageColorsForIndex($image, ImageColorAt($image, $x, $y));
            $text_color['r'] += $colors['red'];
            $text_color['r'] /= 2;
            $text_color['g'] += $colors['green'];
            $text_color['g'] /= 2;
            $text_color['b'] += $colors['blue'];
            $text_color['b'] /= 2;
        }
    }
    $text_color['r'] = $text_color['r'] <128 ? $text_color['r'] + 128 : $text_color['r'] - 128;
    $text_color['g'] = $text_color['g'] <128 ? $text_color['g'] + 128 : $text_color['g'] - 128;
    $text_color['r'] = $text_color['r'] <128 ? $text_color['r'] + 128 : $text_color['r'] - 128;
 
    $color = ImageColorAllocate($image, $text_color['r'], $text_color['g'], $text_color['b']);
    $color_bg = ImageColorAllocate($image,
                        ($text_color['r']> 128 ? 10 : 240),
                        ($text_color['g']> 128 ? 10 : 240),
                        ($text_color['b']> 128 ? 10 : 240));
}
Thông thường, bạn gọi một file ảnh bằng

Mã:
<img src="images/star.jpg"/>
Bây giờ, bạn thay bằng


Mã:
<img src="images/?star.jpg"/>
Trông cũng giống nhau, nhưng bản chất thay đổi. Trong cách gọi thứ 2, bạn mở file images/, đây là tên thư mục nên nó lấy file mặc định là index.php. Tập tin index.php sẽ xử lí tham số của nó và xuất ra ảnh có watermark. Bạn có thể ghi đầy đủ là images/index.php?star.jpg, nhưng như thế không mang vẻ thần bí lắm.

2. Giải thích

Câu lệnh switch xác định kiểu ảnh để xuất header thích hợp. Do GD 1.6.2 trở về sau không hỗ trợ .gif (các phiên bản 2.x bundled hỗ trợ gif readonly), nên nếu không phải ảnh .jpg hoặc .png, nó sẽ xuất thẳng mà không xử lí gì cả.
Các dòng sau đó tìm hiểu về màu sắc của khu vực sẽ viết chữ, để định màu phù hợp cho watermark. Để đơn giản, bạn có thể xoá luôn hàm get_color() và đặt thẳng giá trị cho $color và $color_bg.
3. Lời kết

Bạn đã biết được cách làm watermark, nhưng không nên lạm dụng nó. Hãy nhớ rằng đại đa số những cái bạn có là do người khác chia xẻ cho. Chúc bạn ngày càng tiến bộ

Sưu tầm

---------------
  Xem thêm các chủ đề mới nhất của box này :

__________________
http://aloxovn.com
Trả lời với trích dẫn
Trả lời

Tags
ảnh, bản, bằng, giữ, quyền, watermark


Những người đang xem chủ đề: 1 (0 thành viên và 1 khách)
 
Công cụ bài viết
Kiểu hiển thị

Quyền viết bài
Bạn không thể gửi chủ đề mới
Bạn không thể gửi trả lời
Bạn không thể gửi file đính kèm
Bạn không thể sửa bài viết của mình

BB code đang Mở
Mặt cười đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

Chủ đề tương tự
Chủ đề Người khởi xướng chủ đề Diễn đàn Trả lời Bài cuối
Bàn Có 5 Chỗ Ngồi - Nguyễn Nhật Ánh Độc Cô Kiếm Khách Truyện ngắn 11 03-01-2009 10:04 AM
Tổng quan về Group Policy - từ đơn giản đến phức tạp ! free4all Thủ thuật trong Tin học 15 20-08-2008 08:51 PM
Visual Studio 2008 Express Edition - Tổng hợp các công cụ thiết kế web và lập tr sona9qt Internet & Network 0 15-04-2008 09:45 AM
Bản quyền trên mạng cần cách hiểu mới? babay288 Tin tức CNTT 1 10-04-2008 09:10 PM

      Nguyễn Hà :  
      ĐT:  0985.087.951

      Mr. Thắng :   
      ĐT:  0978.966.718

      Mr. Hưng :    
      ĐT:  0922.943.286
  • Họp chợ 24/7
  • Bán Gold, Tmbot Travian giả rẻ !
  • Hosting chất lượng cao, giá rẻ !
    Hot Girls
  • Làm quen Kết Bạn

Múi giờ GMT +7. Hiện tại là 04:40 PM


Sử dụng mã nguồn vBulletin® Phiên bản 3.8.4
© 2006 - 2010 - Phát triển bởi BQT và tất cả các thành viên aloxovn.com
Liên hệ đặt textlink : Y!M : aloxovn_com - Email : webmaster@aloxovn.com