Xử Lý đồ Họa Với Thư Viện GD - Tài Liệu Text - 123doc

Tải bản đầy đủ (.doc) (5 trang)
  1. Trang chủ
  2. >>
  3. Công Nghệ Thông Tin
  4. >>
  5. Quản trị mạng
Xử lý đồ họa với thư viện GD

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (122.86 KB, 5 trang )

Bài 22: Xử lý đồ họa với thư viện GDThủ thuật sử dụng thư viện GD tác giả : Dan Radigan MacromediaCơ Bản GraphicsChúng ta hãy bắt đầu tìm hiểu khái niệm về tệp ảnh là gì và nó đuợc diễn đạt qua máy vitính như thế nào. Một tệp ảnh chẳng khác nào là một tập hợp của nhiều pixel hay dots bởimột màu sắc nhất định nào đó.Mọi hình ảnh đều có dạng hình chử nhật (rectangular) và có cạnh dài và ngắn nhất định,đuợc tạo bởi một matrix của pixels. 100 hình mỗi hình có 300 pix sẽ có tổng số pix là30000 pixels. Trong php, hình ảnh là một hệ thống liên hợp (coordinate). Ví dụ: x bằng300 và y bằng 100.Ở góc độ trên bên trái của hình nó sẽ luôn là (0,0). Giá trị của x tăng dần theo khi kéochéo một đường từ góc trái xuống góc phải đối diện (x,y), cũng như giá trị y tăng dần khikéo một đường thẳng từ trên xuống dưới(0,y).Khi cho nội dung bất kỳ vào khung ảnh nóluôn liên quan tới góc độ trái phía bên trên. Nhìn ví dụ trên, góc liên hợp (180, 50) đựơcđóng lại phía tay phải của tệp hình, khoảng giữa đổ xuống.Làm một ví dụ tương tự trong đời sống, để xem hình ảnh đựơc diễn tả như thế nào. Bạnhãy tưởng tượng bạn đặt 100 con cá màu vàng vào một ô có chiều cao là 10 và chiều dàicũng là 10, căn bản bạn sẽ thấy một hình vuông màu vàng. Bây giờ bạn thử thay vào đóvài con cá khác màu xanh theo dạng hình chữ H bạn sẽ nhận ra ngay chữ H xanh trongmột khung hình vàng. Chúc mừng bạn, bạn đã tạo một tệp ảnh động rồi đó...Một điểm cần chú ý nữa đó là transparency (vô sắc).Transparency có khả năng tẩy„clear“ pixel. Trong trường hợp bạn muốn giấu mấy con cá vàng, bạn chỉ cần đổi chúngthành vô sắc, sau đó bạn chỉ còn thấy chữ H màu xanh bao bọc bởi một màu trắng dotransparency kết nối lại với nhau.Image-formateCấu trúc, được html hiện thị lên web-site để biểu diễn hình ảnh luôn là một liên đới tĩnh(relativ statisch ). Dạng hình đã thay đổi chút ít trong những năm qua. 3 dạng hình quantrọng thường đựơc dùng là gif, jpeg, png.GIF được viết tắc từ Graphics Interchange Format. Vài năm trước đây gif rất được sửdụng phổ biến, bởi tính năng vô sắc ( transparency ) của nó. Dạng màu của Gif được kếthợp bởi 8-bit, do đó bạn chỉ có thể có 256 màu trong một tệp ảnh duy nhất.Do ảnh hưởng của sức chứa màu, ảnh Gif chủ thích hợp với những khung có diện tíchlớn.Trong những năm gần đây Unisys Corporation, chủ quyền của LZW compression, ngườitoàn quyền về việc sử dụng dạng hình gif, đã mất quyền chuyên giữ (patent) vào khoảngtháng 6 2003, nên giới sử dụng dạng gif cũng giảm xuống rất nhiều.JPEG, Joint Photographic Experts Group, một dạng hình thích hợp cho ảnh chụp.Dạngjpeg không có vô sắc màu, nên nó không thích hợp với các toolbars hay Form không cógóc cạnh.PNG, Portable Network Graphics, một dạng dình mới được hổ trợ bởi nhiều trình duyệt.PNG có nhiều điểm lợi gần như của gif cộng cả tính vô sắc màu. Điểm cần chú ý PNGkhông biểu hiện rỏ ràng trên trình duyệt của netscape 4, nhưng mọi trình duy hiện tại đềudiễn đạt tốt. Bạn nên thử loại hình này trong mọi trình duyệt xem nó có thích ứng không.Thủ thuật biến đỏi ảnh bằng PHPGD là một ANSI-C thư viện cho việc tạo lập hình ảnh động. Tương tự như php, thư việngd là một mã nguồn mở của boutell.com bạn có thể vào đây để tải nó xuống nếu trongphp chưa có thư viện này ( tôi nghĩ rằng không, php đã cài sẳn nó rồi, cảm ơn trờiphật :-))Installation thư viện GD: chỉ nói ngắn gọn.xem trong file php.ini. Tìm dòng ;extension=php_gd2.dll bỏ dấu „ ; „ và start apache làok. Muốn cho chắc chắn thì vào trình duyệt gọi tệp này <?php phpìno() ; ?> xem tv GDđã bật chưa.GD-API bao gồm nhiều function, giúp bạn tạo, sửa các tệp tin hình ảnh qua lập trinhphp.API rất bao la và không chỉ vỏn vẹn trong phần tạo ứng nhỏ trong bài này. Chúng tatập trung vào 4 điểm quan trọng :-Phương thức cơ bản (basic funtions)-Sảo thuật màu (color manipulation)-Vẽ hình (drawing primitive shapes)-Vẽ chữ ( working with text)the basic functionChúng ta bắt đầu với cốt lõi của function và dùng nó để tạo hình trong bất kỳ servergraphic nào. Function này sẽ nạp (load ) hình từ máy, lưu giử vào bộ phận nhớ ( memory)sau đó ghi hình vào đĩa cứng (disk) hay chuyển (streaming) đến trình duyệt.Creating ImagesBạn có thể dùng function imagecreate () để tạo một nguồn ảnh mới để chỉnh đổi. Cáchgọi : Ressource imagecreate (int x_size, int y_size) .Function imagecreate() trả lại cho chúng ta nguồn (resource) tương đương với ảnh hìnhgiống như cú pháp của mysql mysql_connect() trả cho chúng ta một mảng dử liệu( recordset), nhưng bạn không thể sử lý trực tiếp vào biến này được, ở đây có liên quanđến funtion làm biến đổi hình ảnh, do đó nó sẽ vận chuyển source của ảnh đến funtionimage để làm việc này. Function sẽ cho ta kết quả của ảnh ở độ phân giải x_size vày_size.Sử dụng ảnh đã có (Using Existing Images)Để tạo một ảnh trống (blank image) , chúng ta có thể lấy ảnh từ disk qua các funtions sau:resource imagecreatefromjpeg (string filename) // ảnh dạng jpegRessource imagecreatefrompng (string filename) // ảnh dạng pngNhiều tương tự như funtion imagecreate(). 2 Funtions này trả cho ta giá trị của nguồn ảnhtương đương với tệp ảnh trong disk , nếu nó là true. Nguợc lại funtion trả một chuỗi trống( empty string) nếu là false. Nếu fopen-wrappers' được bật lên ( có thể chỉnh sửa trong tệptin php.ini) bạn có thể dùng URL như tên của tệp ảnh.Nhưng coi chừng máy sẽ chạy chậm đi vì phải tìm chất liệu qua HTTP. Mỗi khi 1 chứcnăng dùng URL thay vì một hồ sơ trên đĩa, chức năng script phải tìm qua mạng lưới. Vìqua mạng lúc nào cũng chậm hơn là đi thẳng từ đĩa nên máy chạy chậm đi là 1 quan tâmở đây.fopen_wrappers chạy tốt với php trên nền unix và cũng được chỉnh sửa trên nềnWindows kể từ phiên bản (vers.) 4.3.Truy tìm kích thước của tệp ảnh ( Finding an Image's Size)Rất nhiều điểm lợi khi ứng dụng web cho ta biết kích thước của ảnh. Chúng ta có thể sửdụng thông tin này:ví dụ cần kích thước chính xác của ảnh để làm một popup-windowcho một thư viện ảnh hoặc đặt ảnh theo chiều cao, rộng trong <img>tag.Array getimagesize ( string filename [, array imageìno])funtion getimagesize() trả về cho ta 4 phần tử (elements) array là:element 0: độ ngang của ảnh trỏ về tham số pixels của tệp ảnhelement 1: độ cao của ảnh trỏ về tham số pixels của tệp ảnhelement 2: trị số (interger) tương đương cho loại ảnh (typ image) (1=gif, 2=JPG, 3=PNG)element 4: chuỗi gắn thêm (add) vào <img>tag để biểu hiện độ cao rộng, vd: „height=100width=200“Tham số (parameter) của tệp ảnh dự bị được chuyển đưa đến dãy array nhằm lấy thêmnhững thông tin của ảnh. Khi họat động nó trả lại một JPG APP (nhờ thằng google nógiải thích giùm là cái gì nhá) khác nằm trong một associative array.Truy lùng độ phân giả cao rộng ( retrieving the width and height)Nếu chúng ta cần đến độ cao rộng của ảnh chúng ta không cần đo thông tin ảnh trongmãng array một cách khó khăn.Chúng ta có thể sử dụng funtion imagesx() và imagey() để truy tìm độ cao rộng của tệpảnh.Int imagex ( resource image)Int imagey ( resource image)Như đã thấy funtions imagex và imagey trả cho ta giá trị của độ cao và rộng của tệp ảnh.Cũng cần lưu ý function này không giống như function getimagesize trên. 2 functions nàychỉ lấy nguồn ảnh (resource) , chứ không phải đường dẫn của ảnh (file path). Muốn tạoảnh bạn nên dùng funtion imagecreate() trước sau đó đến 2 function imagex() vàimagey() để lấy tham số của ảnh do imagecreate() tạo.Copy và Bóp ảnh ( copy & resizing an a image)Chúng ta có thể dùng coy và resize để tạo ảnh mới. Function này rất lợi cho việc làm thưviện hình ảnh như thubmnails...int imagecopyresized (resource dst_im, resource src_im,int dstX, int dstY,int srcX, int srcY,int dstW, int dstH, int srcW, int srcH)Function này copy phần góc (rectangular) của nguồn ảnh và trao trả chúng đến đích củaảnh thật.dst_im, src_im – the destination and source image resourcesint dstX, int dstY – the upper-left corner of the replaced content in the destination imageint srcX, int srcY – the upper-left corner of the source content in the source imageint dstW, int dstH – the width and height of the rectangular area to replace in thedestination imageint srcW, int srcH – the width and height of the rectangular area to copy in the sourceimageNếu trong phạm vi góc thì không tương ứng với độ cao rộng trong khoảng giữa nguồnảnh và đích ảnh. Function này họat động tương đối nó có thể copy từng vùng (regions)với cùng lọai ảnh (same image) (vd: dst_im tuơng ứng với src_im ). Tuy nhiên nếu vùngảnh(régions) nằm trên vùng đã có kết quả (results) thì ta không thể liệu trước được.Cho ảnh hiệ thị trên trình duyệt ( outputting to the browser)Khi đã chỉnh sửa ảnh xong, chúng ta cần tìm giải pháp cho ảnh hiện trên trình duyệt. Đểlàm việc này chúng ta dùng function imagepng() and imagejpeg()int imagepng (resource image [, string filename])int imagejpeg (resource image [, string filename])function này xuất dữ liệu nguyên thủy (raw) của ảnh đến trinh duyệt. Nếu nguồn ảnh làmột tên tệp (file name) , nó sẽ được ghi chép mọi thông tin vào tệp ảnh. Tên tệp phải nằmtrong đĩa cứng (disk) và php phải có toàn quyền (chmod 777) để sao chép tin tệp. Ta cầndùng funtion header() trong trình duyệt khi muốn đưa ảnh hiện thị.Xóa bỏ bộ nhớ ( Reclaiming used Memory)Sau giao chuyển hình đến trinh duyệt chúng ta cần loại bỏ đi phần tồn trong bộ phận nhớqua function : imagedestory().int imagedestory ( resource image)Cách sử dụng căn bảnĐể dùng function này chúng ta cần tạo một thubmnail để nạp (load) hình và kéo nhỏxuống 1/8 so với ảnh nguyên thủy , kế đến lưu vào đĩa.PHP Code:<html><body>

Từ khóa » Thư Viện Xử Lý ảnh Php